CLAUDE_CONFIG_DIR を使って Claude Code のプロファイルを使い分けてみた

CLAUDE_CONFIG_DIR を使って Claude Code のプロファイルを使い分けてみた

2026.03.30

背景

Claude Code を使い始めた当初、個人用の Max プランと会社用の従量課金 API ベースのアカウントを使い分けていました。
最初は ~/.claude.json ~/.claude をシンボリックリンクで切り替える運用をしていました。
ただ、複数のセッションを同時に開いているとセッションが ~/.claude.json を書き換えてしまいます。
個人アカウント設定が従量課金側に向くことがありました。

結果として意図しない課金が発生し、CLAUDE_CONFIG_DIR での分離へ切り替えました。

その後、会社でも月額課金のアカウントを利用できるようになりました。
「もうプロファイル管理は不要かな」と思いましたが、permissions.defaultModemodel、MCP サーバーなどを用途別に使い分けたい場面が増えてきました。
さらに MCP ツール定義を必要なものだけコンテキストに含める ENABLE_TOOL_SEARCH が登場して「MCP を全部乗せにしても問題ないのでは」とも思いました。
ただ、サブエージェントに Haiku を使っている場合は Tool Search が利用できないため、結局プロファイル分離を続けています。

CLAUDE_CONFIG_DIR とは

CLAUDE_CONFIG_DIR は Claude Code がユーザー設定の格納先として参照するディレクトリを変更する環境変数です。
デフォルトは ~/.claude/ ですが、この変数を設定すると指定したディレクトリに切り替わります。

CLAUDE_CONFIG_DIR=~/.config/claude/profiles/work claude

これにより、認証情報、settings.json、MCP 設定などがプロファイルごとに分離されます。
デフォルト(CLAUDE_CONFIG_DIR 未設定)では ~/.claude.json~/.claude/ が別々に存在します。
CLAUDE_CONFIG_DIR を指定すると、.claude.json も指定ディレクトリ配下に格納されます。

direnv で自動切り替えする

毎回 CLAUDE_CONFIG_DIR を指定するのも手間なので、direnv を使ってディレクトリ移動で自動的にプロファイルが切り替わるようにしています。

リポジトリの置き場が ${HOME}/src/github.com/{org}/{repo} という構成なので、org 単位で .envrc を書いています。

# ~/src/github.com/classmethod/.envrc
export CLAUDE_CONFIG_DIR=~/.config/claude/profiles/classmethod

ラッパースクリプトで使いやすくする

用途によってプロファイルを切り替えたいケースがあります。
そこでプロファイル名だけ指定するラッパースクリプトを作っています。

#!/usr/bin/env bash

set -ueo pipefail

claude_profile=${CLAUDE_PROFILE:-""}
while [[ $# -gt 0 ]]; do
  case $1 in
    -P | --profile)
      export claude_profile="$2"
      shift 2
      ;;
    *)
      break
      ;;
  esac
done

if [[ -n ${claude_profile} ]]; then
  case $claude_profile in
    default)
      unset CLAUDE_CONFIG_DIR
      ;;
    *)
      export CLAUDE_CONFIG_DIR="${XDG_CONFIG_HOME:-${HOME}/.config}/claude/profiles/${claude_profile}"
      ;;
  esac
fi

exec claude "$@"

これを claude_wrapper というファイル名で ~/.config/claude/bin/ に置いています。
alias claude="claude_wrapper" として使っています。
プロファイル名だけ受け取ってパスへの展開はスクリプトに任せることで、パスのタイポによる意図しないディレクトリ作成を防いでいます。

プロファイルのディレクトリ構成

~/.config/claude/
├── bin/
│   └── claude_wrapper      # ラッパースクリプト
├── profiles/
│   ├── classmethod/        # 日常作業用
│   │   ├── agents -> ../../shared/agents
│   │   ├── skills -> ../../shared/skills
│   │   ├── projects -> ../../shared/projects
│   │   ├── plugins/        # プロファイル固有のプラグイン(MCP サーバー等の拡張)
│   │   └── settings.json
│   ├── classmethod-aws/    # AWS 作業用
│   ├── classmethod-comms/  # コミュニケーション用
│   │   ├── projects        # shared/projects と分離(プロファイル間でセッション履歴を混在させない)
│   │   └── ...
│   └── privates/           # 別アカウント用(認証情報を完全に分離するため projects も独立)
│       ├── projects
│       └── ...
└── shared/
    ├── agents/
    ├── projects/
    └── skills/

