Antigravity(Google)環境で、LLMチャットで Skills を利用して Google Workspace CLI を実際につかってみるところまで。メール件名文字化け回避と原因調査

| 3 min read

📝 記事について: 本記事は第1回(gws 入門・インストール〜認証・GCP設定からDrive・Gmailをターミナルで操作するまで)の復習です。インストールとセットアップをコンパクトにおさらいし、ここから実際に Gmail・Drive・Calendar を使っていくための準備までをまとめています。内容の正確性は公式情報をご確認ください。

前回のインストールとセットアップを軽くおさらいし、実際に Gmail・Drive・Calendar を使っていくための準備までをコンパクトにまとめます。Antigravity のアップデートエラーCompute Quota(利用制限)で困ったときは、それぞれの記事を参照してください。

Core Insights

① GCPで専用プロジェクト・認証情報・同意画面 → ② テストユーザー・利用API有効化 → ③ ローカルで gws auth setup / login(22API一括も可)

  • 1GCP側

    専用プロジェクトと認証情報

    Google Cloud で gws 専用プロジェクトを新規作成し、OAuth同意画面の構成と「認証情報を作成」でクライアントID・シークレットを用意します。アプリはテストモードで起動します。

  • 2テスト・API

    テストユーザーとAPI有効化

    OAuth同意画面の「テストユーザー」に利用するGoogleアカウントのメールを追加。GWSで使うサービス(Gmail API、Drive API、Calendar API など)をGCP側で有効にします。

  • 3ローカル

    gws auth setup / login

    ターミナルで npm install -g @googleworkspace/cligws auth setupgws auth login。クライアントID・シークレット入力後、表示URLで権限を許可。CLIから22個のWorkspace APIを一括有効化することもできます。初回のインストール手順は第1回(gws 入門・インストール〜認証〜Drive/Gmail 操作まで)を参照。

おさらい:Google Workspace CLI 専用プロジェクトを作成

まず、gws 用の Google Cloud プロジェクトを新規作成します。既存の本番プロジェクトと分離しておくと管理しやすくなります。

Google Cloud の WEB でプロジェクトを新規作成
Google Cloud で「新しいプロジェクト」を作成

プロジェクト作成後:認証情報と同意画面

プロジェクト作成後、専用の認証情報を用意します。同意画面を構成(アプリケーションのIDを構成し、Google API の呼び出しと「Google でログイン」のための認証情報を管理。アプリはテストモードで起動)し、「+ 認証情報を作成」からOAuth 2.0 クライアント ID などを作成します。

認証情報ページ:同意画面を構成・認証情報を作成
同意画面を構成(必須)し、認証情報を作成

GWS を利用するユーザーを追加(テストユーザー)

OAuth同意画面が「テスト中」の間は、テストユーザーに登録した Google アカウントのメールだけがアプリにアクセスできます。ここに自分が使うアカウントを追加しないと、のちに gws auth login で 403 になるので必ず追加します。

テストユーザーを追加する画面
テストユーザーに「+ Add users」でメールを追加
テストユーザー一覧
追加したテストユーザー(Google アカウントのメール)

認証情報:クライアント ID とシークレット

「認証情報を作成」→ OAuth 2.0 クライアント ID(デスクトップアプリ)で、クライアント IDクライアント シークレットを取得します。これがないと gws では必須のため、作成後に表示されるダイアログでコピーまたは JSON ダウンロードして安全に保管します。

OAuth クライアント作成完了:クライアント ID とシークレット
クライアント ID・シークレットをコピーして gws のプロンプトに貼り付ける

GWS で利用するサービス(GCP 側で API を有効化)

Gmail・Drive・Calendar を使う場合は、それぞれ GCP の「API とサービス」から有効にします。以下は Gmail API・Google Calendar API・Google Drive API の「有効にする」画面です。

Gmail API を有効にする
Gmail API を有効にする
Google Calendar API を有効にする
Google Calendar API を有効にする
Google Drive API を有効にする
Google Drive API を有効にする

ここまでで Google Cloud 側の設定は完了です。利用予定は Gmail・Drive・Calendar の三つのサービス(API)です。

