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スプレッドシートに蓄積して、参照元別のセッション数やコンバージョンを週次で追跡しています。
運用は手動でした。具体的には以下の流れです。
GA4の探索レポートを開く
対象期間を設定してデータをCSVエクスポート
スプレッドシートの該当シートにコピー&ペースト
これを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 jsonD列以降がデータ本体だと把握した上で、「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を使った自動化で特に助かった点をまとめます。
APIの知識がなくても始められる: GA4 Data APIの仕様を自分で調べる必要がありませんでした。「セッション数とイベント数を参照元別に取りたい」と伝えれば、適切なAPI呼び出しコードが生成されます。
既存のデータ構造に合わせてくれる: gwsでスプレッドシートの現状を見せるだけで、カラム構成・数式・データ型を理解し、それに合ったコードを生成してくれました。
運用に必要な機能が最初から揃う: 重複スキップ、リトライ、バックフィル、シート自動拡張、テスト関数などは、特に依頼していませんでしたが、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は実用的な自動化ツールを作ってくれます。
週明けにスプレッドシートを開くと、週末のうちにデータが入っています。その小さな変化が、毎週の業務を少し軽くしてくれます。
