- 個人用と仕事用で、毎回ログアウトして入れ直すのが面倒
- 設定ファイルや認証情報を触るのが怖い
- どこを分ければ安全なのか、最初は分かりにくい
Codexを2アカウントで使い分けたいなら、保存場所を分けるだけで足ります。
Macのzshなら、CODEX_HOMEをアカウントごとに変えて、codex1とcodex2みたいな短いコマンドで切り替えられます。
ターミナルとzsh、Codex CLIの3つが入っていれば準備は整っています。
目次
- ログアウトなしで切り替えるなら、保存場所を2つに分ける
- なぜログアウトしなくていいのか
- もともとの~/.codexはそのまま使える
- 設定手順
- ちゃんと分かれているか確認する
- .zshrcを直したのに動かないとき
- auth.jsonはパスワードと同じ扱い
- よくある質問
- まとめ
ログアウトなしで切り替えるなら、保存場所を2つに分ける
やることは、Codexが設定を読みに行く場所をアカウントごとに分けることです。
分け終わると、起動はこれだけです。
codex1
codex2
codex1は1つ目のログイン情報、codex2は2つ目のログイン情報でCodexを起動します。
個人用はcodex1、仕事用はcodex2。
入口を2つにしておくだけです。
なぜログアウトしなくていいのか
一度ログインすれば、あとはMacの中にログイン情報が残ります。
毎回ブラウザを開かなくていいのは、その保存済みの情報を読んでいるからです。
ただ、デフォルトだとその保存先は1つだけです。
ログイン情報は~/.codexに残る
何も触っていなければ、Codexは~/.codexを見に行きます。
ここにログイン状態が入るので、普通にcodexと打てばそのまま使えます。
CODEX_HOMEを変えると参照先が変わる
今回いじるのはCODEX_HOMEです。
起動時にこの値を変えると、Codexが見に行くフォルダが切り替わります。
CODEX_HOME=$HOME/.codex1 codex
CODEX_HOME=$HOME/.codex2 codex
CODEX_HOME=$HOME/.codex1なら~/.codex1、CODEX_HOME=$HOME/.codex2なら~/.codex2を読みます。
フォルダを分けておけば、ログアウトなしでアカウントを切り替えられます。
もともとの~/.codexはそのまま使える
~/.codex1と~/.codex2は、今回新しく作るフォルダです。
今まで使っていた~/.codexは消えません。
codex1やcodex2を使うときだけ、参照先がそちらに切り替わります。
いつもどおりcodexと打てば、従来どおり~/.codexのままです。
設定手順
1. アカウント用フォルダを2つ作る
まず、Codex用の保存場所を2つ作ります。
mkdir -p ~/.codex1 ~/.codex2
chmod 700 ~/.codex1 ~/.codex2
中身はこう分かれます。
~/.codex1
~/.codex2
~/.codex1を1つ目、~/.codex2を2つ目のアカウント用に使います。
chmod 700を付けておくと、フォルダの中身を見られるのは自分だけです。
あとでログイン情報が入るので、最初から権限は絞っておきます。
2. 認証情報をファイル保存にする
次に、2つのフォルダへ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がなくても問題ありません。
あとでログインするときに作られます。
3. 切り替え用のaliasを.zshrcに足す
毎回、こんな長いコマンドを打つのはしんどいです。
CODEX_HOME=$HOME/.codex1 codex
なので、codex1とcodex2という短い名前を.zshrcに足します。
これはCodex公式のコマンドではなく、自分で作るaliasです。
.zshrcを開いて、一番下に2行追加します。
nano ~/.zshrc
alias codex1='CODEX_HOME=$HOME/.codex1 codex'
alias codex2='CODEX_HOME=$HOME/.codex2 codex'
対応はこうです。
codex1 -> ~/.codex1を使ってCodexを起動する
codex2 -> ~/.codex2を使ってCodexを起動する
保存したら、いきなりsourceしないで、先に構文チェックをします。
zsh -n ~/.zshrc
何も出なければ、そのあと反映します。
source ~/.zshrc
4. アカウントごとにログインする
1つ目から順にログインします。
codex1 login
ブラウザが開いたら、個人用にするアカウントを選びます。
続けて2つ目です。
codex2 login
こちらは仕事用にするアカウントを選びます。
これでcodex1とcodex2のログイン状態は別々になります。
ちゃんと分かれているか確認する
普段の起動は、使いたい方を打つだけです。
codex1
codex2
ログイン状態を見たいときは、こうです。
codex1 login status
codex2 login status
1つ目と2つ目で、別アカウントになっていればOKです。
.zshrcを直したのに動かないとき
aliasの中身は合っているのに、ターミナルを開くたびにエラーが出ることがあります。
自分の環境では、原因は.zshrcの改行ミスでした。
}alias codex1=...
関数の閉じかっこ}とaliasが、同じ行につながっていました。
.zshrcにこういう関数があると、特に気をつけてください。
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'
見るのは、}の直後に改行が入っているかどうかです。
ここがつながっていると、シェルの読み込み時にエラーになります。
設定を全部やり直す前に、.zshrcを開いて}の直後を一度見てください。
auth.jsonはパスワードと同じ扱い
ログイン後にできるauth.jsonには、アクセストークンが入ります。
Slackに貼ったり、Gitにコミットしたりする類のファイルではないので、そこだけ先に書いておきます。
共有やGitへのコミットはしない
auth.jsonはパスワードと同じ感覚で扱います。
共有もコミットもしません。
プロジェクト配下のGit管理フォルダにも置かない方がいいです。
~/.codex1と~/.codex2のようにホーム直下に置いておけば、うっかり混ざりにくくなります。
ファイルの権限を絞る
ログイン後にauth.jsonができたら、権限も固めます。
chmod 600 ~/.codex1/auth.json ~/.codex2/auth.json
自分だけが読み書きできる状態にしておきます。
よくある質問
codex1とcodex2はCodex公式のコマンドですか?
いいえ、自分で作るaliasです。
`codex1`と`codex2`は`.zshrc`に足す名前で、中身は`CODEX_HOME`を変えて`codex`を起動しているだけです。
3つ以上のCodexアカウントも切り替えられますか?
同じやり方で増やせます。
3つ目なら`~/.codex3`を作って、`.zshrc`にaliasを1つ足します。
~~~sh alias codex3='CODEX_HOME=$HOME/.codex3 codex' ~~~
あとは`codex3 login`でログインすれば、3つ目の保存場所を使えます。
Mac以外でも同じ方法は使えますか?
考え方は同じです。
この記事はMacのzsh向けに書いています。
bashやWindowsなら、環境変数やショートカットの書き方をその環境用に直してください。
まとめ
フォルダを2つ作って、config.tomlを置いて、.zshrcにaliasを足せば終わりです。
あとはcodex1とcodex2で、別アカウントにログインするだけ。
普段は、個人用ならcodex1、仕事用ならcodex2。
それだけ覚えておけば、ログアウトの手間はもう要りません。
