clasp CLIとClaude Codeを組み合わせることで、GASのコード生成・プッシュ・デプロイ・実行をすべてCLIから管理できます。
- 要点1: claspはGoogle公式のCLIツール。ローカルエディタでGASを開発してGitで管理できる
- 要点2: clasp runはAPI設定が複雑なため、Web Appデプロイ+curlで実行する方式が実用的
- 要点3: GASのトリガー機能を使えばGitHub Actionsより設定が簡単で、定期実行も確実
対象: GASをより効率的に管理・自動化したい開発者・DX推進担当者
今日やること: npm install -g @google/clasp でclaspをインストールし、既存のGASプロジェクトをクローンしてみる
この記事の目次
Claude CodeからGAS(Google Apps Script)を操作するには、claspというGoogleの公式CLIツールが不可欠です。claspを使えば、GASのコードをローカルで編集してClaude Codeに自動生成させ、そのままCLIでプッシュ・デプロイまで完結させることができます。
「GASを使いたいがオンラインエディタだと管理が大変」「Claude Codeと連携してGASの業務自動化を進めたい」——こうした課題は、claspの導入で解消できます。
この記事では、clasp CLIの基本セットアップからClaude Codeとの連携ワークフロー、実際の業務自動化事例まで、ある企業での実践内容をもとに解説します。clasp runが動かない場合の代替手段も含めた、すぐに使える手順です。
clasp(クラスプ)とは?GASをローカルで管理できるCLIツール
claspとは、Google Apps ScriptをローカルのPCで開発・管理するためのGoogleが公開している公式CLIツールです。GitHubのスター数は1万を超えており、GAS開発者の間では標準的なツールとして定着しています。
これまでGASはブラウザ上のオンラインエディタでしか編集できませんでしたが、claspを使えばVS Codeなどのローカルエディタで開発して、clasp pushコマンドで反映できます。
claspが解決する3つの問題
| 課題 | GASオンラインエディタ | clasp導入後 |
|---|---|---|
| バージョン管理 | できない(都度スナップショット) | Gitで完全に管理可能 |
| チーム開発 | エディタを共有するしかない | ローカルで並行して開発できる |
| Claude Code連携 | ブラウザ操作が必要 | CLIなのでClaude Codeから直接実行可能 |
特にClaude Codeとの相性が良い点が重要です。Claude Codeはターミナルコマンドを実行できるため、claspのコマンドをそのまま呼び出してGASのプッシュやデプロイを自動化できます。
claspでできること・できないこと
できること:– GASプロジェクトのクローン(ダウンロード)- ローカルで編集したコードをGASにプッシュ(clasp push)- デプロイバージョンの作成・更新(clasp deploy)- GASのログ確認(clasp logs)- Web Appとしてデプロイしてcurlから実行可能にする
できないこと(または制限あり):– clasp runでGAS関数を直接実行するには、Google Cloud ConsoleでApps Script APIを有効化し、API Executableとしてデプロイする追加設定が必要- GASのトリガー(定期実行設定)はclaspのCLIで管理できない(GAS内のコードで設定する)
claspのインストールと初期設定手順
claspはNode.jsのnpmパッケージとして配布されています。
前提条件の確認
node -v # v18以上を推奨npm -v # v9以上を推奨
Node.jsがインストールされていない場合は、公式サイト(nodejs.org)からインストールしてください。
claspのインストールとログイン
# グローバルインストールnpm install -g @google/clasp# バージョン確認clasp --version# Googleアカウントで認証clasp login
clasp loginを実行すると、ブラウザが開きGoogleアカウントの認証ページが表示されます。Google Apps ScriptにアクセスしているGoogleアカウントでログインしてください。
ポイントclaspのアクセストークンは約1時間で期限切れになります。これはGoogle OAuthの仕様です。ただし、リフレッシュトークンが
~/.clasprc.jsonに保存されているため、次回以降は自動更新されます。長期間使用しなかった場合のみ、再度clasp loginが必要になります。
GASプロジェクトのクローン
既存のGASプロジェクトをローカルに取得するには、スクリプトIDが必要です。スクリプトIDはGASエディタのURLから確認できます(/projects/[スクリプトID]/editの形式)。
# 新しいディレクトリを作成してクローンmkdir my-gas-project && cd my-gas-projectclasp clone [スクリプトID]
クローンに成功すると、ローカルに以下のファイルが生成されます:- .clasp.json — スクリプトIDなどの設定ファイル- appsscript.json — GASプロジェクトの設定(タイムゾーン、ランタイムなど)- Code.js(または.gs)— GASのスクリプトファイル
\ Claude Codeの導入、何から始めればいいかわかります /
法人向けClaude Code個別指導の無料相談はこちらClaude CodeとclaspでGASの開発ワークフローを構築する
claspのセットアップが完了したら、Claude Codeとの連携ワークフローを構築します。
ローカル編集 → push → デプロイの基本フロー
# ローカルのコードをGASにアップロードclasp push# デプロイバージョンを作成(Web App・API Executableとして公開する場合)clasp deploy --description "v1.0 初回デプロイ"# 既存デプロイを更新clasp deploy --deploymentId [デプロイID] --description "v1.1 バグ修正"
実務での活用ポイント: clasp pushは毎回全ファイルをアップロードするため、Gitコミットと合わせて実行するとバージョン管理がしやすくなります。
Claude Codeがコードを自動生成してclaspでpushする実例
ある企業では、Google Meetの録画ファイルをGoogle Driveの指定フォルダに自動整理するGASを、Claude Codeを使って以下の流れで構築しました。
- Claude Codeに「Driveの録画ファイルを日付フォルダに整理するGASを書いて」と依頼
- Claude Codeがローカルの
Code.jsにコードを生成 clasp pushでGASに反映- GASエディタで動作確認(または後述のWeb App経由でテスト)
Claude Codeはターミナルコマンドを実行できるため、コード生成後にそのままclasp pushを自動実行させることも可能です。
appsscript.jsonの管理
appsscript.jsonはGASプロジェクトの重要な設定ファイルです。タイムゾーンの設定が誤っていると、定期実行トリガーが想定外の時刻に動作します。
{ "timeZone": "Asia/Tokyo", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8"}
timeZone: "Asia/Tokyo" を必ず設定してください。デフォルトの "America/New_York" のままにしている場合、定期実行が日本時間と14時間ずれてしまいます。
【重要】clasp runが使えない場合の代替手段 — Web Appデプロイ方式
claspを使い始めてほぼ全員がつまずく点が、clasp runの制限です。
clasp runの制限と必要な設定
clasp runでGAS関数を直接実行するには、以下の設定がすべて必要です。
- Google Cloud Consoleで「Apps Script API」を有効化
- GASプロジェクトを「API Executable」としてデプロイ(GASエディタで手動操作が必要)
- OAuth認証の追加設定
この設定は手順が複雑で、GASエディタ上での手動操作が必要なため、Claude Codeからの完全自動化が難しい状況です。
Web App方式でcurlから関数を実行する
実用的な代替手段として、GASをWeb Appとしてデプロイしてcurlから呼び出す方式があります。ある企業での実践では、この方式に切り替えることで問題を解決しました。
Step 1: GASにdoGet関数を追加する
// Code.jsfunction doGet(e) { const action = e.parameter.action; if (action === 'organize') { organizeAllMeetFiles(); return ContentService.createTextOutput(JSON.stringify({ status: 'OK', action: action })) .setMimeType(ContentService.MimeType.JSON); } if (action === 'dryRun') { const result = organizeAllMeetFiles(true); // dryRunモード return ContentService.createTextOutput(JSON.stringify({ status: 'OK', result: result })) .setMimeType(ContentService.MimeType.JSON); } return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: 'Unknown action' })) .setMimeType(ContentService.MimeType.JSON);}
Step 2: appsscript.jsonにWeb App設定を追加する
{ "timeZone": "Asia/Tokyo", "dependencies": {}, "webapp": { "executeAs": "USER_DEPLOYING", "access": "MYSELF" }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8"}
Step 3: claspでpushしてデプロイする
clasp pushclasp deploy --description "Web App v1.0"
デプロイが完了すると、Web App URLが発行されます。
Step 4: Claude CodeからcurlでGASを実行する
# dryRunで動作確認curl "[Web App URL]?action=dryRun"# 本番実行curl "[Web App URL]?action=organize"
この方式であれば、Claude Codeからcurlコマンドを実行するだけでGAS関数を呼び出せます。「GASが何かを実行したい」というニーズのほとんどは、この方式で解決できます。
実務での活用ポイント: Web App URLはパラメータで関数名を渡せるため、1つのdoGet関数で複数の処理を管理できます。上記の例のように
actionパラメータで処理を分岐させる設計が保守しやすいです。
Claude Codeの導入や活用方法について、個別にご相談いただけます。「どの業務から自動化すればいいか」「GASとClaude Codeを組み合わせた社内ツール構築を相談したい」といった段階から対応しています。
GASのトリガー設定 — Claude Codeから定期実行を管理する
GASにはGoogle側のサーバーで定期実行を管理するトリガー機能があります。GitHub ActionsよりもGASのトリガーを使った方が、設定が圧倒的にシンプルです。
GASトリガーとGitHub Actionsの比較
| 項目 | GASトリガー | GitHub Actions |
|---|---|---|
| セットアップ | GAS内の関数を1回実行するだけ | Secretsへのトークン登録が必要 |
| トークン管理 | 不要(GASが自動で認証) | refresh_token→access_tokenの更新が必要 |
| 信頼性 | Google側で確実に実行 | トークン失効のリスクあり |
| ログ確認 | GASの実行ログで確認 | GitHub Actions上で確認 |
| コスト | 無料(GASの実行制限内) | 無料枠あり(月2,000分) |
ほとんどのケースでGASのトリガー機能で十分です。GitHub Actionsを選ぶのは、他のCI/CDワークフローと統合したい場合など、特定の要件がある場合に限られます。
GASトリガーを設定する関数を作成する
トリガーを設定するための関数をGASに追加して、1回だけ実行します。
// Code.js に追加function setupDailyTrigger() { // 既存のトリガーを削除(重複防止) const triggers = ScriptApp.getProjectTriggers(); triggers.forEach(trigger => ScriptApp.deleteTrigger(trigger)); // 毎日9:00に実行するトリガーを設定 ScriptApp.newTrigger('organizeAllMeetFiles') .timeBased() .atHour(9) .everyDays(1) .create(); console.log('毎日9:00に実行するトリガーを設定しました');}
# コードをpushしてデプロイclasp push# Web App経由でトリガー設定関数を実行curl "[Web App URL]?action=setupTrigger"
または、GASエディタ上でdoGetにactionを追加してsetupDailyTriggerをWeb App経由で実行することもできます。
実務での活用ポイント: トリガー設定関数は「1回実行して設定完了」のものなので、setupDailyTriggerを実行後はGASの実行ログ(clasp logs)で確認してから本番運用に移行しましょう。
実際の業務自動化事例 — claspで管理したGASの活用例
事例1 — Google Meetの録画ファイルを自動整理
課題: Google Meetの録画ファイルがDriveの一か所に貯まり続けて管理が困難になっていました。どのファイルがどの会議のものか判別できない状態でした。
解決方法:– GASでDriveの録画ファイルを取得し、会議名・日付から自動的に整理するスクリプトをClaude Codeで生成- claspでローカル管理し、修正・テストのサイクルをCLIで完結- dryRunモードで影響範囲を確認してから本番実行- GASのトリガーで毎日9:00に自動実行するよう設定
成果: 毎日の録画ファイル整理作業が完全に自動化。手動作業ゼロで録画ファイルの管理が実現しました。
事例2 — Slack Webhookとの連携通知
GASはSlack Webhook URLへのHTTPリクエストを送信できるため、様々なGoogleサービスの更新をSlackに通知できます。
// Slack通知の基本コードfunction sendSlackNotification(message) { const webhookUrl = PropertiesService.getScriptProperties().getProperty('SLACK_WEBHOOK_URL'); const payload = JSON.stringify({ text: message, username: 'GAS Bot' }); UrlFetchApp.fetch(webhookUrl, { method: 'POST', contentType: 'application/json', payload: payload });}
Webhook URLはGASのスクリプトプロパティに保存しておくと、コードをGitHubで管理する際に認証情報が漏洩するリスクを避けられます。
Claude Codeがこのような通知コードを自動生成し、claspでpushすることで、Google WorkspaceのあらゆるイベントをSlackに連携する仕組みを素早く構築できます。実際の活用例として、スプレッドシートに新規データが入力された際の通知、Driveに特定のファイルが追加された際のアラートなどが挙げられます。
\ 業務自動化のお悩み、プロが30分で整理します /
法人向けClaude Code個別指導の無料相談はこちらよくある質問
Q. claspのトークンが頻繁に切れる問題はどう対処すればいいですか?
claspのアクセストークンは約1時間で期限切れになります。これはGoogle OAuthの仕様であり、避けられません。ただし、~/.clasprc.jsonにリフレッシュトークンが保存されているため、通常は自動更新されます。
「認証が切れている」というエラーが頻繁に出る場合は、clasp loginを再実行してください。長期間使用しない期間(2〜3週間以上)がある場合に認証が切れることがあります。
Q. GASのオンラインエディタとclaspのローカルファイルは同期されますか?
clasp pushでローカル→GAS(オンライン)への同期、clasp pullでGAS→ローカルへの同期が行われます。ただし、双方向のリアルタイム同期ではありません。
運用上の注意: オンラインエディタで直接編集した場合は、ローカルでclasp pullしてから作業を再開するのが安全です。ローカルとオンラインの変更が競合すると、clasp pushで上書きしてしまう可能性があります。
Q. clasp runとWeb Appデプロイはどちらを選ぶべきですか?
ほとんどのケースではWeb Appデプロイ方式を推奨します。 理由は以下の通りです。
clasp runはGoogle Cloud ConsoleでのAPI有効化、GASエディタでの手動デプロイ設定など、追加設定が複雑- Web App方式は
appsscript.jsonに数行追加するだけで設定できる - Web App方式はcurlからHTTPリクエストで呼び出せるため、Claude Codeや他のツールとの連携が容易
clasp runが有利なケースは、Web App URLを外部に公開せずに、認証されたスクリプトとして実行したい場合など、セキュリティ要件が厳しい場面に限られます。
まとめ
Claude CodeとclaspでGASを管理・実行するための要点をまとめます。
- claspのセットアップ:
npm install -g @google/claspでインストール、clasp loginで認証、clasp clone [スクリプトID]でプロジェクト取得 - 基本ワークフロー: ローカルでClaude Codeにコードを生成させて→
clasp pushでGASに反映→clasp deployでデプロイ - clasp runの代替: Web Appデプロイ+curlでGAS関数を呼び出す方式が実用的。doGet関数でactionパラメータを使って複数の処理を管理
- 定期実行: GitHub Actionsよりもトークン管理不要なGASのトリガー機能が圧倒的にシンプル
- 実際の活用: Meet録画整理・Slack通知など、Google Workspaceの業務をGAS+claspで自動化できる
claspを導入することで、GASの開発がCLIで完結し、Claude Codeとのシームレスな連携が実現します。まずは既存のGASプロジェクトをclaspでクローンして、ローカル開発環境の構築から試してみてください。
また、本記事では社内のGoogle Workspaceとの連携についても触れましたが、GmailやGoogle Driveとの連携については以下の記事も参考にしてください。
- Claude Code × Gmailで受信メールを自動チェック・要約する
- Claude CodeからGoogle Driveを操作してファイル管理を自動化
- Claude CodeでGoogleカレンダーの予定を毎朝自動通知する
Claude Codeの導入・活用をサポートします
株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。「GASとClaude Codeを組み合わせた業務効率化を始めたい」「非エンジニアでも自動化ツールを作れるようになりたい」という段階からご支援いたします。




