私は Claude Code を使うことが多いですが、最近は Codex CLI や Codex.app(以下 Codex)の使用頻度も上がってきました。環境は macOS です。

しかしながら、[2026-03-29-1] から mise を使い始めたところ、Codex 内では mise 管理の Ruby や Node.js 等を使ってくれず、困っていました。

このような状態でした。

$ where ruby
/usr/bin/ruby

$ ruby --version
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25]

対策方法

~/.zshenv に以下を設定して、解決しました。

# Codex CLI と Codex.app のコマンド実行では .zshrc の mise activate zsh が効かないため、
# mise shims を PATH に追加する。
if [ -n "$CODEX_SANDBOX" ]; then
  PATH=${XDG_DATA_HOME}/mise/shims:$PATH
fi

設定後の Codex 内での状態です。

$ where ruby
/Users/masutaka/.local/share/mise/shims/ruby
/usr/bin/ruby

$ ruby --version
ruby 4.0.5 (2026-05-20 revision 64336ffd0e) +PRISM [arm64-darwin25]

Codex のコマンド実行環境はサンドボックス

以前から薄々気づいていましたが、Codex のコマンド実行環境はサンドボックス内にあるようです。

Codex 内で、その手がかりを確認できます。

$ env | grep CODEX
CODEX_CI=1
CODEX_SANDBOX=seatbelt
CODEX_THREAD_ID=019e7806-6025-7c13-a3c6-a70d41c13905

seatbelt というのは Apple Seatbelt のことで、macOS のサンドボックス機構のようです。

🔗 macOSで手軽にSandbox環境を構築できるApple Seatbeltの実践ガイド

しかしながら、Apple Seatbeltは公式にドキュメントを公開されておらず、非推奨とされています。一方で実際には多くのアプリケーションやツールで使用されています。

なるほど…。

この記事によると Claude Code でも Apple Seatbelt が採用されているようで、/sandbox で有効化できることを確認しました(公式ドキュメント )。

Claude Code に慣れた身からすると、Codex のサンドボックスは理解が難しいですが、以下の記事に詳しくまとまっています。ありがたい。

🔗 [Codex] sandbox実行の仕組みと設定方法を完全に理解する

Codex はデフォルトだとネットワークも制限されているようで、そういえば以前 ~/.codex/config.toml に以下を設定したことを思い出しました。

[sandbox_workspace_write]
network_access = true

対策方法への道のり

当初は ~/.codex/config.toml へのこんな設定で解決しようとしましたが、うまくいきませんでした。

[shell_environment_policy.set]
PATH = "/Users/masutaka/.local/share/mise/shims/ruby:(以下既存の PATH 設定をベタ書き)"

調べていく中で「サンドボックス内でも毎回 ~/.zshenv はロードされるのでは? Codex 関係の環境変数が定義されているなら、~/.zshenv で対策できそう」と閃いて、解決に至りました。

~/.zshrceval "$(mise activate zsh)" が効かないのは、~/.zshrc がインタラクティブシェルでしか読み込まれないためです。Codex はコマンドを非インタラクティブシェルで実行するようで、全ての zsh 起動時に読み込まれる ~/.zshenv 側の設定が効く、というわけです。

なお eval "$(mise activate zsh)" 自体を ~/.zshenv に移す方法も思いつき、実際に動きはしました。ただ、これはあまり良くない方法だと思います。activate の PATH 方式 はプロンプト表示のたびに環境変数を更新する仕組みで、プロンプトの出ない非インタラクティブシェルで使うのは本来の想定から外れるためです。

mise も非インタラクティブ環境(スクリプトや IDE、CI)では shims を推奨しており、今回はそれに従いました。[2026-03-29-1] で Emacs 向けに採用したのと同じ、shims を PATH に追加する方法です。

~/.codex/config.toml への PATH のベタ書きは ~/.zshenv との二重管理になるため避けたかったので、きれいな形に落ち着いてよかったです。

まとめ

Codex CLI と Codex.app に mise 管理の Ruby や Node.js を使わせる方法をまとめました。

mise は普及しつつあると思いますが、ググっても分からず、みんなどうしているんだろうと思ったので、簡単な記事を書きました。どなたかの参考になれば幸いです。

関連