36
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Google公式CLI gws】ZIP丸投げでClaude Code / CodexからGoogle Workspaceを自動操作する

36
Last updated at Posted at 2026-05-12

2026年3月、Google DevRelから Google Workspace 公式CLI gws がリリースされました(googleworkspace/cli)。Drive・Sheets・Gmail・Calendar・Docs・Meet など27サービスを ターミナルから1行で叩ける OSSツールです。

これを Claude Code / Codex に繋いでみたら、 「先週のMeet録画一覧を取得して」「議事録Docを作って」みたいな依頼を日本語1行で投げられる ようになりました。Drive・Sheets・Calendar・Docs・Meet の5機能を実機で疎通確認した記録を共有します。

しかもセットアップは、gws-skill-bundle.zip を AI に渡して 「これ展開してセットアップして」 と頼むだけでかなり進みます。ZIP の中に bootstrap.sh と gws 用スキル群を入れてあるので、AI が README を読み、必要なコマンドを実行し、Google Cloud Console やブラウザ認証で人間の確認が必要なところだけ聞いてくれる構成です。

  • 検証バージョン: gws 0.22.5 / Node.js v18+ / Mac (zsh) と Windows (Git Bash) の両方で動作確認
  • 想定読者: Claude Code / Codex は触ったことがあるが、Google Workspace 連携はこれから、という人

今日の旅路:Claude Code / Codex から Google Workspace を動かす


なぜCLI? GUI / API / CLI を一旦整理

最初に用語だけ揃えておきます(既知の人は読み飛ばしOK)。

  • GUI: ブラウザでDriveを開いてクリック。直感的だけど繰り返しに弱い
  • API: システム同士の窓口。Google側に既にある「向こう側のドア」
  • CLI: ターミナルから1行打って動かす方法。今日の主役

API はレストランのウェイターに例えると分かりやすい。お客(プログラム)→ ウェイター(API)→ 厨房(Google)の3層構造で、人が画面をクリックしなくても、プログラムが「ウェイター」越しに「このシートの値を取って」と直接お願いできる仕組みです。

API=システム同士の通り道(レストランの比喩)

ここで混乱しがちなのが「CLIとAPIってどう違うの?」という話。GUI と CLI は『あなたの操作方法』、APIは『Googleが用意した窓口』 で、そもそもレイヤーが違います。

CLI と API、何が違う?

業務側から見ると、 AIに任せたいときはCLIが圧倒的に楽 です。GUI操作のAI代行(Computer Use 系)は遅いしコストも高く、現状は確定的に動くCLIが強い。「Aシートの売上を抜き出してSlackに流して」が1秒以内・確実に返ります。

AI × GUI vs AI × CLI

gwsこのCLI側の役割を担うツール で、内部で Google API を叩いてくれます。AIを介さない素のCLI操作だと、流れはこんな感じ。

CLIから API を叩く:素の4ステージ

GUI / CLI、どっちが業務に向くかの早見表も貼っておきます。1件だけ・直感的な作業はGUIで十分、定期実行・他システム連携・AI連携はCLI、と切り分けるとシンプル。

GUI と CLI(gws)使い分け早見表


セットアップ:ZIPをAIに丸投げでOK

「Google Cloud Console でOAuthクライアントを作るの、ちょっと面倒そう」と思ったら、gws-skill-bundle.zip を Claude Code / Codex に渡してこう頼めばOKです。

ZIPはこちらに置いてあります。

このZIPを展開して、READMEを読んで、gws のセットアップを進めて。
途中でGoogle Cloud Consoleや認証の確認が必要なところは質問して。

ZIPにはセットアップ手順、bootstrap.sh、gws 用スキル群をまとめてあります。AI が ZIP を展開し、bash bootstrap.sh を実行し、以下を順番に進めます。

Step 何をする? 人間がやること
1 Node.js の確認・導入 インストール確認に答える
2 gws CLI の確認・導入 インストール確認に答える
3 gcloud CLI の確認・導入 インストール確認に答える
4 gws auth setup --login ブラウザでGoogleアカウントを選んで許可
5 gwsスキル群を配置 上書き確認に答える
6 認証状態を確認 Claude Code / Codex を再起動

