♨️

BunでGoogle Apps Script(GAS)開発

2024/01/29に公開

bun-gasはnode.jsにかわる(かもしれない)高速なJavascript/Typescriptランタイムでであるbunを用いてGoogle Apps Scriptを開発するためのテンプレートです。

https://github.com/ncukondo/bun-gas

なぜ作ったのか?

Google Apps ScriptはGoogle Workspaceで提供されているスクリプト環境でちょっとした自動化を行うのに便利です。Google Apps Scriptにはブラウザで使用できる専用エディタがあるのですが、この専用エディタではTypescriptやnpmモジュールを扱えず、gitによるバージョン管理も(できないことはありませんが)やりづらいのが問題です。そこで、このような場合にはローカルに開発環境を構築し、claspというコマンドラインツールを使って同期を行います。Googleが提供するAsideのおかげで、ローカル開発環境の構築も非常に楽になりましたが、

  • Node.jsではなく最近噂になっているbunを使って開発してみたい
  • エントリーファイルでexportしたい(Asideではエントリーファイルでexportするとエラーになります)

ため、bunを使いviteを使って高速にトランスパイルを行い、claspでGoogle Apps Script環境と同期するためのテンプレートを作りました。

https://github.com/ncukondo/bun-gas

始め方

  1. bunをインストールします(インストール法)
  2. Google Apps Script APIをオンにします
  3. ターミナルで以下をうちます
bun create ncukondo/bun-gas your-project-name

この後はターミナルに出てくる指示(プロジェクトの名前や既存のGoogle Apps Scriptと連携するかなど聞かれます)に従えば開発環境が整います。

使い方

フォルダ構成は以下の様になっています。

.
├── README.md
├── bin      # トランスパイルなどの処理を行うファイル
│   └─...
├── dist     # トランスパイル後のファイルを出力
│   └── ...
├── public  # トランスパイルされずそのままdistに出力される
│   ├── about_public.js
│   └── appsscript.json
├── src
│   ├── index.ts  # エントリーファイル(ここでexportされた関数をGASで利用)
│   └── module-sample.ts
├── .clasp-dev.json  # 開発用の.clasp.json
├── .clasp-prod.json # プロダクト用の.clasp.json
├── package.json
.
.
.
└── tsconfig.json
  • srcフォルダのindex.tsがエントリーファイルです。ここでexportされた関数はGoogle Apps Scriptから見えるようになり、トリガーを設定するなどが可能です
  • .clasp-dev.jsonと.clasp-prod.jsonは同じ内容で生成されるので、開発環境と本番環境で変えたい場合には編集してください。

主なコマンドは以下の通りです。

bun run init             # initialize project

bun run build            # build project

bun run push             # push project to Google Apps Script using .clasp-dev.json
bun run push:prod        # push project to Google Apps Script using .clasp-prod.json

bun run deploy           # deploy project using .clasp-dev.json
bun run deploy:prod      # deploy project using .clasp-prod.json

bun run open             # open project in browser
bun run open:prod        # open project in browser(in .clasp-prod.json)

注意点

Google Apps Scriptでのエントリーポイントを検出するため、ビルド時にindex.tsをdynamic importして分析しています。そのため、ファイル内に副作用があるとビルド失敗することがあります。

皆さまの開発の助けになれば幸いです。

Discussion