💡
GAS開発をApps ScriptエディタからCLIに寄せ、コピペ地獄を無くす方法(clasp+TypeScript+AIエージェント)
はじめに
業務で、GASからBigQueryを定期実行して、結果(何十項目もある)を複数シート・複数表に整形して出力する処理を書いていました。
Geminiにコードを貼って「ここを直して」「この列を追加して」などとやっていたのですが、
毎回コピペしてApps Scriptエディタに戻すのがとにかく面倒でした。
そこで、ローカルでCLIからAIに指示してGASを書く運用ができないか考えてみました。
つらかったこと
- BigQueryの取得項目が多く、出力フォーマット変更が頻発
- 「AIに依頼→コード受け取り→Apps Scriptにコピペ」の往復が重い
- 修正のたびに差分管理しづらい(どこを直したか追いにくい)
方針
やりたいことはシンプルです。
- GASコードはローカルで編集(もちろんCLIからAIで指示出しする)
- ローカルでの変更は自動反映する
- 実行・ログ確認をCLI中心で回す
最小構成
以下については済んでいる前提とします。
- Node.jsが入っている
- clasp login済み
- Apps Script APIを有効化済み
1.プロジェクト作成
clasp create --type sheets --title "スプレッドシートのタイトル"
- スプレッドシート紐づけのApps Scriptを作成
- .clasp.json が生成される
2.TypeScript導入
npm init -y
npm install -D typescript @types/google-apps-script
tsconfig.build.json を用意して Code.ts -> dist/Code.js をビルドする構成にしました。
(Code.ts をそのままpushするとasなどのTS構文でエラーになるため)
※tsconfig.build.jsonの例も載せておきます。
{
"compilerOptions": {
"target": "ES2019",
"module": "none",
"strict": true,
"types": ["google-apps-script"],
"skipLibCheck": true,
"outFile": "dist/Code.js"
},
"files": ["Code.ts"]
}
3.package.json作成
{
"name": "morning-dashboard",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "mkdir -p dist && npx tsc -p tsconfig.build.json && cp appsscript.json dist/appsscript.json",
"push": "npm run build && clasp push",
"watch": "npm run build && clasp push --watch",
"open": "clasp open-script",
"logs": "clasp tail-logs --watch"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/google-apps-script": "^2.0.10",
"typescript": "^5.9.2"
}
}
主要なコマンド
npm run push # ローカルでの変更をリモート(GASのエディタ)にJSをビルドしてpush
npm run open # GASのスクリプトエディタがブラウザで開ける
npm run logs # ログの監視
やってみて思ったこと
以下の点で大幅に開発体験が向上しました。
- 修正指示をそのままローカルに反映できる
- 差分が追いやすい(Gitで管理できるため)
- ターミナルでコードの作成を完結できる(Web上のエディタでは必須だったコピペがなくなる)
まとめ
GASはブラウザだけでも書けますが、
規模が大きくなるならclasp + TypeScript + CLI運用の方がストレスが少ないと思います。
特に、AIでコード修正を回すなら、
コピペ前提よりも、ローカルでCLIで指示を出して修正させるほうがストレスが少ないです。
同じ悩みがある人の参考になればうれしいです。
おまけ
作業用ディレクトリを作ってそこでCLI上で任意のAIを起動し、
以下のようなプロンプトを実行すると簡単に環境構築できます。
GAS(Google Apps Script)を「ローカル編集 → 自動push → 実行/ログ確認」できる最小構成を、
実際にコマンド実行して作ってください。
要件:
- claspでスプレッドシート紐づけのGoogle Apps Scriptプロジェクトを作る(未作成なら)。
- TypeScriptで書ける状態にする(tsconfig + 型定義)。
- Code.tsを作り、次の関数を用意する:
(ここに作って欲しい処理に関して記述)
- console.logを適度に入れてclasp logsで追えるようにする
実行手順:
1) まず、 `pwd`と `ls -la`を実行して現状を確認。
2) `.clasp.json`が無ければ、`clasp create --type sheets --title "スプレッドシートのタイトル"`を実行してプロジェクトを作成。
3) `npm init -y` を実行し、devDependenciesに`typescript`と`@types/google-apps-script`を入れる。
4) `tsconfig.json`を作成(module:none / target:ES2019 / types:google-apps-script / strict:true)。
5) claspが作った`Code.gs`がある場合は削除または`Code.ts` に置き換え(最終的にCode.ts だけを使う)。新規作成でもOK。
6) `.claspignore`と`.gitignore`を作り、node_modulesや.gitなどをpush対象外にする。
7) package.jsonにscriptsを追加:
- "push": "clasp push"
- "watch": "clasp push --watch"
- "open": "clasp open"
- "logs": "clasp logs --watch"
8) ここまでできたら`npm run push`を1回実行してアップロード成功を確認。
9) 最後に、私が次に叩くコマンド(watch/open/logs)を3行で提示して終了。
注意:
- 可能な限りターミナルだけで完結させてください(ただし clasp login の再実行は不要)。
- ファイル作成はcat/EOFなどで中身をちゃんと書き込んでください。
- 途中でエラーが出たら、その場で原因を確認して修正し、手順を続行してください。
Discussion