gws
Google Workspace 全 API を 1 本の CLI で。Discovery Document から動的にコマンドを組み立て、JSON 出力と Agent Skills で人間と LLM の両方を想定した設計。
gws(googleworkspace/cli)は、Drive・Gmail・Calendar・Sheets など Google Workspace API を統合操作する Rust 製 CLI。静的なサブコマンド一覧を持たず、実行時に Google の Discovery Service を読み取り、API 追加に追従する。
npm パッケージ @googleworkspace/cli は GitHub Releases から各 OS 向けバイナリを取得するラッパー。Homebrew・Nix flake・cargo install も利用できる。
コマンド木は clap で Discovery Document から都度構築する。成功・失敗・ダウンロードメタデータはすべて JSON で返る。
flowchart LR
A["argv[1] で service 特定"] --> B["Discovery Document 取得\n(24h キャッシュ)"]
B --> C["clap::Command 木を構築"]
C --> D["残り argv を再パース"]
D --> E["認証 → HTTP 実行"]
E --> F["JSON stdout"]
リポジトリ構成(要点)
crates/google-workspace-cli— CLI 本体(Rust)crates/google-workspace— 共有ライブラリskills/— API 別・workflow・recipe・persona の Agent Skills(SKILL.md)npm/— プラットフォーム別バイナリ取得スクリプト
gws <service> <resource> [sub-resource] <method> [flags]
gws --help
gws <service> --help主要フラグ
| フラグ | 用途 |
|---|---|
--params '<JSON>' | URL / クエリパラメータ(pageSize、q など) |
--json '<JSON>' | POST / PUT / PATCH のリクエストボディ |
--fields '<MASK>' | レスポンスフィールド制限(エージェントのコンテキスト節約に重要) |
--page-all | 自動ページング、NDJSON(1 行 1 JSON) |
--dry-run | 変更系操作のペイロード検証(実行しない) |
--upload <PATH> | multipart アップロード |
--sanitize <TEMPLATE> | Model Armor による出力サニタイズ |
クイックスタート
gws auth setup
gws auth login
gws drive files list --params '{"pageSize": 5}'
gws schema drive.files.listgws schema <resource>.<method>。LIST/GET は --fields で巨大 JSON を避ける。変更操作は --dry-run を先に使う。
Discovery 自動生成に加え、よく使う操作は + 接頭辞の手書きヘルパーとして同梱。Discovery 名と衝突しない。
| サービス | 例 | 説明 |
|---|---|---|
gmail | +send +triage +watch | 送信・未読サマリ・NDJSON ストリーム |
calendar | +insert +agenda | イベント作成・予定一覧(アカウント TZ 自動) |
sheets | +read +append | 値の読み書き(range はシングルクォート推奨) |
drive | +upload | メタデータ付きアップロード |
workflow | +standup-report +meeting-prep | 複数 API を跨ぐ定型ワークフロー |
gws gmail +send --to alice@example.com --subject "Hello" --body "Hi there"
gws calendar +agenda --today --timezone America/New_York
gws workflow +standup-report| 状況 | 推奨 |
|---|---|
gcloud 済み | gws auth setup(最速) |
| GCP プロジェクトのみ | Cloud Console で Desktop OAuth クライアント作成 → gws auth login |
| 既存アクセストークン | GOOGLE_WORKSPACE_CLI_TOKEN |
| サービスアカウント / エクスポート JSON | GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE |
| CI / ヘッドレス | 対話マシンで gws auth export → 環境変数で渡す |
優先順位
| 優先度 | ソース | 設定 |
|---|---|---|
| 1 | アクセストークン | GOOGLE_WORKSPACE_CLI_TOKEN |
| 2 | 資格情報ファイル | GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE |
| 3 | 暗号化資格情報 | gws auth login(AES-256-GCM、OS キーリング) |
| 4 | 平文 JSON | ~/.config/gws/credentials.json |
recommended プリセット(85+ スコープ)は失敗しうる。gws auth login -s drive,gmail,sheets のように必要サービスだけ選ぶ。テストユーザー登録忘れは「Access blocked」の典型原因。
skills/ に API 別(gws-drive 等)、workflow(gws-workflow-*)、50 件の recipe、persona スキルが同梱。一覧はリポジトリ内 docs/skills.md。
npx skills add https://github.com/googleworkspace/cli
npx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-driveGemini CLI OpenClaw npx skills
Gemini CLI 拡張: 先に gws auth setup 後、gemini extensions install https://github.com/googleworkspace/cli。gws-shared スキルは CLI 未インストール時に npm 経由で導入する install ブロックを持つ。
API レスポンスを Google Cloud Model Armor でスキャンし、プロンプトインジェクションをエージェント到達前に検知。
gws gmail users messages get --params '...' \
--sanitize "projects/P/locations/L/templates/T"デフォルトテンプレート: GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE。モード: GOOGLE_WORKSPACE_CLI_SANITIZE_MODE(warn / block)。
| 変数 | 説明 |
|---|---|
GOOGLE_WORKSPACE_CLI_CONFIG_DIR | 設定ディレクトリ(既定 ~/.config/gws) |
GOOGLE_WORKSPACE_CLI_CLIENT_ID / _SECRET | client_secret.json の代替 |
GOOGLE_WORKSPACE_PROJECT_ID | クォータ / 課金用 GCP プロジェクト ID |
GOOGLE_WORKSPACE_CLI_LOG | stderr ログレベル(例: gws=debug) |
.env ファイル(dotenvy)にも対応。テンプレートはリポジトリ内 .env.example。
| コード | 意味 | 例 |
|---|---|---|
0 | 成功 | — |
1 | API エラー | Google 4xx / 5xx |
2 | 認証エラー | 資格情報欠落・期限切れ |
3 | 検証エラー | 未知サービス・不正フラグ |
4 | Discovery エラー | スキーマ取得失敗 |
5 | 内部エラー | 予期しない失敗 |
- googleworkspace/cli — ソース・Releases
- @googleworkspace/cli — npm パッケージ
- Skills Index — 同梱 Agent Skills 一覧
- Google Discovery Service — コマンド生成の元データ