[Claude Code] 1台のPCで複数アカウントを使う(ディレクトリごとの自動切り替え)

2026-06-18 hit count image

1台のPCで仕事用・個人用のClaude Codeアカウントを分けて使う方法を紹介します。CLAUDE_CONFIG_DIRで設定を分離し、macOSのKeychain共有問題をCLAUDE_CODE_OAUTH_TOKENで解決したうえで、作業ディレクトリに応じてアカウントが自動的に切り替わるように.zshrcを構成します。

generative_ai

概要

1台のPCで仕事用アカウントと個人用アカウントを併用したい場合があります。たとえば、会社のディレクトリでは会社のサブスクリプションで、個人ブログやサイドプロジェクトのディレクトリでは個人のサブスクリプションでClaude Codeを使いたい、というケースです。

このとき最も気になるのが、間違ったアカウントで作業してしまう事故です。個人プロジェクトを会社アカウントで作業してしまったり、その逆だったり。本記事では、次の順序で2つのアカウントを安全に分離する方法を整理します。

  1. CLAUDE_CONFIG_DIRでアカウントごとに設定ディレクトリを分離する
  2. macOSの認証トークン共有問題をCLAUDE_CODE_OAUTH_TOKENで解決する
  3. 作業ディレクトリに応じてアカウントが自動的に切り替わるように.zshrcを構成する

例では会社アカウントをデフォルト(~/.claude)とし、~/personal配下のディレクトリでのみ個人アカウントに切り替えます。パスは各自の環境に合わせて変更してください。

1台のPCで複数アカウントを使えるのか?

結論から言うと使えます。ただしClaude Codeに「アカウント切り替え」機能が別途あるわけではなく、次の2つの方式のいずれかを使います。

  • 同じ設定ディレクトリを共有する: /logoutしてから別のアカウントで再ログインする方式。一度に1つのアカウントだけが有効になります。
  • 設定ディレクトリを分離する: CLAUDE_CONFIG_DIR環境変数でアカウントごとに別のディレクトリを指定し、認証情報と設定を完全に分離する方式。

毎回ログアウト・ログインを繰り返すのは面倒でミスも起きやすいので、本記事では後者のディレクトリ分離方式を使います。

settings.jsonは複数アカウントで共有されるのか?

settings.jsonアカウントではなくディレクトリに紐づきます。つまり、どのアカウントでログインしているかに関係なく、次の場所をそのまま使います。

ファイル範囲場所
ユーザー全体の設定すべてのプロジェクト~/.claude/settings.json
プロジェクト設定リポジトリ(チーム共有).claude/settings.json
ローカル設定個人用(gitignore対象).claude/settings.local.json

したがってデフォルトの状態では、複数のアカウントが同じ~/.claude/settings.jsonを共有することになります。アカウントごとに異なる全体設定を使いたい場合は、設定ディレクトリ自体を分離する必要があります。

CLAUDE_CONFIG_DIRで設定ディレクトリを分離する

CLAUDE_CONFIG_DIR環境変数を指定すると、Claude Codeはそのディレクトリを設定のルートとして使います。settings.json、アカウントのメタ情報(.claude.json)、MCP設定、キャッシュ、履歴などがすべてその配下に保存されます。

# 個人アカウントで実行
export CLAUDE_CONFIG_DIR="$HOME/.claude-personal"
claude

これで個人アカウントは~/.claude-personal/settings.jsonを、会社アカウントはデフォルトの~/.claude/settings.jsonを使うようになり、設定が分離されます。

ディレクトリは初回実行・ログイン時に自動的に作成されるため、事前に作っておく必要はありません。

macOSの落とし穴 — 認証トークンはKeychainを共有する

ここでmacOSユーザーは1つの落とし穴に直面します。公式ドキュメントによると、CLAUDE_CONFIG_DIRによる.credentials.jsonの分離はLinuxとWindowsでのみ動作します。

macOSでは認証トークンが常に単一のKeychain項目(Claude Code-credentials)に保存され、CLAUDE_CONFIG_DIRの影響を受けません。実際にKeychainを確認すると、次のように項目が1つだけ存在します。

security find-generic-password -s "Claude Code-credentials" | grep -E "svce|acct"
#     "acct"<blob>="ユーザー名"
#     "svce"<blob>="Claude Code-credentials"

