Google Workspace CLI(gws)でターミナルからDriveやGmailを操作する
📝 記事について:
本記事は、50近辺のくたびれたおっさん(貧乏)の筆者が、Google Workspace CLI「gws」の
インストール → 初期設定 → GCP側の各種設定 → Driveへのアクセス(JSON取得)
までを試行錯誤しながらまとめた記録です。
躓きに躓き、わけのわからない Google Cloud の迷宮を縦横無尽にさまよいながら書いています。
内容の正確性については、必ず公式情報やデータソースをご確認ください。
最後に、力業で gws を叩き落とした PowerShell アンインストールスクリプトのおまけも掲載しています。
Google Workspace CLI「gws」は、Drive や Gmail、Calendar などをターミナルから直接操作できる新しい CLI です。
gcloud を下回りに使いつつ、Workspace API を人間と AI エージェントの両方から扱いやすくすることに特化しています。
Core Insights
① gcloudとは別の「Workspace専用CLI」 → ② npm+ウィザードで環境構築 → ③ DriveやGmailをJSONで自動化
-
1 STEP 1
gcloudとは役割が違う、Workspace専用CLI
gcloudがGCP全体の公式CLIなのに対し、gwsはDrive / Gmail / Calendar / Sheets / Docs / Chat / AdminなどWorkspace API専用に最適化されたCLIです。
-
2 STEP 2
npm installとウィザードで環境構築が完結npmでインストールし、
gws auth setupを実行すると、gcloud経由でGCPプロジェクト作成・API有効化・OAuthクライアント設定まで対話形式で案内してくれます。 -
3 STEP 3
出力はすべてJSON、AIエージェントとも相性が良い
すべてのレスポンスがJSONで返ってくるため、スクリプトやエージェントからの処理・フィルタリング・保存がやりやすく、SkillsやMCPサーバー機能も同梱されています。
gcloudとgwsの関係:下回りはgcloud、上にWorkspace専用レイヤー
まず押さえておきたいのは、gwsは「gcloudのラッパー」ではなく、 Google Workspace API専用の汎用クライアントだという点です。
gcloudはGCEやCloud Storage、Cloud RunなどGCP全体を管理するための公式CLIですが、gwsはDriveやGmail、Calendar、Sheets、Docs、Chat、AdminといったWorkspaceのREST APIをコマンドから叩きやすくすることに特化しています。
実際には、gwsのセットアップフローの中で、gcloud projects createやAPIの有効化などを内部的に呼び出してくれるため、
「インフラ周りの初期設定はgcloud」「その上で、日々のWorkspace操作や自動化はgws」という役割分担になります。
インストールと初期セットアップ(Windows想定)
公式READMEでは、もっともシンプルな導入手順として次の2行が紹介されています。
npm install -g @googleworkspace/cli
gws auth setup
2行目のgws auth setupを実行すると、gcloudでログイン済みのGoogleアカウントを検出し、
どのアカウントでWorkspace用のGCPプロジェクトを作成するか、対話形式で聞いてきます。
次に、gws用のGCPプロジェクトを新規作成するか、既存プロジェクトを使うかを選びます。
記事では、既存の本番プロジェクトと分離するために、gws-cli-yosuke-1234 のような専用プロジェクトを新しく作成しました。
さらにウィザードが進むと、Drive / Gmail / Calendar / Docs など、どのWorkspace APIを有効にするかを選ぶ画面になります。 必要なサービスだけをONにしておくことで、権限を絞りつつ、用途に合わせた最小構成のCLI環境を用意できます。
コンセント画面とOAuthクライアントの手動設定
今回は、自動作成ではなく、GCPコンソール側でOAuthクライアントを手動で作るルートになりました。
まずはGoogle Auth Platformの概要画面から「開始」を押して、ユーザータイプやアプリ情報を外部向けとして設定します。
そのうえで、API とサービス > 認証情報 から「認証情報を作成」ボタンを押し、OAuth クライアント ID を選択します。
アプリケーションの種類は「デスクトップ アプリ」を選べば、gws が期待している設定になります。
ウィザードに沿って進めると、「クライアント」タブの中でDesktopアプリ用のOAuthクライアントが作成されます。
画面上部には、アプリケーションの種類と名前、下部にはクライアント ID とクライアント シークレットが表示されます。
最後に表示されるダイアログで、クライアント ID とクライアント シークレットをコピーします。
ターミナル側の gws auth setup が求めている入力欄に貼り付ければ、gws 側のOAuth設定が完了します。
超重要:テストユーザーに登録しないと「gws_test_account エラー403」で弾かれる
ここが一番ハマりやすいポイントです。gwsが作ったOAuthアプリはデフォルトで「テスト中」の状態になっています。
OAuth同意画面の「テストユーザー」に登録されたアカウントだけがログインを通過できます。
ここに自分のGoogleアカウントを追加しないと、ブラウザ側で403エラーになり、いくらやり直しても先に進みません。
もしこの設定を忘れていると、ブラウザでログインを試みたときに、
「このアプリはGoogleで確認されていません」「gws_test_account は Google の審査プロセスを完了していません」
といった警告が表示され、エラー 403: access_denied でブロックされます。
対策はシンプルで、先ほどのテストユーザー画面で自分が使いたいアカウントを追加してから、再度
gws auth login を実行するだけです。
これで403を回避し、ブラウザで権限を許可すれば、ターミナル側に認証完了メッセージが表示されるようになります。
実際に何ができるのか
gwsのコマンドは、基本的に gws <サービス> <リソース> <メソッド> という構造になっています。
しかも、コマンド一覧は静的にハードコードされておらず、
Google Discovery ServiceからREST APIの定義を読み込んで動的に生成されています。
- Drive:
gws drive files list --params '{"pageSize": 10}'で最近のファイル一覧、--upload付きでファイル作成+アップロード - Sheets:
gws sheets spreadsheets create --json '{"properties":{"title":"Q1 Budget"}}'で新しいスプレッドシートを作成 - Chat:
gws chat spaces messages create ... --json '{"text":"Deploy complete."}' --dry-runでChatメッセージ送信のプレビュー - Gmail / Calendar / Admin:REST APIにあるエンドポイントは、ほぼそのままCLIサブコマンドとして利用可能
すべてのレスポンスはJSONで返ってきます。
jqでフィルタしてログに保存したり、スクリプトから定期実行したり、
あるいはAIエージェントから「Driveの特定フォルダの一覧を取ってほしい」といった形で呼び出すことができます。
重要:使いたいWorkspace APIはGCP側で「有効」にする必要がある
gwsからDriveやGmailなどのAPIを叩くときは、GCPコンソール側で該当APIを「有効」にしておくことが必須です。
まだ有効化していない状態で実行すると、403エラーとともに「API not enabled for your GCP project.」というメッセージと、有効化用URLが表示されます。
実運用では、まずgwsで一度コマンドを叩いてみて、403とともに表示される
enable_url にアクセスして「有効にする」をクリックし、数十秒待ってから再実行する流れがわかりやすいと感じました。
利用したいサービスごとに、この有効化ステップが必要だと覚えておくとスムーズです。
gws auth login --account ... では、どの Drive スコープを付与するかを対話的に選択できる
一連のターミナル操作の流れ(抜粋・ID等はマスク)
実際に手元で行ったセットアップ〜Drive一覧取得までの流れを、最低限のログだけ抜き出すと次のようになります。
クライアントIDやファイルIDなどの個人情報・識別子は****でマスクしています。
PS > npm install -g @googleworkspace/cli
PS > gws auth setup
...(ウィザードに従って GCP プロジェクトと OAuth クライアントを作成)...
PS > gws auth login --account yosuke4061@gmail.com
Open this URL in your browser to authenticate:
https://accounts.google.com/o/oauth2/auth?...client_id=****.apps.googleusercontent.com&...
{
"account": "yosuke4061@gmail.com",
"credentials_file": "C:\\Users\\...\\gws\\credentials.****.enc",
"message": "Authentication successful. Encrypted credentials saved.",
"status": "success"
}
PS > gws auth list
{
"accounts": [
{
"email": "yosuke4061@gmail.com",
"is_default": true
}
],
"count": 1,
"default": "yosuke4061@gmail.com"
}
PS > gws drive files list --params '{\"pageSize\": 5}'
{
"files": [
{ "id": "****", "name": "自由形式 2", ... },
{ "id": "****", "name": "埼玉県の巨木一覧 (203/205地点)", ... },
{ "id": "****", "name": "Competitor_Analysis", ... },
{ "id": "****", "name": "無題の図形描画", ... },
{ "id": "****", "name": "Gemma LoRA ファインチューニング.ipynb", ... }
],
"kind": "drive#fileList",
"nextPageToken": "****"
}
おおまかな流れとしては「npm install → gws auth setup → gws auth login --account ... → 必要なAPIを有効化 → 実際の gws drive ... コマンド」という順番で進めれば、
ターミナルからGoogle Workspaceを扱えるところまで到達できます。
(おまけ)強制アンインストール用 PowerShell(ダウンロード)
「PowerShellでゴリゴリに、強制アンインストールしたい」方向けに、gwsの削除スクリプトをZIPで置いておきます。 実行は自己責任で、内容を確認してから使ってください(認証情報フォルダも削除します)。
PS > Expand-Archive .\gws-uninstall.zip -DestinationPath .\gws-uninstall -Force
PS > powershell -ExecutionPolicy Bypass -File .\gws-uninstall\gws-uninstall.ps1
AIエージェントとの連携と注意点
公式リポジトリには、各WorkspaceサービスごとのSKILL.mdや、gwsをMCPサーバーとして動かすための仕組みも同梱されており、
Gemini CLIや他のエージェント環境から「Driveツール」「Gmailツール」として呼び出せる設計になっています。
ただしREADMEに明記されているとおり、「This is not an officially supported Google product.」とあるため、
仕事や本番環境で使う場合は、権限設計と監査ログ、バージョン固定などを自分側でしっかり管理する前提になります。
Artist's Perspective
「ざっくり言うと、gws は “Google Cloud SDK(gcloud)を下回りに使いつつ、Google Workspace API を叩きやすくしたラッパー的なツール群” という印象でした。
中身を追っていくと、皆さんおなじみの SKILLS(AI 向けの辞書/手順群)が用意されていて、AI エディタ(Antigravity)みたいな環境からの利用も想定していそうです。
今回はインストールと認証設定、そしてツールにアクセスできるところまででいったん終了。いや〜、なんか色々ありますねぇ。
Google Cloud、超巨大すぎるので、こういうツールが出てくるのも納得……本当に超巨大な Google Cloud、よく作ったよなぁ〜。」
データソース・参考リンク
本記事は以下の情報源を参考にしています。内容の正確性については、必ず元のデータソースをご確認ください。