今度は、10分で終わった。
前回つないだ 4 つの Google アカウントは、Claude Code の中でしか使えていなかった。「デスクトップアプリではできない」と言われたのを疑ったら、設定ファイルを一つ足すだけで済んだ話。
前回、Googleアカウントの切り替えをやめた話を書いた。
4つのアカウントを使い分けていて、AIに何か頼むたびに接続先を切り替えるのが面倒だった。だから「切り替えを速くする」のをやめて、「切り替えなくていい状態」を作った。自分のパソコンの中に、4アカウント分の鍵を全部持った管理人を一人置いた。二日がかりだった。
あれで解決した、と書いた。
嘘ではない。でも正直に言うと、半分だった。
解決していたのは、半分だけだった
作った仕組みが動いていたのは、Claude Code の中だけだったのだ。
Claude Code はターミナル、いわゆる黒い画面で動くやつだ。腰を据えて作業するときはこれを使う。ここでは確かに完璧だった。「KIKOのメール見て」と言えば宿のアカウントを見る。「個人とKIKO両方のカレンダー」も一発で出る。
でも、日常のちょっとした用事は、デスクトップアプリのチャット欄でやる。「これ要約して」「この日程どうだっけ」みたいなやつ。黒い画面を開くほどじゃない、数十秒の会話だ。
そっちは、何も変わっていなかった。
相変わらず1アカウントしか繋がっていない。相変わらず設定画面を開いて切り替えていた。一番気軽に使う場所が、一番古いままだった。
これは地味にタチが悪い。「一応できるようになった」という記憶だけがあるから、不便に気づきにくいのだ。黒い画面を開けば解決するのに、そこまでするほどじゃないから、結局やらない。前回書いた「まあ、後でいいか」が、場所を変えて生き残っていた。
「デスクトップではできない」と言われた
で、聞いてみた。デスクトップアプリでも同じことできないの、と。
返ってきた答えは「できない」だった。
理由も説明された。デスクトップアプリは Claude Code の設定ファイルを読まない。だから自作の管理人を起動できない。同じことをやりたければ、管理人をインターネット上に引っ越させて、鍵をかけて、公式の登録手続きをする必要がある。数日仕事だ、と。
なるほど、と思った。思ったが、腑に落ちなかった。
デスクトップアプリだって同じパソコンの上で動いている。管理人はそのパソコンの中にいる。同じ家の中にいるのに会えない、というのは変じゃないか。
だから、もう一度聞いた。
それは、間違いだった
調べ直したら、間違っていた。
正確にはこうだった。
- Claude Code の設定ファイルを読まないのは、本当
- でもデスクトップアプリは、自分専用の設定ファイルを別に持っている
- そこに書けば、自作の管理人をちゃんと起動できる
「できない」んじゃなくて、「同じファイルは読まないから、別のファイルに書く」だけの話だった。
正直、ほっとしたのと同時に、ちょっと怖くなった。あのまま「できないのか」で納得していたら、僕は数日かけてインターネット公開の作業をやっていたかもしれない。10分で済む話に。
AIは間違える。堂々と、自信たっぷりに間違える。そして僕は、それを疑うだけの知識がない。
だから「腑に落ちない」という感覚だけが頼りだ。理屈で反論はできなくても、「なんか変だ」とは思える。その違和感を口に出すかどうかで、結果が数日変わる。
やったこと
設定ファイルを一つ開いて、数行足して、アプリを再起動した。以上。
書いた内容は、Claude Code に登録してあるものをそのまま写しただけだ。同じ管理人を、同じ起動オプションで呼ぶ。コピーである。
驚いたのは、認証をやり直す必要がまったくなかったことだ。
前回いちばん大変だったのが、この認証だった。Googleの管理画面を触って、許可画面を4アカウント分通して、ブラウザのプロファイルでハマって。あれをもう一回やるのか、と身構えていた。
やらなくてよかった。鍵は前回作ったときにパソコンの中に保存されていて、それは同じパソコンの中にあるのだから、そのまま使える。当たり前といえば当たり前なのだが、当たり前だと分かっていなかった。
念のため、元の設定ファイルはバックアップを取ってもらった。触る前に控えを取る。これは何度か痛い目を見て覚えた。
なぜ10分で済んだのか
前回が二日で、今回が10分。
同じことをやっているのに、この差はなんなのか。考えてみると、答えははっきりしている。
前回の二日は、土台を作る時間だったからだ。
Googleの管理画面での手続き。認証の設定。7日で切れる罠の回避。4アカウント分の許可。あれは全部「一度やれば終わり」のものだった。二度目からは、その上に乗るだけでいい。
つまり前回の二日は、今回の10分の中に入っている。
これは、ちょっと大事なことだと思った。何かを作るとき、最初の一回は不釣り合いなほど重い。重いから「これ、割に合ってるのか」と途中で不安になる。でもそれは、二回目以降の分を先に払っているだけなのだ。
土台を作ると、次が速い。
言葉にすると当たり前すぎるけど、実際に「二日 → 10分」を体感すると、腹落ちの仕方が全然違う。
一つだけ、諦めたもの
いいことばかりではない。一つ機能を落とした。
前回いちばん気に入っていたのが、フォルダごとに勝手にアカウントが切り替わるやつだった。宿のフォルダにいれば宿のアカウント、講座のフォルダなら講座のアカウント。何も言わなくていい。
これがデスクトップアプリでは効かない。
理由は単純で、チャット欄には「今どのフォルダにいるか」という概念がないからだ。フォルダを開いて作業する画面じゃない。ただの会話欄だ。基準になるものが無いのだから、切り替えようがない。
なので、こういう運用にした。
- 何も言わなければ、個人アカウント
- 他を見たいときは「KIKOの」「CCCの」と呼び名で言う
呼び名は前回登録してあるので、これで通る。実際に使ってみると、そんなに困らない。むしろチャット欄では毎回話題が飛ぶから、明示的に言った方が事故がない気もする。
全部を同じにしようとしないこと。場所には場所の性質がある。これはこれで、悪くない着地だった。
スマホは、まだ
残っているのはスマホだ。
iPhone のアプリからも4アカウントを触りたい。でもこれは、さっきの理屈が通用しない。iPhone は僕のパソコンの中の管理人を呼べないからだ。同じ家にいないのだから、当然だ。
やるなら管理人をインターネット上に引っ越させることになる。技術的にはできる。ただ、それをやると、僕の4アカウント全部のメールとカレンダーとドライブへの入口が、インターネット上にできる。宿の予約も、講座の顧客情報も、全部だ。
鍵を厳重にかければ済む話ではある。でも、かけ忘れたときの被害が大きすぎる。
なので、別の方向にした。
Mac mini を買った。これを常時起動しっぱなしにして、母艦にする。外出先の iPhone からは、その母艦を遠隔で操作する。管理人は家の中にいたまま、僕だけが外から呼びかける形だ。
外に出すのは管理人ではなく、僕の声だけ。この方が安全だし、追加で作るものもほとんどない。
こっちはまだやっていない。TODOに入れて、寝かせてある。
思ったこと
今回学んだのは、技術の話じゃなかった。
一つは、「できない」を一度疑うこと。AIは自信たっぷりに間違える。理屈で反論できなくても、「なんか変だ」という違和感は言葉にしていい。今回それをやらなかったら、10分の作業のために数日を溶かしていた。
もう一つは、「一応できた」で止めないこと。前回、僕は解決したつもりでいた。でも一番よく使う場所は手つかずのままだった。できたところだけを見ていると、できていないところが視界から消える。
そして、土台は裏切らないということ。二日かけたものが、10分の中に生きていた。重い一回目を払っておくと、二回目からは驚くほど軽い。
前回の記事の最後に、僕はこう書いた。「切り替えが面倒」という不便を直した話ではなく、面倒くささのせいでやらなくなっていたことを取り戻す話だった、と。
今回は、その続きだ。取り戻したつもりで、まだ半分残っていた。それに気づけたのは、もう一度「これ、できないの?」と聞いたからだった。
聞くのはタダだ。でも聞かないと、何も起きない。
前回の記事
AIへ渡す手順書
右上の「コピー」を押して、そのまま Claude(Claude Code)に貼り付けてください。記事と同じことを、手順どおりに進めてくれます。パソコンの環境によって、途中で確認や操作をお願いされることがあります。
# 作業手順書:Google アカウントを複数、Claude Code(とデスクトップアプリ)に常時つなぐ
> この文章は、ユーザーが CLAUDE CODE CLUB の記事(「アカウントの切り替えを、やめた」「今度は、10分で終わった。」「Google アカウントを複数、Claude に常時つなぐ手順」のいずれか)の末尾からコピーし、あなた(Claude)に貼り付けたものです。人間向けの解説ではなく、**あなたが実行するための作業手順書**です。
> 出典:https://blog.claudecodeclub.jp/posts/stop-switching-accounts / https://note.com/mosir/n/nfe06dc1ef976
---
## 0. Claude Code へ(最初に必ず読む)
あなた(Claude Code)は、ユーザーのパソコンに **google_workspace_mcp** を導入し、ユーザーの Google アカウントを **複数同時に** Claude Code から使えるようにする。必要なら Claude デスクトップアプリにも同じ設定を写す。
### 実行環境の確認(最優先)
- この手順はコマンド実行と設定ファイルの書き換えを伴う。あなたが **Claude Code(ターミナル、IDE 拡張、またはデスクトップアプリの Code タブ)** として動いていて、シェルとファイル書き込みが使えることを確認する。
- claude.ai のチャット欄やスマホアプリなど、ローカルのコマンドを実行できない環境で貼られた場合は、**何も実行せず**、ユーザーに「この手順書は Claude Code(デスクトップアプリの Code タブ、またはターミナルの `claude`)に貼り直してください」と短く伝えて止まる。
### 守ること
1. **秘密の値を画面に出さない。** OAuth クライアント ID・クライアントシークレット・トークンは、チャットへの表示・ログ出力・コミットをしない。読むときは変数名だけ表示し、値は伏せる。
2. **人間にしかできない操作は、ユーザーに頼む。** Google へのログイン、Google Cloud Console の操作(ブラウザ操作ツールが無い場合)、OAuth 同意画面での「許可」。頼むときは「何を・どこで・何を押すか」を1つずつ具体的に書く。
3. **既存の設定ファイルを書き換える前に、必ずバックアップを取る。**(`~/.claude.json`、デスクトップアプリの `claude_desktop_config.json`)
4. **手順ごとに確認してから次へ進む。** 各手順の「確認」が通らなければ、先に進まず「ハマりどころ」を見る。
5. ユーザーへの説明は、ユーザーの言語で、専門用語を避けて短く。
### 最初にユーザーへ聞くこと(まとめて1回で)
- つなぎたい Google アカウントのメールアドレス(すべて)
- それぞれの呼び名(例:「個人」「仕事」「宿」)。後で「仕事のメール見て」と言えるようにするため
- 何も言わないときに使う既定のアカウント
- 使いたいサービス(既定:Gmail・Google ドライブ・Google カレンダー)
- Claude デスクトップアプリのチャット欄でも使いたいか
---
## 1. 環境を調べる
OS を判定し、以降のコマンドを OS に合わせて使い分ける。
| 項目 | macOS | Windows |
|---|---|---|
| シェル | zsh / bash | PowerShell |
| 判定 | `uname -s` が `Darwin` | `$env:OS` が `Windows_NT` |
| ホーム | `~` | `$env:USERPROFILE` |
| 認証の保存先 | `~/.google_workspace_mcp/credentials/` | `%USERPROFILE%\.google_workspace_mcp\credentials\` |
| デスクトップアプリの設定 | `~/Library/Application Support/Claude/claude_desktop_config.json` | `%APPDATA%\Claude\claude_desktop_config.json` |
確認すること:
- `claude --version` が通る(Claude Code が入っている)
- `uv --version` / `uvx --version` が通るか(通らなければ手順 2)
---
## 2. uv を入れる(無い場合だけ)
google_workspace_mcp は `uvx` で起動する。
- **macOS**(Homebrew がある場合)
```bash
brew install uv
```
Homebrew が無い場合:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
- **Windows**(PowerShell)
```powershell
winget install --id=astral-sh.uv -e
```
winget が使えない場合:
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
**確認**:新しいターミナルで `uvx --version` が通る。あわせて `uvx` の絶対パスを控える(macOS:`which uvx`、Windows:`(Get-Command uvx).Source`)。デスクトップアプリの設定で使う。
---
## 3. Google Cloud Console の準備(ユーザーと一緒に)
ブラウザ操作ツール(Claude in Chrome など)があれば画面を一緒に進めてよい。無ければ、下の手順をそのままユーザーに渡し、1ステップずつ終わったか確認する。ログインはユーザーが行う。
1. https://console.cloud.google.com を開き、新しいプロジェクトを作る(名前は自由。例:`workspace-mcp`)。
2. 「API とサービス」→「ライブラリ」で次を検索し、それぞれ「有効にする」:
- Gmail API
- Google Drive API
- Google Calendar API
(ユーザーが他のサービスも使うなら、そのAPIも)
3. 「API とサービス」→「OAuth 同意画面」(表示によっては「Google Auth Platform」→「ブランディング/対象」)
- アプリ名:自由(例:`Workspace MCP`)
- ユーザーの種類(対象):**外部**
- **公開ステータス:本番環境(In production)にする** ← 最重要(理由はハマりどころ 1)
4. 「認証情報」→「認証情報を作成」→「OAuth クライアント ID」
- アプリケーションの種類:**デスクトップアプリ**
- 作成すると **クライアント ID** と **クライアントシークレット** が表示される。
- **シークレットはこの画面でしか見られない。** その場で次の手順のファイルに保存するよう、ユーザーに強く伝える。
### 秘密の値の受け渡し
チャットに貼ってもらわない。ユーザーに次のファイルを作ってもらい、2つの値を書いて保存してもらう。
- macOS:`~/.config/workspace-mcp/secrets.env`
- Windows:`%USERPROFILE%\.config\workspace-mcp\secrets.env`
```
GOOGLE_OAUTH_CLIENT_ID=ここにクライアントID
GOOGLE_OAUTH_CLIENT_SECRET=ここにクライアントシークレット
```
あなたはこのファイルを読み込んで使う。値は表示しない(存在と、2行とも空でないことだけ確認する)。
---
## 4. Claude Code に登録する(全プロジェクト共通)
`secrets.env` の値を使い、ユーザースコープで登録する。`USER_GOOGLE_EMAIL` には既定のアカウントを入れる。
- **macOS**
```bash
set -a; source ~/.config/workspace-mcp/secrets.env; set +a
claude mcp add -s user google-workspace \
-e GOOGLE_OAUTH_CLIENT_ID="$GOOGLE_OAUTH_CLIENT_ID" \
-e GOOGLE_OAUTH_CLIENT_SECRET="$GOOGLE_OAUTH_CLIENT_SECRET" \
-e OAUTHLIB_INSECURE_TRANSPORT=1 \
-e USER_GOOGLE_EMAIL=既定のアドレス \
-- uvx workspace-mcp --tools gmail drive calendar --tool-tier extended
```
- **Windows**(PowerShell)
```powershell
Get-Content "$env:USERPROFILE\.config\workspace-mcp\secrets.env" | ForEach-Object {
if ($_ -match '^\s*([^#=]+)=(.*)$') { Set-Item "env:$($matches[1].Trim())" $matches[2].Trim() }
}
claude mcp add -s user google-workspace `
-e GOOGLE_OAUTH_CLIENT_ID="$env:GOOGLE_OAUTH_CLIENT_ID" `
-e GOOGLE_OAUTH_CLIENT_SECRET="$env:GOOGLE_OAUTH_CLIENT_SECRET" `
-e OAUTHLIB_INSECURE_TRANSPORT=1 `
-e USER_GOOGLE_EMAIL=既定のアドレス `
-- uvx workspace-mcp --tools gmail drive calendar --tool-tier extended
```
補足:
- `--tools` は使うサービスだけに絞る(全部入れると重くなる)。
- `--tool-tier` は `core`(基本だけ)/`extended`(下書き・ラベル・予定の編集なども)/`complete`。迷ったら `extended`。
- `OAUTHLIB_INSECURE_TRANSPORT=1` は、認証の戻り先が自分のパソコン(`http://localhost`)のために必要。
**確認**:`claude mcp list` で `google-workspace` が `Connected`。ユーザーに Claude Code を再起動してもらう。
---
## 5. アカウントごとに許可する(アカウントの数だけ)
1. 既定のアカウントで、読み取りだけの軽い操作を1回行う(例:今日のカレンダーの予定一覧)。
2. 認証が必要だと返ってきたら、表示された **認証用の URL をユーザーに渡し、ふだん使っているブラウザで開いてもらう。**
3. ユーザーが Google にログインし、「このアプリは Google で確認されていません」が出たら「詳細」→「(アプリ名)に移動」→ 権限をすべてチェック →「続行」。
4. 「認証が完了しました」の画面が出たら、元の操作をもう一度実行し、結果が返ることを確認する。
5. 残りのアカウントも、`user_google_email` にそのアドレスを指定して同じことを **1件ずつ順番に** 行う(同時に進めると戻り先が混ざる)。
**確認**:すべてのアカウントで、カレンダー一覧などの読み取りが成功する。認証ファイルが認証の保存先にアカウント数ぶんできている(中身は開かない)。
---
## 6. 呼び名を覚えさせる
ユーザーのグローバル指示ファイルに追記する(無ければ作る)。
- macOS:`~/.claude/CLAUDE.md`
- Windows:`%USERPROFILE%\.claude\CLAUDE.md`
追記する内容の例:
```markdown
## Google アカウントの呼び名(google-workspace MCP)
| 呼び名 | アカウント |
|---|---|
| 個人/指定なし | personal@example.com |
| 仕事 | work@example.com |
- Gmail / ドライブ / カレンダーの操作では、呼び名に対応するアドレスを `user_google_email` に指定する。指定が無ければ「個人」。
- 1回の依頼で複数アカウントをまたいでよい(例:「個人と仕事、両方のカレンダーの今週分」)。
```
---
## 7.(任意)フォルダごとに既定のアカウントを変える
特定のフォルダで作業するときは別のアカウントを既定にしたい場合、そのフォルダで **ローカルスコープ** で登録し直す。内容は手順 4 と同じで、`-s local` と `USER_GOOGLE_EMAIL` だけ変える。
```bash
cd その作業フォルダ
# 手順 4 のコマンドの -s user を -s local に、USER_GOOGLE_EMAIL をそのフォルダ用のアドレスにして実行
```
認証は手順 5 で済んでいるので、やり直しは不要。
---
## 8.(任意)Claude デスクトップアプリのチャット欄でも使う
デスクトップアプリは Claude Code の設定を読まないが、**自分専用の設定ファイル**に同じ内容を書けば使える。認証はやり直し不要(同じパソコンの認証ファイルをそのまま使う)。
1. 設定ファイル(手順 1 の表)を **バックアップ** する。無ければ新しく作る。
2. `mcpServers` に次を追加する(既存のキーは消さない)。`command` は手順 2 で控えた `uvx` の **絶対パス**にする(デスクトップアプリは PATH を引き継がないことがある)。
```json
{
"mcpServers": {
"google-workspace": {
"command": "uvx の絶対パス",
"args": ["workspace-mcp", "--tools", "gmail", "drive", "calendar", "--tool-tier", "extended"],
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "(secrets.env の値)",
"GOOGLE_OAUTH_CLIENT_SECRET": "(secrets.env の値)",
"OAUTHLIB_INSECURE_TRANSPORT": "1",
"USER_GOOGLE_EMAIL": "既定のアドレス"
}
}
}
}
```
- 値は `secrets.env` から読み込んで書き込む。書き込んだ内容を画面に表示しない。
- Windows の `command` はバックスラッシュを `\\` に重ねる(例:`C:\\Users\\you\\.local\\bin\\uvx.exe`)。
3. ユーザーにデスクトップアプリを **完全に終了して** 起動し直してもらう(macOS:⌘Q、Windows:タスクトレイのアイコンから終了)。
4. 初回はローカル MCP の承認ダイアログが出るので、ユーザーに「許可」を押してもらう。
注意:デスクトップアプリのチャット欄には「今いるフォルダ」が無いため、手順 7 のフォルダ別切り替えは効かない。呼び名で指定する運用になる、とユーザーに伝える。
---
## 9. 仕上げの確認(ユーザーに見せる)
- 「(既定のアカウント)の今日の予定を教えて」→ 返る
- 「(別の呼び名)の未読メールを3件」→ 返る
- 「(呼び名A)と(呼び名B)、両方のカレンダーの今週分をまとめて」→ 1回でまとまって返る
最後に、やったこと・保存した場所(`secrets.env`、認証の保存先、書き換えた設定ファイルとバックアップ)を短く報告する。
---
## ハマりどころ(症状 → 原因 → 対処)
1. **1週間後に急に認証が切れる** → OAuth 同意画面の公開ステータスが「テスト」のまま。テスト中は認証が 7 日で切れる → 「本番環境」に変更し、各アカウントで手順 5 をやり直す。
2. **クライアントシークレットが見られない** → 作成直後にしか表示されない仕様 → 認証情報の画面で「シークレットを追加」から新しく発行し、`secrets.env` を更新する。
3. **ログインしたのに「ログインしていない」扱いになる** → ブラウザのプロファイル(または別のブラウザ)が違う → 認証用 URL を、ユーザーがそのアカウントでログイン済みのブラウザ/プロファイルで開いてもらう。
4. **「このアプリは Google で確認されていません」と出る** → 自作のアプリを審査に出していないだけ。本番環境にすると出る。正常 → 「詳細」から進む。
5. **「Session is already bound to a different user」と出る** → 複数アカウントを続けて認証したときに出ることがある。トークン自体は保存されていることが多い → 元の操作を再実行して確認する。
6. **デスクトップアプリで起動しない** → `command` が `uvx` だけで、パスが通っていない → 絶対パスに変える。JSON の書式ミスも確認する(カンマ、`\\`)。
7. **`claude mcp list` で Failed** → `uvx` が見つからない、または初回のダウンロード中 → 新しいターミナルで `uvx workspace-mcp --help` を一度実行してから再確認する。
---
## 参考
- google_workspace_mcp:https://github.com/taylorwilsdon/google_workspace_mcp
- uv:https://docs.astral.sh/uv/
- Google Cloud Console:https://console.cloud.google.com
- Claude Code の MCP 設定:https://docs.claude.com/en/docs/claude-code/mcp
ファイルで渡したい場合:google-multi-account-mcp.md をダウンロード