つまり、設定ディレクトリだけを分離してもsettings.jsonとアカウントのメタ情報は分かれますが、実際のログイントークンは依然として共有されます。2つ目のアカウントでログインした瞬間に1つ目のアカウントのトークンを上書きしてしまい、ディレクトリを移動するたびに再ログインが必要な状態になります。

CLAUDE_CODE_OAUTH_TOKENでアカウントを分離する

macOSでこの問題を解決する公式の方法が、CLAUDE_CODE_OAUTH_TOKEN環境変数です。この変数が設定されているとKeychainより優先されるため、トークンの衝突や再ログインなしにアカウントを分離できます。

戦略は次のとおりです。

  • 会社アカウント: デフォルトの~/.claude + 既存のKeychainログインをそのまま使う(別途トークン不要)
  • 個人アカウント: ~/.claude-personal + CLAUDE_CODE_OAUTH_TOKENで認証する

CLAUDE_CODE_OAUTH_TOKENはKeychainより優先されるので、会社アカウントのKeychainログインと衝突しません

まず個人アカウントの長期トークンを発行します。次のコマンドはブラウザログインを経て、1年間有効なOAuthトークンを出力します。

CLAUDE_CONFIG_DIR="$HOME/.claude-personal" claude setup-token

トークンを.zshrcに平文で書いておくのはセキュリティ上よくないので、macOSのKeychainに別項目として保存しておき、必要なときに読み出す方式を使います。

security add-generic-password -U -a "$USER" -s claude-token-personal -w '<発行されたトークン>'

トークンを使うとAPI料金が請求される?

claude setup-tokenが作るトークンは、サブスクリプションプラン(Pro/Max/Team/Enterprise)に紐づくOAuthトークンです。普段/loginでログインして使うのと同じ方式であり、APIのようにトークンごとの追加課金は発生しません

認証方式課金サブスクリプション要否
CLAUDE_CODE_OAUTH_TOKEN(setup-token)サブスクリプションの利用枠(追加課金なし)Pro/Max以上
/login(対話的)サブスクリプションの利用枠Pro/Max以上
ANTHROPIC_API_KEY従量課金(トークンごと)不要(Consoleクレジット)

ただしsetup-tokenPro/Max以上の有料サブスクリプションがないと発行できません。無料アカウントでは動作しません。

作業ディレクトリに応じてアカウントを自動切り替えする

ここが本題です。毎回環境変数を手動で設定する代わりに、現在のディレクトリに応じてアカウントが自動的に選択されるようにすれば、間違ったアカウントで作業する事故を防げます。

zshにはディレクトリを移動するたびに実行されるchpwdフックがあります。これを使って、現在のパスが~/personal配下なら個人アカウントを、それ以外なら会社アカウントを使うように環境変数を自動的に切り替えます。

.zshrcの設定

次の内容を~/.zshrcに追加します。

# Claude Code - 作業ディレクトリに応じてアカウントを自動分離
#   personal/* -> 個人アカウント (~/.claude-personal, Keychain: claude-token-personal)
#   それ以外    -> 会社/デフォルトアカウント (~/.claude, 既存のKeychainログイン)
_claude_pick_account() {
  case "$PWD/" in
    "$HOME/personal/"*)
      export CLAUDE_CONFIG_DIR="$HOME/.claude-personal"
      local tok; tok=$(security find-generic-password -s claude-token-personal -w 2>/dev/null)
      if [ -n "$tok" ]; then
        export CLAUDE_CODE_OAUTH_TOKEN="$tok"
      else
        unset CLAUDE_CODE_OAUTH_TOKEN   # トークン未登録時は共有Keychainログインにフォールバック
      fi
      ;;
    *)
      # それ以外 -> 会社/デフォルトアカウント: デフォルトの ~/.claude + 既存のKeychainログイン
      export CLAUDE_CONFIG_DIR="$HOME/.claude"
      unset CLAUDE_CODE_OAUTH_TOKEN
      ;;
  esac
}
autoload -U add-zsh-hook
add-zsh-hook chpwd _claude_pick_account
_claude_pick_account

最後の行で_claude_pick_accountを直接1回呼び出している理由は、chpwdフックがディレクトリを移動したときだけ動作するためです。新しいターミナルが特定のディレクトリで開始される場合にも正しいアカウントが選択されるよう、シェル起動時に1回実行しておきます。