ローカルから gws:ターミナルでセットアップとログイン

ターミナルで次を実行します。クライアント ID とシークレットは、プロンプトで入力するか、表示される URL にアクセスして権限を許可する流れで進められます。

npm install -g @googleworkspace/cli
gws auth setup
gws auth login
gws auth setup で Google アカウントを選択
gws auth setup でアカウント選択。必要に応じて表示URLで権限を許可

CLI から 22 個の Workspace API を一括有効化

gws auth setup の Step 4 で「Workspace APIs — Enabling 22 APIs...」と表示され、gws 側からも API を一括で有効化できます。第1回では GCP コンソールで確認しながら有効化しましたが、CLI でまとめて有効にするか、GCP 側で個別に制御するかは好みで選べます。

gws から 22 個の API を有効化している様子
gws から 22 個の Workspace API を一括有効化

実際に利用する — GWS 公式スキル(LLM 用)

GWS 公式リポジトリの skills には、おなじみの LLM 用 SKILLS(手順が書かれた指示書)が用意されています。Drive・Gmail・Calendar などサービスごとや、recipe 系のタスク単位で SKILL.md がまとまっています。

GitHub の cli/skills ディレクトリ一覧
cli/skills の一覧(gws-* / recipe-* など)

スキルを .agent/skills に保存する(いろいろなやり方)

正規のやり方で SKILLS を利用するには、ワークスペース直下の .agent/skills にこれらを保存しておく必要があります。方法はいくつかあります。

  • 公式 README の npx skills add https://github.com/googleworkspace/cli で一括追加
  • リポジトリを clone し、skills フォルダを .agent/skills にシンボリックリンクまたはコピー
  • 本記事の方法: PowerShell で「開いているワークスペースの直下 .agent/skills」に強制的にダウンロードするスクリプト(後述)

PowerShell で一括取得 — gws-skills-sync.ps1

ゴリゴリの PowerShell で書いたスクリプトの役割は、カレントディレクトリ(ワークスペースルート想定)の .agent/skills に、GitHub の skills を強制ダウンロードすることです。

gws-skills-sync.zip をダウンロード

コードの要点: GitHub API GET /repos/{owner}/{repo}/contents/skills で一覧取得(User-Agent 必須)。type === "dir" の各ディレクトリについて、raw.githubusercontent.com から {skill}/SKILL.md を取得し、.agent/skills/{skillName}/SKILL.md に保存します。

# 1. 対象は .agent/skills(カレントをワークスペースルートとみなす)
# 2. GitHub API で skills 一覧取得 → 各 dir の SKILL.md を raw で取得
# 3. User-Agent ヘッダー必須。SKILL.md がないフォルダは SKIPPED

Antigravity(LLM)でスクリプトを実行すると

LLM チャットからこのスクリプトを実行すると、同期完了後に「スキルを習得した」ような回答(Drive・Gmail・Calendar の操作例)が返ってきます。べんりですね~~。(Antigravity が out of date と出る場合は別記事を参照。)

Antigravity でスキル同期完了後の LLM 回答
同期完了後、LLM ができることの例を返してくれる

Gmail 送信と OAuth スコープ(認証でつまづきやすいポイント)

認証の必須ステップ: gws auth login で Enter を押すとターミナルに URL が表示されます。その URL をブラウザで開き、Web 上でアカウント選択・権限許可を行うことが必須です。このステップを完了しないと認証が失敗し、以降の gws コマンドが使えません。

gws auth login で表示された URL を開いたときの Google 画面
表示された URL を開くとアカウント選択と権限許可が求められる
OAuth スコープ選択画面
何ができるか(スコープ)を細かく選択できる

API は GCP で有効にしていても、「行える操作」が許可されていないとエラーになります。gws auth login を実行すると Web が起動し、何ができるか(スコープ)を細かく選択できます。そこで許可しないとその操作(例: メール送信)は行えません。認証まわりはつまづきポイントが多いので、URL を開いて権限許可まで必ず完了させておきましょう。

ともあれ、認証まわりは本当にわかりにくいですよね~~~。ここまでがセットアップと認証の話です。