つまり、コマンドを暗記する必要はありません。AIに任せて、認証画面や確認プロンプトだけ人間が判断すればOKです。

自分で進める場合の流れも残しておきます。

1. Node.js を確認

gws は Node.js で動くので、まずバージョン確認します。

node --version  # v18 以上を推奨
npm --version

未インストールなら Mac は brew install node、Windows は winget install OpenJS.NodeJS.LTS

2. gws をインストール

npm install -g @googleworkspace/cli
gws --version
# → gws 0.22.5

3. Google Cloud Console で「自分用の鍵」を作る

ここが詰まりポイントでした。やることは5ステップ。

① Google Cloud Console でプロジェクトを作る
② Drive / Sheets / Calendar / Docs / Meet の API を有効化
③ OAuth 同意画面を設定(Workspaceなら「内部」推奨)
④ OAuth クライアントID(デスクトップアプリ)を作る
⑤ client_secret.json をダウンロード → ~/.config/gws/ に置く

@xxx.co.jp のような Workspace組織アカウントなら同意画面で「内部」を選ぶ のが安全。「外部」だとテストユーザー追加・未確認警告など、ハマり所が増えます。個人 Gmail を使う場合だけ「外部」+テストユーザーに自分を追加する、という運用になります。

クライアントID作成のときの アプリケーション種別は「デスクトップアプリ」。JSONをダウンロードしたら所定パスに置きます。

# Mac / Linux / WSL / Git Bash
mkdir -p ~/.config/gws
mv ~/Downloads/client_secret_*.json ~/.config/gws/client_secret.json

このJSONは 「自分のPCがGoogleとして振る舞える鍵」 です。Gitにコミットしない・Slackに貼らない。漏れたらCloud Consoleから即削除して再発行、を覚えておきます。

4. gws auth login で認証

gws auth login --scopes "https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets,https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/documents,https://www.googleapis.com/auth/meetings.space.readonly,https://www.googleapis.com/auth/cloud-platform"

このコマンドは1行 です。改行が混ざると error: a value is required for '--scopes <scopes>' but none was supplied が出るので注意。

ブラウザが開くので業務用アカウントを選び、全権限にチェックが入った状態で「許可」。終わったら確認します。

gws auth status
# token_valid: true と、スコープが6種類以上付いていればOK

サービス名指定(-s drive,sheets,...)よりも --scopes でフルURL指定のほうが、スコープ取り漏れを防げます。

5. --params--json の使い分け

gws のコマンドで頻出する2つのフラグ。最初に押さえておくと混乱しません。

フラグ 何を渡すか
--params URL/クエリ的なパラメータ(ID・range・pageSize・検索クエリ等) --params '{"spreadsheetId": "X", "range": "A1:E10"}'
--json リクエストボディ(書き込む値・新規作成内容) --json '{"values": [["a","b"]]}'

values update のように両方を同時に使うコマンドもあります(「どこに=--params」「何を書く=--json」)。


AIに gws の使い方を覚えさせる

ここからが Claude Code / Codex との連携。最終的に作りたい構成はこんな3層スタック。

全体像(俯瞰):あなた/Claude Code+公式スキル群/gws・API・Workspace

実行時の信号の流れで見ると、人 → Claude Code / Codex → gws CLI → Google API → Workspace の5段バケツリレー。AI が「自然言語」と「gws の正しい構文」を変換するハブになります。

処理の流れ:人→Claude Code→gws CLI→API→Workspace

このハブを成立させるのが gws 用スキル群gws-skill-bundle.zip には、Drive・Sheets・Gmail・Calendar・Docs・Meet などを自然言語から呼び出すためのスキルをまとめています。

ZIP丸投げでセットアップした場合、この配置も bootstrap.sh が済ませます。既に gws と認証が終わっていて、スキルだけ入れ直したい場合は次だけでOKです。

bash install-skills.sh

配置先はスクリプトの中で Claude Code / Codex / 両方 から選べます。確認するなら以下です。

