Claude Code で GAS 開発を効率化する実践ワークフロー|clasp・CLAUDE.md の設定も Claude に任せる

GAS 開発の課題と Claude Code で変わること

Google Apps Script(GAS)の開発で地味に時間を取られるのが、スプレッドシートの列構成をコードに正確に反映する作業です。列番号のハードコード、シート名の確認、ヘッダーが変わるたびのコード修正——こういった作業が積み重なると開発効率は大きく下がります。

Claude Code を GAS 開発に組み合わせると、以下が実現できます:

  • スプレッドシートの構造を自動で把握してコードを生成できる
  • clasp を使った push・デプロイをコマンド一発に短縮できる
  • CLAUDE.md やカスタムコマンドの作成まで、Claude への指示で完結できる

この記事では、GAS 開発における「仕様把握 → コード生成 → デプロイ」のループを Claude Code で効率化する実践的な手順を解説します。

対象読者:GAS をある程度触ったことがある方(スクリプトを自分で書けるレベル)

結論:Claude Code にシート構造・仕様・コマンドを渡す仕組みを作ると、コード生成精度が上がり開発ループが大幅に速くなります。CLAUDE.md の作成や clasp のセットアップも Claude に任せることで、環境構築のコストも下げられます。

前提環境の確認

本記事のワークフローを試すには、以下の準備が必要です。

  • Node.js がインストール済み(clasp のインストールに使用)
  • Python 3 がインストール済み(Google Sheets API の呼び出しに使用)
  • Google Cloud のサービスアカウント JSON を取得済み(credentials/ フォルダに配置)
  • Claude Code がインストール済み(claude コマンドが使える状態)

Claude Code のインストール方法はClaude Code のインストール方法【完全ガイド】をご参照ください。

セットアップ

ワークスペースの初期化

まずワークスペースフォルダを作成して Claude Code を起動します。

mkdir workspace && cd workspace
claude

フォルダ構成は以下を前提とします。後述の CLAUDE.md 作成指示の中でフォルダごと作らせることもできます。

workspace/
├── projects/
│    ├── registry.json              # プロジェクト一覧(name, spreadsheet_id, script_id)
│    └── {プロジェクト名}/
│         ├── .clasp.json           # clasp 設定(rootDir: "gas")
│         ├── gas/                  # clasp push の対象
│         │    ├── appsscript.json
│         │    └── *.js
│         ├── memo.md               # 仕様・経緯・TODO
│         └── sheet_info.json       # シート構造キャッシュ(自動生成)
├── scripts/
│    ├── fetch_sheet_info.py        # シート構造取得 → sheet_info.json
│    └── project_manager.py        # プロジェクト登録・管理
├── credentials/                   # サービスアカウント JSON(.gitignore 済み)
└── CLAUDE.md                      # Claude Code へのプロジェクト指示書

フォルダ構造とスクリプトの一括作成

必要なフォルダ・Python スクリプトをすべて Claude Code に作らせます。以下をチャットにそのまま貼り付けてください:

以下のフォルダ構成とファイルを作成してください。

【フォルダ作成】
- projects/
- scripts/
- credentials/

【projects/registry.json を作成】
空の配列 [] で初期化

【scripts/project_manager.py を作成】
GAS プロジェクトを registry.json で管理するCLIツール。
サブコマンド:
- add --name "名前" --spreadsheet-id "xxx" --script-id "yyy"
  → projects/registry.json にプロジェクトを追加
  → projects/{名前}/ フォルダと memo.md・gas/ フォルダも作成する
- list → 登録済みプロジェクトを一覧表示
- remove --name "名前" → 削除

【scripts/fetch_sheet_info.py を作成】
スプレッドシートのシート構造を取得して sheet_info.json に保存するスクリプト。
- --project オプションで registry.json からスプレッドシートIDを取得
- Google Sheets API(サービスアカウント認証)でシート名とヘッダー行を取得
- 結果を projects/{プロジェクト名}/sheet_info.json に JSON 形式で保存
- 認証: 環境変数 GOOGLE_APPLICATION_CREDENTIALS、なければ credentials/ フォルダ内の最初の JSON を自動検出
- ヘッダー行は最初の空でない行を自動検出する
- 必要ライブラリ: google-auth, google-api-python-client

【.gitignore を作成】
credentials/
.env
__pycache__/
*.pyc

Claude Code がスクリプトを生成したら、依存ライブラリをインストールします:

fetch_sheet_info.py で必要な Python ライブラリをインストールしてください。
pip を使う場合と venv を使う場合、どちらの手順も示してください。

これで projects/scripts/credentials/ フォルダと 2 本のスクリプトがすべて揃います。credentials/ にはサービスアカウント JSON を手動で配置してください(Google Cloud Console のサービスアカウントページからダウンロード)。

clasp のインストールと Google 認証

clasp(Google 公式の GAS CLI ツール)をインストールし、Google アカウントで認証します。このステップは Claude Code に指示することで、コマンドの確認から実行まで任せられます