実際に使ってみる

以下、LLM(Antigravity)から SKILLS 経由で gws を叩いていきます。Antigravity のクオータ(制限)の詳細は別記事を参照してください。

【注意】 GWS を利用するときは、先にターミナルで gws auth login を実行してログインしておいてください。表示された URL をブラウザで開き、権限を許可すると、以降のコマンドが使えるようになります。

PS 情報空間写真> gws auth login
Open this URL in your browser to authenticate:

  https://accounts.google.com/o/oauth2/auth?scope=****&client_id=****.apps.googleusercontent.com&****

{
  "account": "****@gmail.com",
  "credentials_file": "C:\\Users\\****\\.config\\gws\\credentials.****.enc",
  "encryption": "AES-256-GCM (key secured by OS Keyring or local `.encryption_key`)",
  "message": "Authentication successful. Encrypted credentials saved.",
  "scopes": [ "https://www.googleapis.com/auth/drive", "..." ],
  "status": "success"
}
PS 情報空間写真>

LLM から SKILLS でメール送信してみる

LLM チャットからスキル経由で「〇〇宛てにメールを送って」と依頼すると、gws gmail +send 相当のコマンドが実行され、実際に送信が成功します。

gws gmail +send 実行と送信成功メッセージ
LLM 経由でメール送信依頼と成功の流れ

Antigravity から SKILLS で Google カレンダーに予定を追加

同様に、LLM に「予定のタイトル」と「時間」を伝えると、gws calendar +insert のコマンドを生成して実行してくれます。日本時間(JST)では開始・終了に +09:00 を付与する必要があります(例: 2026-03-06T15:00:00+09:00)。

gws calendar +insert を Antigravity で実行した画面
予定サンプル・コマンド・JSON 応答・「カレンダーへの予定追加に成功しました!」
Google カレンダーに追加された予定
3月6日に追加された予定がカレンダーに反映されている様子

SKILLS 経由でカレンダー操作も同じように利用できます。

Antigravity から SKILLS で Google Drive を利用(フォルダ作成・ファイルアップロード)

Drive では、gws drive files create でフォルダを作成し、gws drive +upload で指定フォルダにファイルをアップロードできます。Gmail の件名と違い、Drive のフォルダ名・ファイル名は日本語でも文字化けせずに正しく処理されます。

gws drive でフォルダ作成とファイルアップロードを実行したターミナル
フォルダ作成(調査用フォルダ)とその中へ「セブンのトイレ調査記録.txt」をアップロード
Google Drive に作成されたフォルダとファイル
マイドライブに「調査用フォルダ」と「セブンのトイレ調査記録.txt」が正しく表示されている

フォルダ作成時は --json '{"name":"調査用フォルダ", "mimeType":"application/vnd.google-apps.folder"}'、アップロード時は --parent "フォルダID"--name "ファイル名" を指定する流れです。

日本語メール送信の文字化け(実態レポート)

Windows 11 / PowerShell 環境で gws gmail +send を使って日本語メールを送信した際の挙動です。

Gmail 受信画面・件名が文字化け
件名が文字化け、本文は正常表示
Gmail 受信・件名文字化けの別例
MIME-TEST 件名の文字化け
件名のみ文字化けする例(MIME-TEST など)

検証結果:

項目 状態 理由(推測)
本文 (Body) 正常表示 API の JSON ボディで UTF-8 が維持される
件名 (Subject) 文字化け発生 ヘッダーとしての MIME エンコード(RFC 2047)が Windows 版 gws で正しく行われていない

試行した対策(いずれも件名の化けは解消せず): $OutputEncoding = [Encoding]::UTF8chcp 65001$env:GWS_ENCODING = "utf-8"。結論として、OS 側の設定ではなく gws プログラム本体(Windows バイナリ)のヘッダー処理に起因する問題と考えられます。

現時点の回避策と運用アドバイス:

  • ルール A: 件名(Subject)はアルファベットと数字のみにする。
  • ルール B: 重要な日本語はすべて本文(Body)に含める。
  • ルール C(上級者): +send ヘルパーを使わず、事前に MIME エンコードしたデータを gws gmail users messages send --json '...' で直接 API に流す。

