Antigravity(Google)環境で、LLMチャットで Skills を利用して Google Workspace CLI を実際につかってみるところまで。メール件名文字化け回避と原因調査
📝 記事について: 本記事は第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/cli→gws auth setup→gws auth login。クライアントID・シークレット入力後、表示URLで権限を許可。CLIから22個のWorkspace APIを一括有効化することもできます。初回のインストール手順は第1回(gws 入門・インストール〜認証〜Drive/Gmail 操作まで)を参照。
おさらい:Google Workspace CLI 専用プロジェクトを作成
まず、gws 用の Google Cloud プロジェクトを新規作成します。既存の本番プロジェクトと分離しておくと管理しやすくなります。
プロジェクト作成後:認証情報と同意画面
プロジェクト作成後、専用の認証情報を用意します。同意画面を構成(アプリケーションのIDを構成し、Google API の呼び出しと「Google でログイン」のための認証情報を管理。アプリはテストモードで起動)し、「+ 認証情報を作成」からOAuth 2.0 クライアント ID などを作成します。
GWS を利用するユーザーを追加(テストユーザー)
OAuth同意画面が「テスト中」の間は、テストユーザーに登録した Google
アカウントのメールだけがアプリにアクセスできます。ここに自分が使うアカウントを追加しないと、のちに gws auth login で 403 になるので必ず追加します。
認証情報:クライアント ID とシークレット
「認証情報を作成」→ OAuth 2.0 クライアント ID(デスクトップアプリ)で、クライアント IDとクライアント シークレットを取得します。これがないと gws では必須のため、作成後に表示されるダイアログでコピーまたは JSON ダウンロードして安全に保管します。
GWS で利用するサービス(GCP 側で API を有効化)
Gmail・Drive・Calendar を使う場合は、それぞれ GCP の「API とサービス」から有効にします。以下は Gmail API・Google Calendar API・Google Drive API の「有効にする」画面です。
ここまでで Google Cloud 側の設定は完了です。利用予定は Gmail・Drive・Calendar の三つのサービス(API)です。
ローカルから gws:ターミナルでセットアップとログイン
ターミナルで次を実行します。クライアント ID とシークレットは、プロンプトで入力するか、表示される URL にアクセスして権限を許可する流れで進められます。
npm install -g @googleworkspace/cli
gws auth setup
gws auth login
CLI から 22 個の Workspace API を一括有効化
gws auth setup の Step 4 で「Workspace APIs — Enabling 22 APIs...」と表示され、gws 側からも API
を一括で有効化できます。第1回では GCP コンソールで確認しながら有効化しましたが、CLI でまとめて有効にするか、GCP 側で個別に制御するかは好みで選べます。
実際に利用する — GWS 公式スキル(LLM 用)
GWS 公式リポジトリの skills には、おなじみの LLM 用 SKILLS(手順が書かれた指示書)が用意されています。Drive・Gmail・Calendar などサービスごとや、recipe 系のタスク単位で SKILL.md がまとまっています。
スキルを .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
を強制ダウンロードすることです。
コードの要点: 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 と出る場合は別記事を参照。)
Gmail 送信と OAuth スコープ(認証でつまづきやすいポイント)
認証の必須ステップ: gws auth login で Enter を押すとターミナルに URL が表示されます。その URL
をブラウザで開き、Web 上でアカウント選択・権限許可を行うことが必須です。このステップを完了しないと認証が失敗し、以降の gws コマンドが使えません。
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 相当のコマンドが実行され、実際に送信が成功します。
Antigravity から SKILLS で Google カレンダーに予定を追加
同様に、LLM に「予定のタイトル」と「時間」を伝えると、gws calendar +insert のコマンドを生成して実行してくれます。日本時間(JST)では開始・終了に
+09:00 を付与する必要があります(例: 2026-03-06T15:00:00+09:00)。
SKILLS 経由でカレンダー操作も同じように利用できます。
Antigravity から SKILLS で Google Drive を利用(フォルダ作成・ファイルアップロード)
Drive では、gws drive files create でフォルダを作成し、gws drive +upload で指定フォルダにファイルをアップロードできます。Gmail の件名と違い、Drive のフォルダ名・ファイル名は日本語でも文字化けせずに正しく処理されます。
フォルダ作成時は --json '{"name":"調査用フォルダ", "mimeType":"application/vnd.google-apps.folder"}'、アップロード時は --parent "フォルダID" と --name "ファイル名" を指定する流れです。
日本語メール送信の文字化け(実態レポート)
Windows 11 / PowerShell 環境で gws gmail +send を使って日本語メールを送信した際の挙動です。
検証結果:
| 項目 | 状態 | 理由(推測) |
|---|---|---|
| 本文 (Body) | 正常表示 | API の JSON ボディで UTF-8 が維持される |
| 件名 (Subject) | 文字化け発生 | ヘッダーとしての MIME エンコード(RFC 2047)が Windows 版 gws で正しく行われていない |
試行した対策(いずれも件名の化けは解消せず):
$OutputEncoding = [Encoding]::UTF8、chcp 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 エンコードが考慮され、文字化けを防げます。
PowerShell 側で MIME エンコードを補完して送信した例が以下です。件名「セブンのトイレが汚い件 (最終解決版)」が正しく表示されています。
以上が、第1回の復習に加え、スキル導入・Gmail 送信・カレンダー予定追加・日本語件名の文字化け注意点までの流れです。次回からは Gmail・Drive・Calendar をさらに掘り下げる内容につなげます。
Artist's Perspective
「GWS の利用、かなり便利ですね。細かな部分まで制御して、メールの一括送信や返信などを自然言語で指示できるので、かなり便利かもです。一方で認証は非常にややこしい。Google Cloud 側の制御も含めて、相変わらず Google Cloud は超巨大ですね。Skills はこれは、魔法ですね……。巷ではフリー〇レンという漫画が流行っておりますが、今は休載中。次が楽しみですね、最強の大魔法使いゼーリ〇エがどうなるのか、いつ再開になるやら。作者様が万全な体制で連載開始されることを祈るばかりです。くたびれた貧乏なおっさん的には、サンデーウェブりで期間限定無料で読めるのはありがたいですね~~。感謝感激、貧乏おっさんでした。」
データソース・参考リンク
本記事は以下の情報源を参考にしています。内容の正確性については、必ず元のデータソースをご確認ください。