Claude Code のチャットに以下のように入力します:

clasp をグローバルにインストールして、Google アカウントの認証を行ってください。
認証が完了したら、正常にログインできているか確認してください。

Claude Code は以下のコマンドを順に実行します:

npm install -g @google/clasp
clasp login

clasp login を実行するとブラウザが開き、Google アカウントの認証画面が表示されます。認証が完了すると ~/.clasprc.json に認証情報が保存されます。

認証後、Claude Code に以下のように確認を依頼します:

clasp login のステータスを確認して、正常に認証できているか確認してください。
問題があれば修正方法を教えてください。

ブラウザが開かない環境では、Claude Code に以下のように指示することで手動認証に切り替えられます:

clasp login --no-localhost で認証してください。
表示された URL をブラウザで開いて認証コードを取得し、入力します。

CLAUDE.md を Claude Code に作らせる

CLAUDE.md は Claude Code がプロジェクトルートを読み込む際に自動参照する「指示書」です。プロジェクト構成やよく使うコマンドを記述しておくことで、以降の指示を短くしても意図を汲んだ動作をしてくれます。

自分で書く必要はありません。Claude Code に作らせましょう。

Claude Code のチャットに以下のように入力します:

このワークスペースの CLAUDE.md を作成してください。
以下の内容を含めてください:

# プロジェクト概要
GAS プロジェクトを複数管理するワークスペース。

# フォルダ構成
(上記のフォルダ構成を記載)

# よく使うコマンド
- シート構造取得: python3 scripts/fetch_sheet_info.py --project "{プロジェクト名}"
- GAS プッシュ: cd projects/{プロジェクト名} && clasp push
- プロジェクト一覧: python3 scripts/project_manager.py list

# 注意事項
- credentials/ フォルダの JSON は .gitignore で除外済み
- sheet_info.json はスプレッドシートの構造が変わったら再取得すること

Claude Code が CLAUDE.md を生成します。生成後は内容を確認し、不足があれば「〇〇も追加してください」と追記指示するだけです。

プロジェクト登録

先ほど作成した project_manager.py を使ってプロジェクトを登録します。Claude Code に以下のように指示します:

「サンプルプロジェクト」を登録してください。
スプレッドシートID: 1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
スクリプトID: AKfycb...

python3 scripts/project_manager.py add コマンドを使ってください。

Claude Code が以下を実行します:

python3 scripts/project_manager.py add \
  --name "サンプルプロジェクト" \
  --spreadsheet-id "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  --script-id "AKfycb..."

登録後、projects/サンプルプロジェクト/ フォルダと registry.json が自動で更新されます。

登録済みプロジェクトの確認も Claude Code に任せられます:

登録済みのプロジェクト一覧を表示してください。

GAS 開発ワークフロー本編

Step 1:シート構造を取得する(/fetch-sheet)

fetch_sheet_info.py はセットアップ時に Claude Code に作成してもらったスクリプトです。

コード生成の前に、スプレッドシートの構造を Claude Code に把握させます。カスタムコマンド /fetch-sheet を使います(後述の設定が必要)。

/fetch-sheet サンプルプロジェクト

内部では fetch_sheet_info.py が Google Sheets API を叩き、sheet_info.json を生成します。

{
  "sheets": [
    {
      "name": "入稿管理",
      "headers": ["進捗", "案件名", "担当者", "提出URL"],
      "header_row": 3
    }
  ]
}

ポイント:Claude はこの JSON を読んでシート構造を把握します。「何列目が何」と手で教える必要がなくなります。列を追加・変更したタイミングで再実行する習慣をつけると良いです。

Step 2:仕様を memo.md に書く

projects/{プロジェクト名}/memo.md に要件を記述します。Claude Code に作成を指示することもできます:

サンプルプロジェクトの memo.md を作成してください。
内容:
- やりたいこと:「入稿管理」シートの「進捗」列が「完了」の行を取得し BigQuery に書き込む
- BigQuery: project=xxx, dataset=ads_data, table=sample_table
- 「進捗」列の値は「未対応」「対応中」「完了」のいずれか
- ヘッダー行は 3行目

ポイント:背景・前提条件・値の取りうる範囲まで書くほど生成精度が上がります。「なぜこの処理が必要か」も書くと Claude がより適切な実装を選んでくれます。

Step 3:Claude Code にコードを生成させる

シート構造と仕様が揃ったら、コード生成を指示します:

memo.md の仕様と sheet_info.json を参照して、
「入稿管理」シートから完了データを取得し BigQuery に書き込む
GAS コードを gas/main.js に書いてください。

Claude が sheet_info.jsonmemo.md を読んだ上で、列番号をハードコードせず列名で動的に検索するコードを生成します。

生成されるコードの特徴:

  • ヘッダー行を読んで列インデックスを動的に取得する実装になる
  • シート名・列名が memo.md と一致している
  • 定数を上部にまとめた保守しやすい構成になる