公式ドキュメントには載っていない、現場で試して初めて分かった落とし穴として記録。2026年3月6日現在

文字化けの原因がソースコードで確定

GitHub の googleworkspace/cli リポジトリを調査したところ、メール送信を担当する Rust のソースが原因であることが分かりました。

該当コード: src/helpers/gmail/send.rs 63行目付近の create_raw_message 関数で、件名(Subject)をそのままヘッダーに流し込んでいます。

/// Helper to create a raw MIME email string.
fn create_raw_message(to: &str, subject: &str, body: &str) -> String {
    format!("To: {}\r\nSubject: {}\r\n\r\n{}", to, subject, body)  // ← 件名がエンコードされていない
}

メールの規格(RFC 5322 / RFC 2047)では、Subject などのヘッダーには ASCII のみか、日本語などは MIME エンコード=?UTF-8?B?...?= 形式)に変換する必要があります。gws は件名をエンコードせず UTF-8 の生データのままヘッダーに書き込んでいるため、受信側(Gmail など)が正しく解釈できず文字化け(Mojibake)として表示されます。

  • ❌ 現状(gws): Subject: セブンのトイレが汚い
  • ✅ 正しい形式: Subject: =?UTF-8?B?44K744OW44Oz44Gu44OIIOOCpOODrOOBjOaxmuOBhA==?=

【注意】Windows 版での日本語メール送信について
現状の gws(v0.6.3 時点)では、メールの件名に日本語を使うと文字化けが発生します。プログラム内部でメールヘッダーの MIME エンコード処理が実装されていないためです。

解決方法・回避策:

  • 回避策1: 件名は英語(アルファベット・数字)にする。
  • 回避策2: 重要な内容はすべて本文(Body)に書く。本文は化けません。
  • 回避策3: Go や Python などで MIME エンコードを自前実装したスクリプトを使うか、gws のアップデートで対応されるのを待つ。

くたびれた貧乏はおっさんとしては、ソースコードまで追いかけて原因を特定。さらに、くたびれる。

✨ 魔法の言葉 — SKILLS で日本語メールを送る場合

Windows 環境で LLM(Antigravity 等)の SKILLS 経由で Gmail を送る際、次のプロンプトを依頼に添えると、件名の MIME エンコードが考慮され、文字化けを防げます。

GWS CLI (gws) を使用して Gmail を送信する際は、OS が Windows であることを考慮し、非 ASCII 文字を含む件名は常に Base64 による MIME エンコードを行い、文字化けを未然に防ぐこと。

PowerShell 側で MIME エンコードを補完して送信した例が以下です。件名「セブンのトイレが汚い件 (最終解決版)」が正しく表示されています。

MIME エンコード送信で件名が正しく表示された Gmail(最終解決版)
gws の不備を PowerShell 側で補完して送信。件名も本文も正しく表示された解決版

以上が、第1回の復習に加え、スキル導入・Gmail 送信・カレンダー予定追加・日本語件名の文字化け注意点までの流れです。次回からは Gmail・Drive・Calendar をさらに掘り下げる内容につなげます。

Artist's Perspective

「GWS の利用、かなり便利ですね。細かな部分まで制御して、メールの一括送信や返信などを自然言語で指示できるので、かなり便利かもです。一方で認証は非常にややこしい。Google Cloud 側の制御も含めて、相変わらず Google Cloud は超巨大ですね。Skills はこれは、魔法ですね……。巷ではフリー〇レンという漫画が流行っておりますが、今は休載中。次が楽しみですね、最強の大魔法使いゼーリ〇エがどうなるのか、いつ再開になるやら。作者様が万全な体制で連載開始されることを祈るばかりです。くたびれた貧乏なおっさん的には、サンデーウェブりで期間限定無料で読めるのはありがたいですね~~。感謝感激、貧乏おっさんでした。」





データソース・参考リンク

本記事は以下の情報源を参考にしています。内容の正確性については、必ず元のデータソースをご確認ください。