agents、skills はシンボリックリンクで shared/ を参照しています。
プロファイルごとに差別化しているのは settings.jsonplugins/ の内容です。

org 単位の CLAUDE.md・rules・SKILL 共有

プロファイルでは管理しないものとして
組織固有の CLAUDE.md、.claude/rules/*.md、SKILL ファイルは shared/ では管理していません。
代わりに org ディレクトリの .claude/ に置いて共有しています。

~/src/
└── github.com/
    ├── classmethod/
    │   ├── .envrc              # export CLAUDE_CONFIG_DIR=~/.config/claude/profiles/classmethod
    │   ├── .claude/            # org 単位の共有コンテキスト
    │   │   ├── CLAUDE.md       # org 共通のルール・コンテキスト
    │   │   ├── rules/          # org 共通のルール
    │   │   └── skills/         # org 共通のスキル
    │   ├── repo-a/
    │   └── repo-b/
    └── org-a/
        ├── .envrc
        └── .claude/

Claude Code はプロジェクトディレクトリから親ディレクトリへ順に .claude/ を探してコンテキストをロードします。
これを利用して、org ディレクトリに .claude/ を置くことで配下の全リポジトリが自動的に org 共通のルールやスキルを参照できます。
プロファイルの shared/ はツールやモデル設定の共有に使い、プロジェクト的なコンテキストは org ディレクトリ側で管理するという使い分けです。

ENABLE_TOOL_SEARCH との関係

MCP サーバーを複数追加するとツール定義がコンテキストを圧迫する問題がありますが、ENABLE_TOOL_SEARCH を使えば MCP を全部乗せにできると考えていました。

ただし Tool Search は Sonnet 4 以降と Opus 4 以降のみ対応していて、Haiku では利用できません(公式ドキュメント)。
サブエージェントに Haiku を使う場合、プロファイルで MCP の組み合わせを分けるのが現実的な対応です。
そのため基本的には MCP を省いたプロファイルをデフォルトとして、用途に応じて MCP 入りのプロファイルに切り替えています。

プロファイル MCP 構成
classmethod 基本なし
classmethod-aws AWS,自作MCP,...
classmethod-comms Backlog,Slack,GoogleCalendar,...

アカウントの切り替え

複数の Anthropic アカウントや異なるバックエンド LLM を切り替える場合、認証情報もプロファイルごとに分離できます。

Anthropic 互換 API を持つ LLM であれば、Claude Code のバックエンドとして使える場合があります。
ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_MODEL を設定するだけです。
これらをプロファイルの .envrc に書いておくことで、ディレクトリ移動だけでアカウントやバックエンドを切り替えられます。

# ~/src/github.com/privates/.envrc(個人アカウント用)
export CLAUDE_CONFIG_DIR=~/.config/claude/profiles/privates
export ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic
export ANTHROPIC_AUTH_TOKEN=...
export ANTHROPIC_MODEL=...

まとめ

CLAUDE_CONFIG_DIR を使うと認証情報・設定・MCP をプロファイルごとに分離できます。
direnv と組み合わせることで、ディレクトリ移動だけで自動的にプロファイルが切り替わります。
agents や skills はシンボリックリンクで shared/ を参照してプロファイル間で共有できます。
CLAUDE.md や rules は org ディレクトリの .claude/ に置くことで、配下の全リポジトリに自動的に適用できます。
Haiku を使っている間は Tool Search が使えないため、MCP の組み合わせごとにプロファイルを分けるのが現実的な対応です。
複数アカウントや異なるバックエンド LLM の切り替えは、プロファイルの .envrc に環境変数を書くことで対応できます。

この記事をシェアする

FacebookHatena blogX

関連記事