Step 4:GAS をプッシュする(/push-gas)

/push-gas サンプルプロジェクト

内部では cd projects/サンプルプロジェクト && clasp push が実行されます。プロジェクト名だけ指定すれば正しいディレクトリに移動してプッシュできます。

Step 5:動作確認・修正ループ

GAS エディタでテスト実行し、エラーがあれば Claude Code にエラーメッセージを貼り付けて修正を依頼します:

以下のエラーが出ました。修正してください。
TypeError: Cannot read property '0' of undefined
  at main.gs:42

Claude Code はエラー箇所を特定してコードを修正します。修正後は再度 /push-gas でデプロイするだけです。

カスタムスラッシュコマンドの設定

Claude Code は .claude/commands/ フォルダ内の .md ファイルをスラッシュコマンドとして認識します。このフォルダとコマンド定義ファイルも Claude Code に作らせましょう。

以下の2つのカスタムスラッシュコマンドを .claude/commands/ に作成してください。

1. fetch-sheet.md
   - 引数で指定されたプロジェクトのシート構造を取得して sheet_info.json に保存する
   - python3 scripts/fetch_sheet_info.py --project "$ARGUMENTS" を実行
   - 生成された sheet_info.json の内容を要約して表示

2. push-gas.md
   - 引数で指定されたプロジェクトの GAS をプッシュする
   - cd projects/$ARGUMENTS && clasp push を実行
   - 完了後に「プッシュ完了:{プロジェクト名}」と表示

生成されたコマンド定義ファイルはこのような内容になります:

# fetch-sheet

引数で指定されたプロジェクトのシート構造を取得して sheet_info.json に保存する。

## 手順
1. `python3 scripts/fetch_sheet_info.py --project "$ARGUMENTS"` を実行
2. 生成された sheet_info.json の内容を要約して表示する

設定後は /fetch-sheet サンプルプロジェクト と入力するだけで定型作業が実行できます。カスタムスラッシュコマンドの詳細な作り方はClaude Code カスタムスキルの作り方|作業を自動化する実例付きをご参照ください。

ポイントまとめ

工夫 効果
CLAUDE.md を Claude に作らせる 自分で書く手間がなく、以降の指示精度が上がる
clasp のセットアップも Claude に指示 コマンド調査・実行・確認まで一括して任せられる
sheet_info.json でシート構造を渡す 列名の誤認識がなくなり、列番号ハードコードが不要になる
memo.md に仕様・背景を書く 指示が短くても意図を汲んだコードが生成される
スラッシュコマンドで定型作業を自動化 fetch → code → push のループが速くなる

よくある落とし穴

  • clasp push できない:.clasp.jsonrootDir"gas" になっているか確認。Claude Code に「.clasp.json を確認して rootDir を gas に修正してください」と指示すれば自動で直してくれます。
  • シート構造が古い:列を追加・変更したら /fetch-sheet を再実行して sheet_info.json を更新しましょう。古いまま生成すると列インデックスがずれます。
  • GAS の実行権限エラー:appsscript.jsonoauthScopes に必要なスコープを追加。「BigQuery へのアクセスに必要なスコープを appsscript.json に追加してください」と Claude Code に指示するだけで対応できます。
  • CLAUDE.md が長すぎる:プロジェクトが増えると肥大化します。詳細な仕様は各プロジェクトの memo.md に書き、CLAUDE.md にはフォルダ構成とコマンドのみ記載するのがおすすめです。

FAQ

Q. Python スクリプト(fetch_sheet_info.py)はどう作ればいいですか?

Claude Code に「Google Sheets API を使ってシート構造を取得し sheet_info.json に保存する Python スクリプトを scripts/fetch_sheet_info.py に作成してください。–project オプションで projects/registry.json からスプレッドシートIDを取得します」と指示すれば生成してくれます。

Q. clasp login 後にブラウザが開かない場合はどうすればいいですか?

clasp login --no-localhost を実行すると、ブラウザなしで認証コードを手動入力する形式に切り替えられます。Claude Code に「clasp login –no-localhost で認証してください」と指示すれば対応できます。

Q. CLAUDE.md の内容は後から変えられますか?

はい。「CLAUDE.md に〇〇を追加してください」と指示するだけで Claude Code が編集してくれます。プロジェクトが増えるたびに追記していくと精度が上がります。

Q. sheet_info.json は自動更新できますか?

GAS のトリガー機能や GitHub Actions と組み合わせれば自動更新も可能ですが、シート構造はそう頻繁に変わらないため、変更時に手動で /fetch-sheet を実行する運用で十分なケースが多いです。

Q. 複数のスプレッドシートを横断するプロジェクトには対応できますか?

はい。registry.json に複数のスプレッドシートIDを登録し、fetch_sheet_info.py を複数シートに対応させることで横断取得が可能です。「複数スプレッドシートを横断して sheet_info.json を生成するよう fetch_sheet_info.py を修正してください」と Claude Code に指示できます。