見出し画像

Claude Code × Google Workspace CLI で、Google Analyticsからスプレッドシートへのコピペを自動化した

業務での施策の効果をモニタリングするために、Google Analyticsの計測結果を集計用のスプレッドシートにエクスポートして貼り付ける作業があります。

毎週手作業で更新する手間をなくしたいと思い、Claude Codeに相談して自動化を試しました。その際に、Google Workspace CLI(gws)でスプレッドシートの構造をClaude Codeに直接読み取らせたことで、既存の運用に合ったコードをスムーズに生成できました。

この記事では、自動化の検討からコード完成までのプロセスを、Claude Codeとの実際のやりとりを交えて紹介します。普段コードを書かないPMやデザイナーでも、対話しながら業務自動化に取り組めるというイメージが伝われば嬉しいです。

この記事で得られるもの

  • Claude Code × gws CLIを使った業務自動化の具体的な進め方

  • GA4データをGASで自動取得する仕組みの全体像

  • 「調査→計画→実装→テスト→修正」の対話型開発サイクルの実例

課題: 毎週のGA4データのコピペ

やっていたこと

自分が担当するプロジェクトではGA4のデータをGoogleスプレッドシートに蓄積して、参照元別のセッション数やコンバージョンを週次で追跡しています。

運用は手動でした。具体的には以下の流れです。

  1. GA4の探索レポートを開く

  2. 対象期間を設定してデータをCSVエクスポート

  3. スプレッドシートの該当シートにコピー&ペースト

これを2つのシートに対して毎週行います。

  • raw_ga4_sessionシート:セッション × 参照元別の計測値

  • raw_ga4_event:イベント別 × 参照元別の計測値

これらのrawデータシートを元に、別のシートで参照元別の週次サマリーやコンバージョン推移などの集計を行っています。rawシートのデータが更新されれば、集計シート側も自動的に反映される構成です。

手動運用の問題点

これらのシートの更新には1回あたり10〜15分の作業が毎週発生し、手作業なので転記ミス(列ずれ、日付間違い)のリスクもあります。そのため自動化に着手することにしました。

自動化の方針検討: Claude Codeとの壁打ち

はじめに、Claude Codeにスプレッドシートの構成とやりたいことを伝え、ベストプラクティスを相談しました。

提示された3つの選択肢

Claude Codeは以下の選択肢を提案してくれました。

  • GA4 MCP Server Claude Codeから直接GA4にクエリを投げる アドホックな分析・調査に向いている

  • Python + gws Pythonスクリプトで定期実行 複雑な変換処理が必要な場合に向いている

  • Google Apps Script (GAS) スプレッドシートに直結、トリガーで定期実行 定期レポートの自動化に向いている

定期レポートの自動化が目的であることを伝えたところ、GASが推奨されました。

GASを選んだ理由

GASを選んだ理由は以下の通りです。

  • デプロイ不要:スプレッドシートに紐づくので、サーバーを用意する必要がない

  • スプレッドシート直結:書き込み先と同じ環境で動くため、認証やAPI連携がシンプル

  • トリガー機能:GASの時間ベーストリガーで、毎週決まった時間に自動実行できる

  • 既存の実績:社内で別のGASを運用しており、参考にできた

開発プロセス:シート構造の調査

コードを書く前に、まず既存のスプレッドシートがどんな構造になっているか、Claude Codeに正確に把握してもらう必要がありました。

Google Workspace CLI のインストールとセットアップ

Google Workspace CLI は、Google Workspaceの各種APIをターミナルから操作できるコマンドラインツールです。npmでインストールできます。

npm install -g @googleworkspace/cli

なお、Google Workspace CLIはGoogleの公式サポート対象製品ではありません("This is not an officially supported Google product")。使用は自己責任となる点にご注意ください。

gwsでシートを「読む」

Claude CodeはGoogle Workspace CLI(gws)を使って、スプレッドシートの構造を直接確認してくれました。

# ヘッダーとサンプルデータの確認
gws sheets spreadsheets values get \
  --params '{"spreadsheetId":"xxx...xxx", "range":"raw_ga4_session!A1:J5"}' \
  --format table

例えば以下のようなシートの場合、A〜C列は数式で自動計算される列で、他シートとのデータの紐づけに使用しています。

gwsは、以下のようにA〜C列に入っている数式を確認します。

# 数式の構造を確認(FORMULA表示)
gws sheets spreadsheets values get \
  --params '{"spreadsheetId":"xxx...xxx", "range":"raw_ga4_session!A1:C5", "valueRenderOption":"FORMULA"}' \
  --format json

D列以降がデータ本体だと把握した上で、「D〜J列にAPIデータを書き込み、A〜C列の数式も自動設定する」というコードを生成してくれました。

gwsでスプレッドシートを直接確認できることで、Claude Codeがデータの形式や数式の意図を正確に理解し、それに合わせたコードを生成できるようになります。手動でプロンプトで指示するよりも圧倒的に効率が良いです。

開発プロセス:計画→実装→テスト→修正

プランモードで開発計画を策定

Claude Codeのプランモードを使い、実装前に開発計画を策定しました。計画には以下が含まれていました。

  • 取得するディメンションとメトリクスの定義

  • シート書き込み時のデータマッピング(どの列に何を書くか)

  • 重複防止のロジック(既存日付のスキップ)

  • バックフィル機能の設計

  • エラーハンドリングとリトライの方針

