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側です。

この仕組みを使うと、ログアウトしなくてもアカウントを切り替えられます。

手順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を開きます。

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設定で見落としやすいポイント

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

いいえ。

`codex1`と`codex2`は、自分の`.zshrc`に追加するaliasです。

中身はそれぞれ`CODEX_HOME`を変えて`codex`を起動しているだけです。

3つ以上のCodexアカウントも切り替えられますか?

同じ考え方で増やせます。

3つ目を作るなら`~/.codex3`を作って、`.zshrc`に次のaliasを追加します。

~~~sh 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を選ぶだけです。