clasp 環境を Docker で作ってみたので、そのときの作業ログを以下に示す。
Clasp とは
GAS をローカルで開発するためのツール。
前準備: GAS API を有効化する
ここから有効化できる: https://script.google.com/home/usersettings
用意するファイルとディレクトリ構造
ディレクトリ構造:
|
|
用意するファイル:
.gitignore
|
|
補足:
Code.gs
はビルド結果なので gitignore しておく
.env
|
|
補足:
- clasp はログインの credential 情報をコンテナ内のユーザの
$HOME
直下に作成する( → 参考 )ので、$HOME
を$WORKING_DIR
にするよう設定している- docker-compose.yml によってカレントディレクトリが
$WORKING_DIR
にマウントされる=カレントディレクトリに credential 情報が書かれたドットファイルが置かれるが、 .gitignore で指定したドットファイル以外は gitignore するようにすることで誤 push を防いでいる
- docker-compose.yml によってカレントディレクトリが
docker-compose.yml
|
|
環境構築手順
コンテナを起動して中に入る・
|
|
yarn init
し、Clasp と TypeScript をインストールする。
|
|
clasp にログインする。
|
|
補足: なぜ別ターミナルで curl する必要があるのか?
どうやら clasp login
の --no-localhost
オプションがうまく機能しないらしいため。
その回避策として別ターミナルで curl を叩く方法が紹介されていた( → 参考 )。
今回、 --no-localhost
オプションは使用していないが、同じ方法でログインできた。
今回は スクリプト ID が <GAS_SCRIPT_ID>
の GAS プロジェクトのソースコードを src/
ディレクトリに配置することにする。
そのため、まず src/
ディレクトリを作成する。
|
|
指定したスクリプト ID の GAS プロジェクトのコードをローカルへ clone する。
|
|
clone 後、次の 3 ファイルが生成される。
|
|
このうち、次の 2 ファイルを src/
へ移動させる。
|
|
.clasp.json
の rootDir
を次のように変更する。
|
|
clasp push
で、ローカルのコードを GAS 上へ反映させる。
|
|
Web 上の GAS エディタのページをリロードすると、ローカルのコードが反映されているはず。
ES modules の利用
2024/03/18 現在、 GAS は ES modules に対応しておらず、 import
などが使えない。
使えるようにする方法はいくつかあるようだが、今回は gas-webpack-plugin を使ってみる。
Webpack と gas-webpack-plugin をインストール。
|
|
今回は src/
のソースコードをビルドして dist/
に置くことにする。
そのため、まず dist/
を作成する。
|
|
続いて、 appsscript.json
を dist/
へ移動させる。
|
|
併せて、 .clasp.json
の rootDir
を次のように変更する。
|
|
webpack.config.json
を作成し、次の内容を設定する。
|
|
この時点で、次のようなディレクトリ構造になっているはず。
|
|
yarn webpack
でコードをビルドした後、 clasp push
で、ローカルのコードを GAS 上へ反映させる。
|
|
Web 上でローカルのコードが確認できたら OK 。
サンプルコード
clasp create
等の際の動作確認用サンプルコードを以下に示す。
ディレクトリ構造:
|
|
index.ts
|
|
main.ts
|
|
TIPS
こんな感じで Makefile に clasp push
用コマンドを登録しておくと、 make push
で GAS へ push できて楽。
Makefile
|
|
参考記事
- clasp を使って Google Apps Script の開発環境を構築してみた | DevelopersIO
- clasp で GAS を github 管理する
- gas を管理する clasp の docker 環境を作成する #Docker - Qiita
- clasp login –no-localhost が使えない #GoogleAppsScript - Qiita
- GAS + Typescript のいい感じのビルド環境を整える
- [初心者向け] GoogleAppsScript(GAS)の開発環境をインクリメンタルに構築(TypeScript / Module / Polyfill) #Docker - Qiita