計画を確認・承認してから実装に進みました。いきなりコードを書き始めるのではなく、「何をどう作るか」を先に合意しておきます。

テスト→エラー発見→修正のサイクル

Claude Codeが生成したコードをGASエディタに貼り付けて、テスト関数を実行しました。ここで最初のエラーが発生します。

`testFetchOneDay()` を実行したところ、以下のエラーが返ってきました。

GA4 API 接続エラー: Invalid startDate : 20260320.
startDate must be YYYY-MM-DD, NdaysAgo, yesterday, or today.

原因は日付形式でした。GA4 Data APIは `YYYY-MM-DD`(ハイフンあり)を要求するのに、コードが `YYYYMMDD`(ハイフンなし)を渡していました。

Claude Codeにこのエラーログを共有すると、すぐに原因を特定し、修正してくれました。修正後のコードを貼り直して再テストしたところ、正常にデータを取得できました。

テスト取得: 2026-03-20
取得行数: 28
サンプル(先頭行):
  日付=20260320, 参照元=google, メディア=organic, セッション=1234

バックフィルの実行

テストが通った後、これまでの欠損データをバックフィル機能で埋めました。

バックフィル開始: 2026-03-21〜2026-03-27
  2026-03-21: 28 行取得
  2026-03-22: 26 行取得
  ...
  2026-03-27: 30 行取得
バックフィル完了: 190 行書き込み、0 日スキップ

API負荷を考慮して日ごとに500msのウェイトを入れつつ、7日分のデータを一括取得できました。

2つ目のシート(イベントデータ)への対応

セッションデータの自動化が完了した後、イベントデータのシート(raw_ga4_event)にも対応を追加しました。 イベントシートの構造をgwsで確認した後、既存のセッション取得コードの構造を活かしつつ、リトライ処理や重複チェックの共通関数化も行い、約450行の追加で対応できました。

完成したGASの概要

アーキテクチャ

完成したGASの全体像は以下の通りです。

GA4 Data API (v1beta)
    │
    ├── runGA4Report()          → raw_ga4_session シートへ
    │   (sessions / revenue)
    │
    ├── runGA4EventReport()     ─┐
    │   (イベント別 sessions       ├→ mergeEventData() → raw_ga4_event シートへ
    │    / eventCount)           │
    └── runGA4EventTotalReport()─┘
        (合計 sessions / eventCount)

共通基盤:
  ├── executeGA4Report()    ... リトライ付きAPI実行
  ├── getExistingDates_()   ... 重複チェック(日付ルックアップ)
  ├── ensureSheetCapacity() ... シート行数の自動拡張
  └── formatDateForApi()    ... 日付形式変換
      formatDateForSheet()

開発にかかった時間

Claude Codeとの対話を含めて、セッションデータの対応に約1時間、イベントデータの追加に約30分でした。合計1.5時間ほどで完成しています。手動運用の月間コスト(1.5〜2時間)と同程度なので、1ヶ月目で元が取れる計算です。

振り返り・学び

Claude Codeで業務自動化を行う利点

Claude Codeを使った自動化で特に助かった点をまとめます。

  1. APIの知識がなくても始められる: GA4 Data APIの仕様を自分で調べる必要がありませんでした。「セッション数とイベント数を参照元別に取りたい」と伝えれば、適切なAPI呼び出しコードが生成されます。

  2. 既存のデータ構造に合わせてくれる: gwsでスプレッドシートの現状を見せるだけで、カラム構成・数式・データ型を理解し、それに合ったコードを生成してくれました。

  3. 運用に必要な機能が最初から揃う: 重複スキップ、リトライ、バックフィル、シート自動拡張、テスト関数などは、特に依頼していませんでしたが、Claude Codeが自律的に提案してくれました。

gws × Claude Codeの連携

開発で効果的だったのは、gwsによるシート構造の調査でした。

通常、スプレッドシートの構造をAIに伝えるには、スクリーンショットを撮るか、プロンプトで構造を説明するか、データをコピペする必要があります。gwsを使えば、Claude Codeがコマンド一発でシートのデータ・数式・構造を取得し、自分で解析してコードに反映できます。

注意点: 事前準備は人間がやる必要がある

Claude Codeがコードを生成してくれても、以下の作業は自分で行う必要があります。

  • GCPプロジェクトの作成とGA4 Data APIの有効化

  • GASエディタでのAnalyticsDataサービスの追加

  • GCPプロジェクト番号のGASプロジェクトへの紐づけ

  • GA4プロパティの閲覧権限の確認

  • 週次トリガーの設定

インフラやアクセス権限の設定は、セキュリティの観点からもAIに任せるべきではない部分です。Claude Codeはこれらの手順を明確に案内してくれるので、指示に従って進めれば問題ありませんでした。

まとめ

「GA4の手動転記を自動化したい」というシンプルな課題を、Claude Codeとの対話で解決しました。コードを書く力がなくても、課題を正確に伝え、データ構造を見せ、テスト結果をフィードバックする。この3つができれば、Claude Codeは実用的な自動化ツールを作ってくれます。

週明けにスプレッドシートを開くと、週末のうちにデータが入っています。その小さな変化が、毎週の業務を少し軽くしてくれます。

いいなと思ったら応援しよう!