Codexで個人用と仕事用のアカウントを使い分けたいとき、毎回ログアウトしてログインし直す運用はかなり面倒です。
設定ファイルや認証情報を触るため、どこを分ければ安全なのか分かりにくいところもあります。
この記事では、MacのzshでCODEX_HOMEをアカウントごとに分け、codex1とcodex2のような短いコマンドで起動先を切り替える方法をまとめます。
まず結論:CODEX_HOMEを分けるとCodexの複数アカウントを切り替えられる
Codexで複数アカウントを使い分けたい場合は、CODEX_HOMEをアカウントごとに分けます。
完成後はこうです。
codex1
codex2
codex1は1つ目のログイン情報、codex2は2つ目のログイン情報でCodexを起動します。
個人用ならcodex1、仕事用ならcodex2というように、起動する入口を分けておく形です。
仕組み:Codexのログイン情報はCODEX_HOMEごとに保存される
先に、今回使う仕組みだけ押さえておきます。
Codexでログインすると、そのログイン情報は自分のMacの中に保存されます。
Codexを起動したときにログインし直さなくていいのは、この保存済みの情報を読んでいるからです。
今回使うのがCODEX_HOMEです。
CODEX_HOMEは、Codexが設定やログイン情報を見に行く場所です。
何も指定しなければ、通常は~/.codexが使われます。
起動時にCODEX_HOMEを変えると、Codexは別の場所を見に行きます。
CODEX_HOME=$HOME/.codex1 codex
CODEX_HOME=$HOME/.codex2 codex
CODEX_HOME=$HOME/.codex1で起動すれば、~/.codex1の設定とログイン情報を読みます。
CODEX_HOME=$HOME/.codex2で起動すれば、参照先は~/.codex2側です。
この仕組みで、Codexのアカウント切り替えをログアウトなしで実現します。
手順1:アカウント別にCodexの保存フォルダを作る
Codex用の保存場所を2つ作ります。
ターミナルで次を実行します。
mkdir -p ~/.codex1 ~/.codex2
chmod 700 ~/.codex1 ~/.codex2
ここで作るのは、次の2つのフォルダです。
~/.codex1
~/.codex2
~/.codex1は1つ目のアカウント用、~/.codex2は2つ目のアカウント用として使います。
chmod 700を付けると、中身を見られるのは自分だけになります。
あとでログイン情報が入る場所なので、最初に権限を絞っておくと扱いやすいです。
手順2:各フォルダにconfig.tomlを置いて認証情報をファイル保存にする
2つのフォルダにconfig.tomlを置きます。
config.tomlは、Codexに「ログイン情報をどこへ保存するか」を伝える設定ファイルです。
次を実行します。
cat > ~/.codex1/config.toml <<'EOF'
cli_auth_credentials_store = "file"
EOF
cat > ~/.codex2/config.toml <<'EOF'
cli_auth_credentials_store = "file"
EOF
cli_auth_credentials_store = "file"で、ログイン情報をファイルに保存します。
この設定を入れておくと、ログイン後にそれぞれのフォルダ内へauth.jsonが作られます。
ログイン後は、だいたい次の形です。
~/.codex1/
config.toml
auth.json
~/.codex2/
config.toml
auth.json
この時点でauth.jsonがなくても問題ありません。
まだログインしていないので、ここでは作られていません。
auth.jsonは、あとでcodex1 loginやcodex2 loginをしたタイミングで作られます。
手順3:zshrcにcodex1/codex2の切り替えコマンドを追加する
このままだと毎回こんなふうに長く打つ必要があります。
CODEX_HOME=$HOME/.codex1 codex
短い名前で起動できるように、ここでcodex1とcodex2を作ります。
codex1とcodex2は、Codexにもともと用意されている名前ではありません。
自分の.zshrcに追加するショートカット名です。
.zshrcを開きます。
テキストエディターで開いてもOKです。
nano ~/.zshrc
一番下に、次の2行を追加します。
alias codex1='CODEX_HOME=$HOME/.codex1 codex'
alias codex2='CODEX_HOME=$HOME/.codex2 codex'
これで短く起動できます。
codex1 -> ~/.codex1を使ってCodexを起動する
codex2 -> ~/.codex2を使ってCodexを起動する
codex1と打てば1つ目の保存場所、codex2と打てば2つ目の保存場所を使います。
注意:zshrcのalias設定でハマりやすいポイント
僕がハマったのは、設定内容そのものではなく.zshrcの書き方でした。
原因はこれでした。
}alias codex1=...
関数の閉じかっこ}とaliasが同じ行につながっていました。
たとえば、こういう関数があるとします。
zai() {
ANTHROPIC_AUTH_TOKEN="AUTH_TOKEN" \
ANTHROPIC_BASE_URL="https://api.z.ai/api/anthropic" \
API_TIMEOUT_MS="3000000" \
ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.1" \
ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.1" \
claude "$@"
}alias codex1='CODEX_HOME=$HOME/.codex1 codex'
alias codex2='CODEX_HOME=$HOME/.codex2 codex'
見る場所は、}とaliasの間の改行です。
ここがつながると、シェルの読み込み時にエラーが出ます。
編集したら、読み込み直す前に構文をチェックします。
zsh -n ~/.zshrc
何も表示されなければOKです。
問題なければ反映します。
source ~/.zshrc
手順4:codex1/codex2で別々のCodexアカウントにログインする
別々にログインします。
1つ目のアカウントでログインします。
codex1 login
ブラウザが開いたら、1つ目として使いたいアカウントを選びます。
続けて、2つ目のアカウントでもログインします。
codex2 login
ブラウザが開いたら、2つ目として使いたいアカウントを選びます。
これで、codex1とcodex2のログイン状態が分かれます。
普段の起動は次のどちらかです。
codex1
codex2
ログイン状態を確認したいときは、次のコマンドを使います。
codex1 login status
codex2 login status
使いたいアカウントに合わせて、codex1かcodex2を選びます。
注意:Codexのauth.jsonはパスワード扱いで管理する
auth.jsonにはアクセストークンが含まれます。
ログイン状態を保つための情報です。
auth.jsonはパスワードのように扱い、コミットしたり共有したりしないようにします。
ログイン後にauth.jsonができたら、権限を固めておきます。
chmod 600 ~/.codex1/auth.json ~/.codex2/auth.json
これは、自分だけが読み書きできる権限です。
また、auth.jsonはGit管理しているフォルダの中に置かない方が安全です。
今回のようにホームディレクトリ直下の~/.codex1と~/.codex2に置いておけば、うっかりプロジェクトへ混ざる可能性を減らせます。
よくある質問
codex1とcodex2はCodex公式のコマンドですか?
いいえ。
codex1とcodex2は、自分の.zshrcに追加するaliasです。
中身はそれぞれCODEX_HOMEを変えてcodexを起動しているだけです。
3つ以上のCodexアカウントも切り替えられますか?
同じ考え方で増やせます。
3つ目を作るなら~/.codex3を作って、.zshrcに次のaliasを追加します。
alias codex3='CODEX_HOME=$HOME/.codex3 codex'
あとはcodex3 loginでログインすれば、3つ目の保存場所を使えます。
Mac以外でも同じ方法は使えますか?
考え方は同じです。
ただし、この記事ではMacのzshを前提にしています。
bashやWindows環境では、環境変数やショートカットの書き方をその環境に合わせて調整してください。
まとめ:ログアウトせず別アカウントで起動できる
Codexで複数アカウントを使い分けたいなら、CODEX_HOMEをアカウントごとに分けて、codex1とcodex2の入口を作れば十分です。
やることは次の3つです。
~/.codex1と~/.codex2を作る- それぞれに
config.tomlを置く .zshrcにcodex1とcodex2のaliasを追加する
最後の状態はこの形です。
codex1 -> ~/.codex1/config.tomlと~/.codex1/auth.jsonを使う
codex2 -> ~/.codex2/config.tomlと~/.codex2/auth.jsonを使う
設定できたら、codex1 loginとcodex2 loginで別々のアカウントにログインします。
その後、次のコマンドでログイン状態が分かれているか確認します。
codex1 login status
codex2 login status
うまく動かない場合は、最初から全部やり直す前に.zshrcのalias行とzsh -n ~/.zshrcの結果を確認します。
特に、関数の閉じかっこ}とaliasが同じ行につながっていないかを見ると切り分けやすいです。
普段は使いたいアカウントに合わせてcodex1かcodex2を選ぶだけです。