Site cover image

Site icon imageおかしんワークス

ビジネステクノロジーエンジニア @okash1n のブログです

DockerとClaspとTypeScriptとGitHubを使ってGASをローカル開発する

こんにちは。ビジネステクノロジーユニットのおかしんです。

通常、専用のエディタで書くGoogle Apps Script(GAS)ですが、それをGoogle謹製のCLIツール clasp を使ってローカルで書き、Git管理する手法を検討してみました。Dockerによってチームメンバーが誰でも簡単に環境構築できるようにしています。

作ったリポジトリ

出来ること

このリポジトリをテンプレートとして利用可能
Image in a image block

「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 で制御している
    • npm run create {project_name}
      • リポジトリ直下にproject_name/.clasp.jsonproject_name/src/appsscript.jsonを作成し、タイムゾーンを日本に変更する
    • npm run push {project_name}
      • プロジェクトをclasp pushする
  • GASの型定義ファイルやeslintprettierがインストールされる
    • 定義ファイルによって、ローカルでもGASの補完が効く
    • 未実装だが、eslintprettierによる整形ができる(ようになる予定)

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と整形する

eslintprettierやの設定ファイルを追加し、ちゃんと整形されるようにする。GitHub Actions側でやるかファイル保存時にやるかは迷っている。

gts というものもあるようなので、調べたい。

テスト出来るようにする

jest でテスト出来るようにする

あとがき

現状の機能でも、すぐにチームでGitを使ったGAS開発が出来るように作ってるので、よかったら使ってみてください。

1リポジトリで複数のGASを管理するようになっていますが、GitHub Actionsのymlを少し修正すれば、1リポジトリ・1プロジェクトにも出来ます。

あまり自分がTypescriptなどに詳しくないので、おかしなことをしていたらISSUE投げてください。修正します。