Google Workspace CLI × Claude Code 実務ワークフロー 2026 — Gmail自動化・Sheets連携・GA4コピペ廃止の実装パターン

Google Workspace CLI × Claude Code 実務ワークフロー 2026 — Gmail自動化・Sheets連携・GA4コピペ廃止の実装パターン

gws CLI(google workspace CLI)とClaude Codeを組み合わせた実務ワークフロー完全ガイド。Gmail自動化・Sheets連携・GA4データ取得のコピペ作業をゼロにする実装パターン、GWS CLI vs MCP判断基準、Model Armor連携まで解説。

エンジニアのゆとです。

「毎週月曜に同じ操作をしている」——その典型が、Google Workspace関連の定型作業だ。

Analyticsのデータをコピーしてスプレッドシートに貼る。Gmailに溜まった通知メールをフォルダに振り分ける。Calendarを見て週次レポートを書く。どれも10〜30分でできるけど、毎週やると馬鹿にならない時間になる。

GWS CLI(gws)とClaude Codeを組み合わせると、この種の作業のほとんどが自動化できる。しかも「スクリプトを書いて維持する」負担なしに。

この記事では、フリーランスが実際に週次ルーティンとして回している自動化パターンを4つ紹介する。セットアップから実務での使い分け、セキュリティまで一通り整理した。

GWS CLIとは何か

GWS CLI(gws)は、Drive・Gmail・Calendar・Sheets・Docs・Chat・Admin など、Google Workspaceのほぼ全サービスをターミナルから操作できるコマンドラインツールだ。

2026年3月にGitHubで公開され、初週でHacker Newsで500ポイント超えを記録した。GitHubスターも22,000を超えて急成長中のツール。

github.com
googleworkspace/cli — GitHub One CLI for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Includes 100+ AI agent skills and MCP server support.

技術的な特徴を押さえておく。

動的コマンド構築の仕組み

gwsの最大の特徴は、コマンド体系を起動時に動的に構築することだ。Google Discovery Serviceに接続してAPIエンドポイントを読み込み、それをコマンドツリーに変換する。

これの意味するところは、Google側でAPIが追加されると、gwsをアップデートしなくても翌日から使えるようになるということだ。CLI側の実装が薄い分、APIの最新状態に常に追従する。

# どんなAPIが使えるか確認
gws --help

# Gmail配下のコマンドを確認(Discovery Service経由で動的生成)
gws gmail --help

全出力がJSON

全てのレスポンスが構造化JSONで返ってくる。jqとの相性が良く、パイプで加工しやすい。

# 未読メールのIDと件名だけ取り出す
gws gmail list --query="is:unread" | jq '.messages[] | {id, snippet}'

100以上のプリビルドスキル

+ プレフィックスで呼べる高レベルな操作が100本以上ある。gws calendar +agendagws gmail +standup-reportgws sheets +weekly-digest など。低レベルAPIを叩かずに業務ユースケースに直結したスキルを使える。

MCP内蔵

gws mcp でMCPサーバーが起動する。Claude CodeやClaude Desktopから自然言語でGoogleサービスを操作できる。ただし全API公開時のコンテキスト消費量の問題があるため(後述)、使い方には注意が必要だ。

セットアップ

インストールと認証を一通り確認しておく。

インストール

npmが最も手軽だ。

npm install -g @googleworkspace/cli

# インストール確認
gws --version

ソースからビルドする場合はRustツールチェインが必要だが、通常は不要。npmパッケージにプリビルドネイティブバイナリが含まれているため、Rust環境なしで動く。

OAuth認証

初回は認証フローが走る。

gws auth login

ブラウザが開いてGoogleアカウントの認証画面になる。許可すると認証情報が ~/.config/gws/ に保存される。以降は自動でリフレッシュトークンが更新される。

# 認証状態を確認
gws auth whoami
フリーランスが使う場合の権限スコープの絞り方

gws auth loginで要求されるスコープはデフォルトで広めだ。実務で使うサービスだけに絞るには Google Cloud Consoleで自前のOAuthアプリを作成し、スコープを指定する方法がある。