ls ~/.claude/skills/ ~/.codex/skills/ 2>/dev/null | grep gws- | head

同梱スキルの内訳はこんな感じです。

カテゴリ 個数
コアサービス 約14 gws-drive gws-sheets gws-gmail gws-calendar gws-docs gws-meet
細粒度の操作 約20 gws-sheets-read gws-gmail-send gws-gmail-reply
セットアップ 1 gws-setup
セキュリティ 4 gws-modelarmor-*(プロンプトインジェクション検査)

再起動後に「今インストールされている gws 系のスキルを一覧して」と頼めば、AI がスキルディレクトリを読んでずらっと並べてくれます。


5機能を実際に動かしてみる

ここからは Claude Code / Codex に 日本語で頼む スタイルで。実行は AI 側で進めてくれるので、出てきたコマンドを横目に確認するだけです。

Drive:直近のファイル一覧 と Meet録画フォルダ検索

gws を使って、自分の Drive の最近変更されたファイルを3件だけ表示して

組み立てられたコマンド:

gws drive files list \
  --params '{"pageSize": 3, "orderBy": "modifiedTime desc", "fields": "files(id,name,mimeType,modifiedTime)"}' \
  --format json

Meet録画は Drive の 「Meet Recordings」 フォルダに自動保存されるので、こんなクエリで探せます。

gws drive files list \
  --params '{"q": "name contains \"Meet Recording\"", "pageSize": 5, "fields": "files(id,name,mimeType,modifiedTime,parents)"}' \
  --format json

Sheets:作成 → 書き込み → 読み込み → 追記

スプレッドシートまわりは4ステップで一通り触れます。

新しいスプレッドシートを作って。タイトルは「DXタスクリスト」、最初のタブ名は「tasks」にして。spreadsheetId を教えて。
gws sheets spreadsheets create \
  --json '{"properties": {"title": "DXタスクリスト"}, "sheets": [{"properties": {"title": "tasks"}}]}' \
  --format json

返ってきた spreadsheetId<SHEET_ID> として、ヘッダと3行のデータを書き込みます。

<SHEET_ID> の tasks!A1:E4 に、タスクID/担当/内容/期限/ステータスの4行を書いて

Claude Code が gws sheets spreadsheets values update を組み立てて実行。 書き込み系は承認画面で範囲を毎回確認 する運用が前提。慣れるまでは題材シート(コピー)で動作確認するのが無難です。

末尾追加は values append で。

tasks シートの末尾に新しいタスクを1行追加して。タスクID: DXAI-4 / 担当: 自分 / 内容: ハンズオン宿題 / 期限: 1週間後 / ステータス: 未着手

Calendar:今日の予定をAIに聞く

gws calendar +agenda --format json

返り値の例:

{
  "count": 4,
  "events": [
    {
      "start": "2026-05-12T10:00:00+09:00",
      "end":   "2026-05-12T11:00:00+09:00",
      "summary": "顧客様A"
    }
  ]
}

+agenda+ プレフィックスはヘルパーコマンド の印。素のAPIだと calendar events list を複数カレンダーに対して回す必要があるところを、1コマンドで束ねてくれます。

Docs:議事録メモを新規作成して本文を挿入

gws docs documents create --json '{"title": "DX議事録メモ"}' --format json

本文挿入は gws docs documents batchUpdateinsertText リクエスト。Claude Code に「以下の本文を挿入して」と Markdown ベタ書きで頼めば、内部でJSONに変換してくれます。

⚠️ 403 Google Docs API has not been used in project ... が返るときは、API有効化漏れの可能性が高いです。Cloud Console で docs.googleapis.com を有効化すると即解消します(自分の場合、新規プロジェクトを作らず既存プロジェクトの client_secret を流用していたため Docs/Meet API が有効化されておらず、ここでハマりました)。

Meet:公式APIで会議記録を取得

gws meet conferenceRecords list --params '{"pageSize": 3}' --format json

返り値の例(実機で取得):

