Codexで個人用と仕事用のアカウントを使い分けたいとき、毎回ログアウトしてログインし直す運用はかなり面倒です。

設定ファイルや認証情報を触るため、どこを分ければ安全なのか分かりにくいところもあります。

この記事では、MacのzshでCODEX_HOMEをアカウントごとに分け、codex1codex2のような短いコマンドで起動先を切り替える方法をまとめます。

まず結論: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 logincodex2 loginをしたタイミングで作られます。

手順3:zshrcにcodex1/codex2の切り替えコマンドを追加する

このままだと毎回こんなふうに長く打つ必要があります。

CODEX_HOME=$HOME/.codex1 codex

短い名前で起動できるように、ここでcodex1codex2を作ります。

codex1codex2は、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つ目として使いたいアカウントを選びます。

これで、codex1codex2のログイン状態が分かれます。

普段の起動は次のどちらかです。

codex1
codex2

ログイン状態を確認したいときは、次のコマンドを使います。

codex1 login status
codex2 login status

使いたいアカウントに合わせて、codex1codex2を選びます。

注意: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公式のコマンドですか?

いいえ。

codex1codex2は、自分の.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をアカウントごとに分けて、codex1codex2の入口を作れば十分です。

やることは次の3つです。

  • ~/.codex1~/.codex2を作る
  • それぞれにconfig.tomlを置く
  • .zshrccodex1codex2のaliasを追加する

最後の状態はこの形です。

codex1 -> ~/.codex1/config.tomlと~/.codex1/auth.jsonを使う
codex2 -> ~/.codex2/config.tomlと~/.codex2/auth.jsonを使う

設定できたら、codex1 logincodex2 loginで別々のアカウントにログインします。

その後、次のコマンドでログイン状態が分かれているか確認します。

codex1 login status
codex2 login status

うまく動かない場合は、最初から全部やり直す前に.zshrcのalias行とzsh -n ~/.zshrcの結果を確認します。

特に、関数の閉じかっこ}aliasが同じ行につながっていないかを見ると切り分けやすいです。

普段は使いたいアカウントに合わせてcodex1codex2を選ぶだけです。