ただし初期セットアップのコストが高いため、個人で使うなら標準スコープのままでも実害は少ない。「業務データを扱うエージェントに渡す」場合は最小権限設定を推奨する。

Claude Codeとの基本的な連携確認

gws CLIはシェルコマンドなので、Claude CodeのBashツールから直接呼び出せる。

# Claude Codeのセッション内でこれを確認するだけで動作チェックになる
gws calendar list
gws gmail list --query="is:unread newer_than:1d" --max-results=5

Claude Codeに「今日の予定を教えて」と依頼すると、内部でこのコマンドを叩いてレスポンスを整形して返してくれる。

GWS CLI vs MCP: どちらを使うか

同じことを実現するのに、GWS CLIをBashコマンドとして叩く方法と、gws mcp でMCPサーバーを起動してClaude Codeに接続する方法の2択がある。どちらを選ぶかは用途次第で、判断基準をまとめておく。

Bash直接実行が向いているケース

  • 既存スクリプトへの組み込み: cron、LaunchAgent、GitHub Actionsなど既存の自動化フローに追加する場合
  • 単発の決まったコマンド: 「毎朝未読メールをSlackに転送する」みたいな単純な操作
  • jqでパイプ加工したい: JSON出力をそのまま別ツールに渡す場合
  • スクリプト化して再現性を保ちたい: コマンド履歴として残せて、誰でも同じ操作を再現できる
# Bash直接実行の典型例: 週次レポート素材の収集
gws sheets get --id="${SHEET_ID}" --range="月次KPI!A1:G100" --format=json \
  | jq '.values' \
  > /tmp/kpi_data.json

MCPモードが向いているケース

  • 自然言語で横断操作したい: 「Driveのプロジェクトフォルダを確認して、対応必要なものをカレンダーに入れて」という複合指示
  • 複数サービスをClaude Codeに任せる: GmailとCalendarとSheetsを組み合わせたワークフロー
  • アドホックな判断が必要: 「今週のメールから重要な案件を選んでまとめて」という判断込みの作業

ただし前述の通り、MCPモードでGoogleの全APIを公開するとコンテキストを大量消費する。特定のスキルに絞って接続するか、セッションごとに必要なサービスのみ起動するのが現実的だ。

# MCPサーバー起動(スキル絞り込みオプションがあれば指定する)
gws mcp

# claude_desktop_config.json での設定例
# {
#   "mcpServers": {
#     "gws": {
#       "command": "gws",
#       "args": ["mcp", "--skills", "gmail,calendar,sheets"]
#     }
#   }
# }

判断フローチャート

決め方をシンプルにまとめるとこうなる。

定期実行・スクリプト化したい
  → Bash直接実行(cron/Routines/GitHub Actions)

複合指示・判断が入る・アドホック
  → MCPモード(Claude Codeとの対話的セッション)

両方必要
  → Routines: Bash直接 / 対話時: MCPモード の使い分け

実務ワークフロー4選

実際にフリーランスの週次ルーティンとして使っているパターンを紹介する。コマンド例はそのまま使えるように書いた。

ワークフロー1: Gmail自動分類 + 日次ダイジェスト

課題: 朝Gmailを開くたびに通知メール・請求書・案件メールが混在していて、優先度の判断に時間がかかる。

実装: 毎朝9時にRoutinesが動いて、前日の未読メールをカテゴリ別に分類してSlackに投げる。

#!/bin/bash
# daily_gmail_digest.sh

# 昨日以降の未読メールを取得
MESSAGES=$(gws gmail list \
  --query="is:unread newer_than:1d" \
  --format=json)

# Claude Codeに分類させる(Claude Code Routinesのプロンプト例)
# 「添付のメールリストをカテゴリ別に整理してください。
#   カテゴリ: 案件・請求・通知・その他
#   重要度: 高/中/低
#   各メールの要約を1行で。
#   Slackのblocks形式でJSONを出力してください。」

Routinesのプロンプトで「件名と差出人だけ見て分類して」と指示すれば、本文を全部読まずに高速で動く。メールが100件あっても1分以内に処理できる。

