[In the container]# yarn init -y
[In the container]# yarn add -D @google/clasp @types/google-apps-script typescript ts-loader
clasp にログインする。
[In the container]# yarn clasp login
① 出てきた URL にアクセス
② Google アカウントでログイン
③ localhost:*** という無効な URL に遷移すれば OK
④ 別ターミナルでコンテナ内に入り、 curl 'さっきの無効な URL'
⑤ ターミナルにログイン成功の旨が出ていればOK
clasp 環境を Docker で作ってみたので、そのときの作業ログを以下に示す。
Clasp とは
GAS をローカルで開発するためのツール。
前準備: GAS API を有効化する
ここから有効化できる: https://script.google.com/home/usersettings
用意するファイルとディレクトリ構造
ディレクトリ構造:
用意するファイル:
.gitignore
``` .* .*/ node_modules/ dist/Code.gs !.gitignore !.*.sample ``` 補足: * `Code.gs` はビルド結果なので gitignore しておく.env
``` WORKING_DIR=/usr/src/app HOME=$WORKING_DIR ``` 補足: - clasp はログインの credential 情報をコンテナ内のユーザの `$HOME` 直下に作成する( [→参考](https://arc.net/l/quote/lbrrbdld) )ので、 `$HOME` を `$WORKING_DIR` にするよう設定している - docker-compose.yml によってカレントディレクトリが `$WORKING_DIR` にマウントされる=カレントディレクトリに credential 情報が書かれたドットファイルが置かれるが、 .gitignore で指定したドットファイル以外は gitignore するようにすることで誤 push を防いでいるdocker-compose.yml
```yaml version: '3' services: app: image: node:20 container_name: docker_clasp_container env_file: - .env volumes: - ./:$WORKING_DIR working_dir: $WORKING_DIR tty: true ```環境構築手順
コンテナを起動して中に入る・
yarn init
し、Clasp と TypeScript をインストールする。clasp にログインする。
補足: なぜ別ターミナルで curl する必要があるのか?
どうやら `clasp login` の `--no-localhost` オプションがうまく機能しないらしいため。 その回避策として別ターミナルで curl を叩く方法が紹介されていた( [→参考](https://qiita.com/naoyeah/items/0db5fc82561020f2768e) )。 今回、 `--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
参考記事