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