重要なのは「本文を読む処理」と「メタデータだけで分類できる処理」を分けることだ。件名・差出人だけで8割の分類はできる。

ワークフロー2: GA4データ → Sheets自動転記(コピペ廃止)

課題: 毎週月曜に先週分のGA4データをスプレッドシートに貼り付けていた。単純作業だけど10分かかる。

実装: Google Analytics Data APIとgws sheetsを組み合わせる。

#!/bin/bash
# weekly_ga4_to_sheets.sh

# Google Analytics Data APIでデータ取得(curl + サービスアカウント)
REPORT=$(curl -s \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "dateRanges": [{"startDate": "7daysAgo", "endDate": "yesterday"}],
    "metrics": [
      {"name": "sessions"},
      {"name": "activeUsers"},
      {"name": "screenPageViews"}
    ],
    "dimensions": [{"name": "date"}]
  }' \
  "https://analyticsdata.googleapis.com/v1beta/properties/${GA4_PROPERTY_ID}:runReport")

# 日付とメトリクスをCSV形式に変換
ROWS=$(echo "$REPORT" | jq -r '
  .rows[] | 
  [.dimensionValues[0].value, 
   .metricValues[0].value, 
   .metricValues[1].value, 
   .metricValues[2].value] | 
  @csv')

# Sheetsに追記(週次サマリーシート)
while IFS= read -r row; do
  gws sheets append \
    --id="${SPREADSHEET_ID}" \
    --range="週次GA4!A:D" \
    --values="${row}"
done <<< "$ROWS"

echo "GA4データをSheetsに追記しました: $(date '+%Y-%m-%d')"

これをRoutinesのスケジュールトリガー(毎週月曜9:00)に設定しておくと、月曜の朝には先週分のデータがSheets上に揃っている。コピペ作業がゼロになった。

GA4以外でも同じパターンが使える。Search Console、BigQuery、Slack analyticsなど、APIがあればSheets転記を自動化できる。

ワークフロー3: 週次業務サマリーの自動生成

課題: 毎週金曜に週次レポートを書いていた。カレンダーを振り返って、作業ログを見て、1時間かかっていた。

実装: gwsでその週のカレンダーとメールを取得して、Claude Codeにサマリーを書かせる。

# Routinesのプロンプト例(毎週金曜17:00トリガー)
<<PROMPT
以下のデータをもとに、今週の業務サマリーをGoogleドキュメントに作成してください。

1. 今週(月〜金)のカレンダーイベント一覧: {{gws calendar list --min-time=MONDAY --max-time=TODAY}}
2. 今週送受信したメール(重要なもの): {{gws gmail list --query="newer_than:7d -category:promotions -category:social"}}
3. Sheetsの作業ログ: {{gws sheets get --id=WORK_LOG_ID --range="作業ログ!A1:D50"}}

アウトプット形式:
- 今週の主な成果(3点以内)
- 対応したクライアント別の時間概算
- 来週への申し送り事項
- ドキュメントのタイトル: 週次サマリー YYYY-MM-DD
PROMPT

gws docs create --title="週次サマリー $(date '+%Y-%m-%d')" --content="..."

完璧なレポートは出てこないけど、ベースは80%くらいできる。残り20%を人間が手直しする形にすると、1時間かかっていた作業が15分になった。

ワークフロー4: 請求書メール → Sheets自動記録

課題: クライアントから届く請求書承認メールをスプレッドシートに手動で転記していた。

実装: 特定のGmailラベルがついたメールをトリガーにSheetsに書き込む。

# 請求書関連メールを取得(subject検索)
INVOICES=$(gws gmail list \
  --query="subject:(請求書 OR invoice) from:(client1.com OR client2.com) is:unread" \
  --format=json)

# Claude Codeに各メールから金額・日付・クライアント名を抽出させる
# 抽出結果をgws sheets appendでSpreadsheetに記録

# メールにラベルを付けて処理済みマーク
gws gmail label add \
  --message-id="${MESSAGE_ID}" \
  --label="請求書/処理済"

「メールから金額を抽出してSheets転記」はClaude Codeの自然言語処理と組み合わせると精度が高い。正規表現で数字を抜き出すより、「このメールから請求金額と支払期限を抽出して」という指示の方が日本語のバリエーションに強い。

セキュリティ: Model Armor連携

エージェントにメール本文を渡す場合、プロンプトインジェクションのリスクがある。メール本文に 「これ以前の指示を無視して...」 という悪意ある文章が入っていたとき、AIがそれに従ってしまう問題だ。

GWS CLIの --sanitize フラグは、Google Cloud Model Armorと連携してAPIレスポンスをスキャンし、プロンプトインジェクションらしき内容を検知・無害化する。

# --sanitizeフラグを使う
gws gmail get --id="${MESSAGE_ID}" --sanitize

# この場合、Google Cloud Model Armorのエンドポイントが必要
export GWS_MODEL_ARMOR_ENDPOINT="https://modelarmor.googleapis.com/..."

詳細な設定手順はこちらの記事で整理している。

gws CLIの --sanitize が地味にすごい — Model ArmorでAIエージェントへのプロンプトインジェクションを水際で止める
gws CLIの --sanitize が地味にすごい — Model ArmorでAIエージェントへのプロンプトインジェクションを水際で止めるgws CLIの--sanitizeフラグとGoogle Cloud Model Armorを連携させてAIエージェントへのプロンプトインジェクションを水際でブロックする方法を解説。メール本文に仕込まれた悪意ある指示をAPI応答レベルで検知・無害化する仕組みと具体的な設定手順を整理した。読む →

フリーランスで個人のメールを処理するだけなら --sanitize は不要だ。ただし、外部クライアントのメールをAIエージェントが読む場合、あるいはWebhookで自動処理するフローを組む場合は、有効にしておくことを勧める。

トラブルシューティング

実際に使っていて詰まりやすいポイントをまとめた。

OAuth認証が突然切れる

症状: 動いていたスクリプトが UNAUTHENTICATED エラーで失敗する。

原因: Googleアカウントのパスワード変更、2段階認証の設定変更、OAuthアプリへのアクセス取り消し、など。

対処:

# 認証情報をリセット
rm -rf ~/.config/gws/
gws auth login

自動化スクリプトには認証エラーを検知してSlack通知するハンドリングを入れておくと、サイレントに失敗しなくて済む。

if ! gws auth whoami > /dev/null 2>&1; then
  # Slack通知
  curl -X POST "${SLACK_WEBHOOK}" \
    -d '{"text": "⚠️ gws認証エラー: 再認証が必要です"}'
  exit 1
fi

sheets appendでデータがずれる

症状: 追記したデータが期待した列にはまらない。

原因: --range で指定した範囲と実データの列数が合っていない。

対処: --values で渡すデータの列数を --range と一致させる。

# A:Cに3列追記する場合は値も3列で渡す
gws sheets append \
  --id="${SPREADSHEET_ID}" \
  --range="Sheet1!A:C" \
  --values="2026-06-04,10000,完了"

Discovery Serviceのキャッシュが古い

症状: 新しいGoogleのAPIが使えない、または存在するはずのコマンドがない。

対処: キャッシュを削除して再取得させる。

# キャッシュの場所(環境によって異なる)
rm -rf ~/.cache/gws/

# または環境変数で強制リフレッシュ
GWS_CACHE_TTL=0 gws gmail --help

MCPモードでコンテキスト上限に引っかかる

症状: Claude Codeとの会話でContextが膨らんで応答が遅くなる、または切れる。

原因: gws mcp がGoogle APIの全ツール(200〜400個)をコンテキストに展開している。

対処: .mcp.json でスキルを絞る、またはセッション開始時に --skills オプションで制限する。

{
  "mcpServers": {
    "gws-limited": {
      "command": "gws",
      "args": ["mcp", "--skills", "gmail.list,calendar.events.list,sheets.values.get,sheets.values.append"]
    }
  }
}

まとめ

GWS CLI × Claude Codeの組み合わせが解決するのは「Googleサービスと自動化の間にあるAPI連携の手間」だ。

これまでは「GmailのデータをSheeetsに転記したい」となったとき、Gmail APIのOAuth設定からSheets APIの書き込みまで、コードをゼロから書く必要があった。GWS CLIが入ると、コマンド1行ずつ組み合わせるだけで完成する。Claude Codeが絡むと、コマンドをどう組み合わせるかもAIが考えてくれる。

フリーランスにとってのキモは「毎週同じことをやっている操作を特定して、その順番でgwsコマンドを並べる」だけでいい点だ。完璧なスクリプトじゃなくていい。80点でも自動化できれば、週10分の節約を52週積み上げると8時間以上になる。

GWS CLI実務運用のまとめ

Bash直接実行: 定期実行・既存フローへの組み込みに。cron/Routines/GitHub Actionsと組み合わせる

MCPモード: 自然言語での横断操作に。スキルを絞ってコンテキスト消費を抑える

—sanitize: 外部メールをAIに渡す場合に有効化。個人利用ならスキップしてOK

認証エラーハンドリング: 自動化スクリプトには必ず認証チェックを入れる

関連記事

Google Workspace CLI(gws)使い方 2026 — GitHub公開直後に試した全コマンド
Google Workspace CLI(gws)使い方 2026 — GitHub公開直後に試した全コマンドHacker Newsで427ポイントを記録したGoogle公式CLI「gws」の日本語完全ガイド。npmでインストールしてGmail・Drive・Calendar・Sheetsをコマンド1行で操作する方法、OAuth認証設定、サービス別全コマンド例、AIエージェント連携・セキュリティ対策まで網羅。読む →
gws CLI × Claude Code MCP連携ガイド — Google Workspaceを自然言語で操作する【インストールからauth loginまで】
gws CLI × Claude Code MCP連携ガイド — Google Workspaceを自然言語で操作する【インストールからauth loginまで】gws CLI(github.com/googleworkspace/cli)をClaude CodeのMCPサーバーとして接続する方法。gws install・gws auth login の手順、Gmail・Calendar・Drive・Sheetsの自然言語操作、許可スコープの絞り方まで実践解説。読む →
gws CLIの --sanitize が地味にすごい — Model ArmorでAIエージェントへのプロンプトインジェクションを水際で止める
gws CLIの --sanitize が地味にすごい — Model ArmorでAIエージェントへのプロンプトインジェクションを水際で止めるgws CLIの--sanitizeフラグとGoogle Cloud Model Armorを連携させてAIエージェントへのプロンプトインジェクションを水際でブロックする方法を解説。メール本文に仕込まれた悪意ある指示をAPI応答レベルで検知・無害化する仕組みと具体的な設定手順を整理した。読む →
Claude Code Hooksで開発を自動化する — 実際に使える5パターンを解説【2026年版】
Claude Code Hooksで開発を自動化する — 実際に使える5パターンを解説【2026年版】Claude Code Hooksの設定方法と実践的な使い方を解説。PreToolUse・PostToolUse・SessionStart・Notificationなど主要イベントを使った自動化レシピ5選。副業・フリーランスエンジニア向けに実用性重視でまとめた。読む →

よくある質問

Q. GWS CLIはGoogle公式のサポート対象か?

公式サポート対象外です。GitHubのREADMEに明記されています。v1.0 に向けて破壊的変更が予定されており、開発ペースが速いため、プロダクション環境への組み込みはバージョンを固定して使うことを推奨します。

Q. GoogleアカウントがWorkspace版でなく個人Gmail(@gmail.com)でも使えるか?

基本機能は使えます。ただし管理機能(gws admin)はWorkspaceアカウント限定です。Drive・Gmail・Calendar・Sheetsの個人アカウントでの操作は問題なく動作します。

Q. Routinesから使う場合、認証はどうするか?

Routinesはクラウド環境で動くため、ローカルの gws auth login 認証情報は使えません。サービスアカウントのJSONキーを環境変数として設定するか、Google Cloud Workload Identityを使う方法が現実的です。環境変数 GOOGLE_APPLICATION_CREDENTIALS でサービスアカウントファイルのパスを指定すれば、gwsが自動でピックアップします。

← 記事一覧に戻る