個人アカウントのトークンをまだKeychainに登録していない場合、~/personal配下でも会社アカウント(Keychainログイン)に安全にフォールバックします。

実行時にアクティブなアカウントを表示する

自動切り替えだけでも十分ですが、今どのアカウントで実行されているかが一目で分かるとより安心です。claudeコマンドをラップする関数を追加し、実行直前にアクティブなアカウントを表示するようにします。

# claude 実行時に現在のアカウント + トークン適用状況を表示
claude() {
  local label dir="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
  case "$PWD/" in
    "$HOME/personal/"*) label="personal" ;;
    *)                  label="work (デフォルト)" ;;
  esac
  local auth
  if [ -n "$CLAUDE_CODE_OAUTH_TOKEN" ]; then
    auth="%F{green}personal token 適用%f"
  else
    auth="%F{green}Keychainログイン(work)%f"
  fi
  print -P "%F{cyan}▶ Claudeアカウント: %B${label}%b%f  [${auth}%F{cyan}]  (CLAUDE_CONFIG_DIR=${dir})%f"
  command claude "$@"
}

これでclaudeを実行すると、次のようにアクティブなアカウントが表示されます。

▶ Claudeアカウント: work (デフォルト)  [Keychainログイン(work)]  (CLAUDE_CONFIG_DIR=/Users/ユーザー名/.claude)
▶ Claudeアカウント: personal  [personal token 適用]  (CLAUDE_CONFIG_DIR=/Users/ユーザー名/.claude-personal)

注意 — アカウントはclaude実行時点で固定される

1つ重要な点があります。CLAUDE_CODE_OAUTH_TOKENCLAUDE_CONFIG_DIRは、claudeプロセスが起動するときに一度だけ読み込まれます。したがってアカウントはclaudeを実行した瞬間のディレクトリで決まり、セッションが終わるまで固定されます。

たとえば、会社のディレクトリでClaude Codeを起動した状態(会社アカウント)で、セッションの途中に「個人ブログの記事を書いて」と指示するとどうなるでしょうか。

会社アカウントのまま個人ブログの作業が実行されます。セッション中にClaudeが別のディレクトリのファイルを編集しても、すでに実行中のプロセスのアカウントは変わりません。chpwdフックは対話的なシェルにのみ影響し、実行中のclaudeプロセスには関与しないためです。

したがって、会社の作業と個人の作業はそれぞれのディレクトリで別々のセッション(別々のターミナル)として実行する必要があります。

やりたいことやるべきこと
会社の業務会社のディレクトリでclaudeを実行
個人ブログ・サイドプロジェクト新しいターミナルで~/personalに移動してからclaudeを実行

先ほど追加した実行時の表示メッセージが、まさにこのミスを防ぐ安全装置の役割を果たします。

設定の適用

設定が終わったら、次の順序で適用して確認します。

# 1)(個人アカウント)トークンを発行してKeychainに保存
CLAUDE_CONFIG_DIR="$HOME/.claude-personal" claude setup-token
security add-generic-password -U -a "$USER" -s claude-token-personal -w '<発行されたトークン>'

# 2) 設定を適用
source ~/.zshrc

# 3) ディレクトリごとに確認
cd ~/personal && claude   # ▶ personal
cd ~        && claude      # ▶ work (デフォルト)

各ディレクトリでclaudeを実行した際に意図したアカウントが表示されれば正常です。

完了

これで1台のPCで仕事用・個人用のClaude Codeアカウントを分離し、作業ディレクトリに応じて自動的に切り替わるように構成する方法を見てきました。要点をまとめると次のとおりです。

  • settings.jsonはアカウントではなくディレクトリ(CLAUDE_CONFIG_DIR)に紐づく。
  • macOSでは認証トークンがKeychainを共有するため、個人アカウントはCLAUDE_CODE_OAUTH_TOKENで分離する。
  • chpwdフックでディレクトリに応じてアカウントを切り替え、実行時の表示メッセージでミスを防ぐ。
  • アカウントはclaude実行時点で固定されるため、会社と個人の作業は別々のセッションで進める。

複数のアカウントを行き来しながら作業していて、間違ったアカウントでコミットや作業をしてしまった経験があるなら、一度設定しておくだけで大きな安心につながるので、ぜひ試してみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。



SHARE
Twitter Facebook RSS