こんにちは。ビジネステクノロジーユニットのおかしんです。
通常、専用のエディタで書くGoogle Apps Script(GAS)ですが、それをGoogle謹製のCLIツール clasp
を使ってローカルで書き、Git管理する手法を検討してみました。Dockerによってチームメンバーが誰でも簡単に環境構築できるようにしています。
作ったリポジトリ
出来ること
このリポジトリをテンプレートとして利用可能
「Use this template」することで、自組織のプライベートリポジトリやパブリックリポジトリとして利用できます。秘匿性が必要な処理もあると思うので、ForkじゃなくてTemplateとして使ってください。
VSCodeのRemote Containersを使って開発可能
Dockerfile
Typescriptやclaspをすぐに使えるようにしています
devcontainer.json
自動でコンテナに npm install
されるようにしています。
package.json
- npm-script でいい感じにGASプロジェクトをCreateしたりPushできる
- 生で
clasp
を叩くとディレクトリ構造を整えたり、タイムゾーンがアメリカになったりするので、 npm-script で制御している- clasp-script.shを実行している
npm run create {project_name}
- リポジトリ直下に
project_name/.clasp.json
とproject_name/src/appsscript.json
を作成し、タイムゾーンを日本に変更する
- リポジトリ直下に
npm run push {project_name}
- プロジェクトを
clasp push
する
- プロジェクトを
- 生で
- GASの型定義ファイルや
eslint
やprettier
がインストールされる- 定義ファイルによって、ローカルでもGASの補完が効く
- 未実装だが、
eslint
やprettier
による整形ができる(ようになる予定)
GitHub Actionsによって、自動でclasp push
clasp_push.yml
全プロジェクトフォルダをclasp push
してくれる
project_name
├── src
│ ├── code.js
│ └── appsscript.json
├── .clasp.json
project_name2
├── src
│ ├── code.ts
│ └── appsscript.json
├── .clasp.json
既存のプロジェクトを取り込む
基本的にはプロジェクト名のフォルダをリポジトリ直下に作ってやり、その中にclasp.jsonを置いてからclasp pull
するか、もしくは—rootDir
オプションをつけてclasp clone
すれば良いです。
今後できるようにしたいこと
GASプロジェクトの移動機能
現状では、実際のGASプロジェクトはClaspを実行しているユーザーのマイドライブに入ってしまう。それをDriveのAPIを叩いて特定の共有ドライブ内のフォルダに移動する機能をもたせたい。
いい感じにLintと整形する
eslint
やprettier
やの設定ファイルを追加し、ちゃんと整形されるようにする。GitHub Actions側でやるかファイル保存時にやるかは迷っている。
gts
というものもあるようなので、調べたい。
テスト出来るようにする
jest
でテスト出来るようにする
あとがき
現状の機能でも、すぐにチームでGitを使ったGAS開発が出来るように作ってるので、よかったら使ってみてください。
1リポジトリで複数のGASを管理するようになっていますが、GitHub Actionsのymlを少し修正すれば、1リポジトリ・1プロジェクトにも出来ます。
あまり自分がTypescriptなどに詳しくないので、おかしなことをしていたらISSUE投げてください。修正します。