{
  "conferenceRecords": [
    {
      "name": "conferenceRecords/...",
      "space": "spaces/...",
      "startTime": "2026-05-01T00:58:13.285085Z",
      "endTime": "...",
      "expireTime": "2026-05-31T..."
    }
  ]
}

⚠️ conferenceRecords 系API は Workspace Business Standard 以上のエディションでのみ動作 します。Starter / Individual の場合は、上の Drive セクションで紹介した「Meet Recordings」フォルダ検索で代替できます。


ワークフロースキル:1コマンドで朝会レポを作る

公式スキルの中には 複数APIを束ねた業務直結のヘルパー が6個あります。代表が standup-report

gws workflow +standup-report --format table

1コマンドで 「今日のカレンダー予定」+「未完了の Google Tasks」 が朝会形式でまとまって返ります(内部は calendar +agendatasks list を束ねたもの)。

他にも揃っています。

実行コマンド 何をする
gws workflow +standup-report 朝会レポ(今日の予定 + 未完了タスク)
gws workflow +weekly-digest 週次まとめ(今週の会議 + 未読メール数)
gws workflow +meeting-prep 次の会議の準備(議題・出席者・関連Doc)
gws workflow +email-to-task メール → Google Tasks に変換
gws workflow +file-announce Drive ファイルを Chat に告知

複合タスクも日本語1行で投げられます。

今日のカレンダー予定をもとに、各打ち合わせの議事録テンプレートDocを新規作成して。
タイトルは「議事録_<会議名>_<日付>」で。先週のMeet録画一覧もDocの末尾に添えて。

これで Claude Code が内部で「Calendar から今日の予定を取得 → 各予定について Doc を新規作成 → タイトルを動的生成 → Meet conferenceRecords を取得 → 本文に埋め込み」までを組み立てて実行します。スキル群があると Claude Code側が正しいコマンドの引数を"知っている"前提で会話できる ため、自然言語の指示だけで複合タスクが回せます。


ハマりやすいポイント Top5

実際に詰まった順に整理します。

# 症状 原因 抜け道
access_denied OAuth同意画面のテストユーザー未追加(「外部」モード) Workspaceなら「内部」に切替、または「外部」のままテストユーザーに自分追加
403 API has not been used 既存プロジェクトの client_secret.json を流用していて、必要なAPIが有効化されていない(自分はこれで Docs/Meet が動かないと勘違いした)/本当に有効化直後なら伝播遅延も数分ある gcloud services list --enabled --project=<ID> で確認 → 不足は gcloud services enable docs.googleapis.com meet.googleapis.com --project=<ID> で一括有効化
403 Insufficient authentication scopes スコープ不足 gws auth login --scopes "<URL>,<URL>,..." でフルURL指定して再認証
Meetの conferenceRecords が空 or 動かない Workspaceエディション制約(Starter/Individualは不可) Business Standard以上が必要。下位エディションなら Drive 経由で「Meet Recordings」フォルダを検索
zsh/bash で Sheet1!A1 が壊れる ! が履歴展開と解釈される シングルクォートで囲む--params '{"range": "tasks!A1:E10"}'

特に②は、セットアップ手順だと「新規プロジェクトを作って API 有効化」の流れになっていますが、 既存プロジェクトの認証鍵をそのまま使い回すと、手順通り進めたつもりでも API 有効化漏れが起きる という落とし穴です。gws auth statusenabled_apis を覗くと一発で気づけます。


まとめ

  • gwsGoogle DevRel主導のOSSgoogleworkspace/cli)。Workspace 27サービスを1ツールでカバー
  • Claude Code / Codex との連携は gws-skill-bundle.zip の丸投げセットアップがキモ。AIが gws の正しい構文を"知ってる"状態を作れる
  • セットアップで一番詰まるのは OAuth同意画面とAPI有効化の伝播遅延。ここを抜ければあとは日本語で頼むだけ

公式リポジトリ配布なので素性は確かですが、Workspace 製品本体のような有償サポート(SLA)が付く位置付けではない点だけ留意。業務クリティカルな自動化に乗せる前にはチームで動作確認しておきたいところです。

関連記事

36
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?