GASをclaspでローカル開発する方法
|Claude CodeでGASを書く
GASのコードをブラウザのエディタで書いていると、Git管理もAIへの依頼も遠回りになります。公式CLIのclaspを入れると、GASのコードが手元の普通のファイルになります。導入手順から、AIコーディングツールと組み合わせた開発ループ、clasp 3系での変更点まで解説します。
Table of Contents
claspとは|GASを手元のファイルとして扱う公式CLI
claspは、Googleが公式に提供しているコマンドラインツール(ターミナルで文字を打って操作するツール)です。GASのプロジェクトを自分のPCにダウンロードし、編集し、またクラウドへアップロードできます。名前は「Command Line Apps Script Projects」の頭文字です。
GASのコードがローカルのファイルになると、何が変わるのか。実務でいちばん効くのは次の4点です。
Gitでバージョン管理できる
「誰がいつ何を変えたか」が残り、壊したら戻せます。ブラウザのエディタのバージョン機能より細かく扱えます。
使い慣れたエディタで書ける
VS Codeの補完・検索・一括置換がそのまま使えます。ファイルをまたいだ検索が効くのは大きな差です。
AIにコード全体を読ませられる
Claude Codeのようなツールに「このプロジェクトを直して」と頼めます。コピー&ペーストの往復が消えます。
コードを使い回せる
共通処理を別プロジェクトへコピーする、テンプレートから新規案件を立ち上げる、といった横展開が現実的になります。
逆に、10行のスクリプトを1つ書くだけならブラウザのエディタで十分です。claspが効いてくるのは「ファイルが3つ以上に分かれてきた」「同じ仕組みを複数の部署に展開したい」「AIに任せる範囲を増やしたい」というタイミングです。
導入手順|インストールとApps Script APIの有効化
必要なのはNode.js(JavaScriptをPC上で動かす実行環境)が入ったPCと、Googleアカウントだけです。ターミナルで次を実行します。
# 1. clasp をインストール(Node.js が必要)
npm install -g @google/clasp
# 2. バージョン確認(3系かどうかをここで確かめる)
clasp --version
# 3. Google アカウントでログイン(ブラウザが開く)
clasp loginclasp loginを実行するとブラウザが開き、Googleアカウントの認可画面が出ます。許可すると、以降はそのアカウントの権限でGASプロジェクトを読み書きできます。
最初につまずくポイント:Apps Script APIの有効化
ログインしただけではpushもpullも通りません。 script.google.com/home/usersettings を開き、「Google Apps Script API」をオンにしてください。アカウントごとに1回だけ必要な設定です。エラーメッセージ「User has not enabled the Apps Script API」が出たら、まずここを疑います。
新しくプロジェクトを作る場合はclasp create-scriptを使います。
# ゼロから作る場合(スプレッドシートに紐づくプロジェクト)
mkdir my-gas-project && cd my-gas-project
clasp create-script --title "経費集計ツール" --type sheets --rootDir ./src
# --type に指定できる主な値
# standalone … 単体のスクリプト
# sheets / docs / slides / forms … 各ファイルに紐づくスクリプト
# webapp … Web アプリ--rootDirでコードの置き場所を指定しておくと、プロジェクト直下が設定ファイルだけになって見通しが良くなります。あとから.clasp.jsonで変更もできます。
既存プロジェクトの取り込みとpush・pull
すでに動いているGASをローカルに持ってくるところから始めるのが現実的です。スクリプトIDは、GASエディタの「プロジェクトの設定」画面で確認できます。エディタのURLに含まれる長い文字列でも構いません。
# 既存の GAS プロジェクトを手元に取り込む
# scriptId はエディタの「プロジェクトの設定」で確認できる
clasp clone-script 1AbCdEf...スクリプトID... --rootDir ./src
# 取り込まれるファイルの例
# .clasp.json … どのプロジェクトと繋がっているかの設定
# src/appsscript.json … プロジェクトのマニフェスト
# src/コード.js … 既存のスクリプトあとは、この2つのコマンドを行き来するだけです。pushがローカル→クラウド、pullがクラウド→ローカルです。
# ローカルの変更をクラウドへ反映する
clasp push
# 保存するたびに自動で push する(開発中に便利)
clasp push --watch
# クラウド側の内容をローカルへ取り込む(作業開始前に実行する)
clasp pull
# ブラウザのエディタを開く
clasp open-script
# 実行ログをターミナルで見る
clasp tail-logs --watchclasp push
ローカルのファイル一式でクラウド側を上書きします。「差分だけ反映」ではない点に注意してください。
clasp push --watch
ファイルを保存するたびに自動でpushします。試行錯誤しながら書くときに便利です。
clasp pull
クラウド側の内容でローカルを上書きします。誰かがブラウザ側で直した可能性があるなら、作業前に必ず実行します。
clasp tail-logs
実行ログをターミナルに流します。--watchを付けると実行のたびにリアルタイムで表示されます。
clasp open-script
対応するGASエディタをブラウザで開きます。トリガー設定など、画面でしかできない作業への入り口です。
pushは上書きです。ブラウザのエディタで直接直した内容は、ローカルにpullしていなければpushで消えます。claspを使い始めたら「クラウド側は直接編集しない」をチームのルールにするのが、いちばん確実な事故防止策です。
プロジェクト構成|.clasp.jsonとappsscript.json
claspのプロジェクトには、役割の違う2つの設定ファイルがあります。混同しやすいので整理しておきます。
.clasp.json|claspの動きを決める設定
「どのGASプロジェクトと繋がっているか」「どのフォルダをpushするか」を持ちます。ローカル専用のファイルで、クラウド側には送られません。
{
"scriptId": "1AbCdEf...スクリプトID...",
"rootDir": "./src",
"scriptExtensions": [".js", ".gs"],
"htmlExtensions": [".html"],
"filePushOrder": ["src/config.js", "src/main.js"]
}scriptId
接続先のGASプロジェクトのID。必須項目です。
rootDir
pushの対象にするフォルダ。指定しない場合はプロジェクト直下になります。
scriptExtensions
スクリプトとして扱う拡張子。既定は .js と .gs です。
filePushOrder
先に読み込ませたいファイルの順番。設定値の定義ファイルなどを先頭にします。
appsscript.json|GASプロジェクト本体の設定
マニフェストと呼ばれる、GAS側の設定ファイルです。タイムゾーン、ランタイム、必要な権限(OAuthスコープ)などを持ちます。こちらはpushでクラウドへ反映されます。
{
"timeZone": "Asia/Tokyo",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/script.external_request"
]
}timeZoneをAsia/Tokyoにしておかないと、日付処理が9時間ずれる原因になります。新規プロジェクトを作ったら最初に確認したい項目です。
.claspignore|pushしないファイルを決める
READMEやテストコード、node_modulesをクラウドへ送らないための除外設定です。.gitignoreと同じ書き方で、「全部除外してから、必要なものだけ許可する」形が扱いやすくなります。
# push したくないファイルを .claspignore に書く(.gitignore と同じ書き方)
**/**
!src/**/*.js
!src/**/*.html
!src/appsscript.jsonclasp 3系の変更点|コマンド名とTypeScript
claspは3系でコマンド体系が整理されました。ネット上の解説記事は2系のものが多く残っているため、手順どおりに打ったのに動かない、という混乱が起きやすい状態です。まずclasp --versionで自分の環境を確認してください。
コマンド名が整理された
公式READMEでは create-script / clone-script / open-script / list-deployments / create-deployment / tail-logs / run-function といった名前で記載されています。旧名のまま別名(エイリアス)が残っているものもありますが、新しい名前で覚え直すのが安全です。
TypeScriptの変換機能が無くなった
公式READMEに「clasp no longer transpiles typescript code」と明記されています。TypeScriptで書くなら、Rollupなどのバンドラーで自分でJavaScriptへ変換し、その出力フォルダをrootDirに指定してpushする構成にします。
MCPモード(clasp mcp)が追加された
AIコーディングエージェント向けに、clasp自身をMCPサーバーとして動かす実験的な機能です。公式ドキュメント上も experimental とされ、提供されるツールは限定的だと説明されています。
細かい仕様はバージョンによって動きます。困ったらclasp --helpで、いま自分が入れているバージョンのコマンド一覧を確認するのが確実です。記事の情報より手元のヘルプが正しい、と考えてください。
Claude CodeなどAIエージェントと組み合わせる
ここがclaspを入れる最大の理由になりつつあります。Claude Codeのようなターミナルで動くAIコーディングツールは、ローカルのファイルを直接読んで書き換えます。つまりclaspでGASのコードをローカルに置いた瞬間、GASもAIに任せられる対象になります。
# よくある開発ループ
clasp pull # 1. 最新のコードを手元に取り込む
# 2. AI に依頼する(例)
# 「src/main.js の集計処理を、getValues の一括読み込みに書き換えて。
# 列の位置はヘッダー名から探す形にして、6分の実行時間制限も考慮して」
clasp push # 3. 書き換わったファイルを反映
clasp tail-logs --watch # 4. 実行しながらログを確認ブラウザのエディタだけで作業する場合、AIの回答を毎回コピーして貼り付ける手間が発生します。ファイルが5つ、10つと増えるほど、この往復が重くなります。claspがあれば「直して」と言ってpushするだけです。
プロジェクトの前提をファイルに書いておく
AIはGASを普通のJavaScriptと勘違いして、importやfetchを書くことがあります。プロジェクト直下に前提をまとめたテキストファイル(Claude CodeならCLAUDE.mdやAGENTS.md)を置いておくと、毎回説明せずに済みます。
# GAS プロジェクトの前提(AI に読ませる指示ファイルの例)
## 環境
- Google Apps Script(V8 ランタイム)。Node.js のモジュールは使えない。
- require / import は使わない。ファイルをまたいだ関数はそのまま呼べる。
## 守ること
- シートの読み書きは getValues / setValues で一括。ループ内の getValue 禁止。
- 実行時間は最大6分。超えそうな処理は分割してトリガーで続きを実行する。
- API キーはコードに直書きせず PropertiesService から読む。
- 外部 API は UrlFetchApp を使う(fetch は使えない)。
## 変更後
- clasp push で反映するので、ファイルは src/ 配下に置く。この1ファイルがあるかどうかで、出てくるコードの質がはっきり変わります。とくに「一括読み書き」「6分の実行時間制限」「APIキーの扱い」の3つは、書いておく価値が高い項目です。
AIに任せきりにしない線引き
注意点は、GASが本番データを直接触る環境だということです。AIが書いた削除処理や一括更新をそのままpushして実行すると、実データが戻せなくなります。破壊的な処理を含む変更は、テスト用のスプレッドシートを複製して試す、clasp pushの前にコードを自分の目で読む、という手順を必ず挟んでください。
実務での運用|Git管理・デプロイ・事故防止
claspを入れたあと、運用で押さえておきたいポイントを挙げます。
.clasp.jsonをGitに含めるか
スクリプトIDが書かれているため、社外に公開するリポジトリでは除外するのが無難です。社内の非公開リポジトリなら、含めておくとチームメンバーがcloneしてすぐpushできます。方針をREADMEに書いておきましょう。
認証情報は絶対にコミットしない
clasp loginで作られる認証ファイルや、APIキーを書いたファイルはGitに入れません。APIキーはコードではなくPropertiesServiceに保存し、コード側からは名前で読み出す形にします。
Webアプリの反映にはデプロイが必要
pushしただけでは、公開中のWebアプリのURLの動きは変わりません。create-deploymentで新しいデプロイを作るか、既存のデプロイを更新して初めて反映されます。ここは毎回ハマるポイントです。
トリガーは画面側の設定
時間主導トリガーなどはコードファイルではないため、pushでは移りません。ScriptAppでトリガーを作る関数を用意しておくと、プロジェクトを複製したときの再設定が一発で終わります。
作業の前にpull、後にpush
この順番を崩さないことが、上書き事故を防ぐいちばん簡単な方法です。複数人で触るプロジェクトほど効きます。
まとめ
claspでやることは、突き詰めればclone-scriptで取り込み、pullして直してpushする、これだけです。最初の関門はApps Script APIの有効化、いちばんの注意点はpushが上書きであることの2点に集約されます。
そのうえで得られる価値は、Git管理とAI活用です。GASのコードがローカルのファイルになれば、Claude Codeのようなツールにプロジェクト全体を読ませて修正を任せられます。前提を書いた指示ファイルを1つ置き、破壊的な処理だけは自分の目で確認する——この運用に乗せられれば、GAS開発のスピードは体感で変わります。
なお、clasp 3系はコマンド名やTypeScriptの扱いが2系から変わっています。ネットの記事と挙動が違うと感じたら、clasp --helpで手元のバージョンの正解を確認するのが最短です。
よくある質問
GASのコードを手元のPCのファイルとして扱えるようになります。結果として、Gitでのバージョン管理、VS Codeなど使い慣れたエディタでの編集、Claude CodeのようなAIコーディングツールにコード全体を読ませての修正依頼、複数プロジェクト間でのコードの使い回しができます。ブラウザのエディタのままでは、この4つはいずれも難しい作業です。
かかりません。claspはGoogleが公式に提供しているオープンソースのコマンドラインツールで、npmから無料でインストールできます。必要なのはNode.jsが入ったPCと、対象のGASプロジェクトを編集できるGoogleアカウントだけです。
Apps Script APIが無効のままです。https://script.google.com/home/usersettings を開き、Google Apps Script APIをオンにしてください。これはGoogleアカウントごとの設定で、1回オンにすれば以降のプロジェクトでも有効です。オンにした直後は反映に少し時間がかかることがあります。
clasp 3系では、clasp自身がTypeScriptを変換(トランスパイル)する機能は無くなりました。公式READMEにも「clasp no longer transpiles typescript code」と明記されています。TypeScriptで書きたい場合は、Rollupなどのバンドラーで自分でJavaScriptに変換してから、その出力をpushする構成にします。2系の情報をそのまま試すと動かないので注意してください。
あります。pushはローカルのファイル一式でクラウド側を上書きする動作です。ブラウザのエディタ側で直接編集した内容は、pushすると失われます。チームで運用するなら「クラウド側は直接編集しない」というルールを決め、作業前に必ずclasp pullで最新を取り込む習慣にしてください。心配なときは、pushの前にGASのエディタでバージョンを保存しておくと戻せます。
必須ではありませんが、あるとフローが一段楽になります。claspが無い場合は、AIが出力したコードを毎回ブラウザのエディタに貼り付ける手作業が発生します。claspがあれば、AIがローカルのファイルを直接書き換え、あなたはclasp pushで反映するだけです。ファイルが複数に分かれた中規模以上のプロジェクトほど差が出ます。
関連するサービス・記事
GAS開発・AI業務自動化を
相談する。
属人化したスクリプトの整理、Gitでの管理体制づくり、AIを組み込んだ業務自動化の設計から実装まで。「作ったはいいが誰も触れない」状態になる前にご相談ください。