<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Codex on マスタカの ChangeLog メモ</title>
    <link>https://masutaka.net/tags/Codex/</link>
    <description>Recent content in Codex on マスタカの ChangeLog メモ</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <lastBuildDate>Sat, 30 May 2026 19:18:29 +0900</lastBuildDate>
    <atom:link href="https://masutaka.net/tags/Codex/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Codex CLI と Codex.app に mise 管理の Ruby や Node.js を使わせる</title>
      <link>https://masutaka.net/2026-05-30-1/</link>
      <pubDate>Sat, 30 May 2026 19:18:29 +0900</pubDate>
      <guid>https://masutaka.net/2026-05-30-1/</guid>
      <description>&lt;p&gt;私は Claude Code を使うことが多いですが、最近は Codex CLI や Codex.app（以下 Codex）の使用頻度も上がってきました。環境は macOS です。&lt;/p&gt;
&lt;p&gt;しかしながら、&lt;a href=&#34;https://masutaka.net/2026-03-29-1/&#34;&gt;[2026-03-29-1]&lt;/a&gt;
 から &lt;a href=&#34;https://mise.jdx.dev/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mise&lt;/a&gt;
 を使い始めたところ、Codex 内では mise 管理の Ruby や Node.js 等を使ってくれず、困っていました。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>私は Claude Code を使うことが多いですが、最近は Codex CLI や Codex.app（以下 Codex）の使用頻度も上がってきました。環境は macOS です。</p>
<p>しかしながら、<a href="/2026-03-29-1/">[2026-03-29-1]</a>
 から <a href="https://mise.jdx.dev/" target="_blank" rel="noopener">mise</a>
 を使い始めたところ、Codex 内では mise 管理の Ruby や Node.js 等を使ってくれず、困っていました。</p>
<p>このような状態でした。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ where ruby
</span></span><span style="display:flex;"><span>/usr/bin/ruby
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>$ ruby --version
</span></span><span style="display:flex;"><span>ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25]
</span></span></code></pre></div><h2 id="対策方法">対策方法</h2>
<p><code>~/.zshenv</code> に以下を設定して、解決しました。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-zsh" data-lang="zsh"><span style="display:flex;"><span><span style="color:#75715e"># Codex CLI と Codex.app のコマンド実行では .zshrc の mise activate zsh が効かないため、</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># mise shims を PATH に追加する。</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> -n <span style="color:#e6db74">&#34;</span>$CODEX_SANDBOX<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>  PATH<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>XDG_DATA_HOME<span style="color:#e6db74">}</span>/mise/shims:$PATH
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span></code></pre></div><p>設定後の Codex 内での状態です。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ where ruby
</span></span><span style="display:flex;"><span>/Users/masutaka/.local/share/mise/shims/ruby
</span></span><span style="display:flex;"><span>/usr/bin/ruby
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>$ ruby --version
</span></span><span style="display:flex;"><span>ruby 4.0.5 (2026-05-20 revision 64336ffd0e) +PRISM [arm64-darwin25]
</span></span></code></pre></div><h2 id="codex-のコマンド実行環境はサンドボックス">Codex のコマンド実行環境はサンドボックス</h2>
<p>以前から薄々気づいていましたが、Codex のコマンド実行環境はサンドボックス内にあるようです。</p>
<p>Codex 内で、その手がかりを確認できます。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ env | grep CODEX
</span></span><span style="display:flex;"><span>CODEX_CI=1
</span></span><span style="display:flex;"><span>CODEX_SANDBOX=seatbelt
</span></span><span style="display:flex;"><span>CODEX_THREAD_ID=019e7806-6025-7c13-a3c6-a70d41c13905
</span></span></code></pre></div><p>seatbelt というのは Apple Seatbelt のことで、macOS のサンドボックス機構のようです。</p>
<p>&#x1f517; <a href="https://zenn.dev/alesion/articles/37abbfb9f2fa4b" target="_blank" rel="noopener">macOSで手軽にSandbox環境を構築できるApple Seatbeltの実践ガイド</a>
</p>
<blockquote>
<p>しかしながら、Apple Seatbeltは公式にドキュメントを公開されておらず、非推奨とされています。一方で実際には多くのアプリケーションやツールで使用されています。</p>
</blockquote>
<p>なるほど&hellip;。</p>
<p>この記事によると Claude Code でも Apple Seatbelt が採用されているようで、<code>/sandbox</code> で有効化できることを確認しました（<a href="https://code.claude.com/docs/ja/sandboxing" target="_blank" rel="noopener">公式ドキュメント</a>
）。</p>
<p>Claude Code に慣れた身からすると、Codex のサンドボックスは理解が難しいですが、以下の記事に詳しくまとまっています。ありがたい。</p>
<p>&#x1f517; <a href="https://zenn.dev/4br4si0n/articles/8dfed37969e8cc" target="_blank" rel="noopener">[Codex] sandbox実行の仕組みと設定方法を完全に理解する</a>
</p>
<p>Codex はデフォルトだとネットワークも制限されているようで、そういえば以前 <code>~/.codex/config.toml</code> に以下を設定したことを思い出しました。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">sandbox_workspace_write</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">network_access</span> = <span style="color:#66d9ef">true</span>
</span></span></code></pre></div><h2 id="対策方法への道のり">対策方法への道のり</h2>
<p>当初は <code>~/.codex/config.toml</code> へのこんな設定で解決しようとしましたが、うまくいきませんでした。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">shell_environment_policy</span>.<span style="color:#a6e22e">set</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">PATH</span> = <span style="color:#e6db74">&#34;/Users/masutaka/.local/share/mise/shims/ruby:(以下既存の PATH 設定をベタ書き)&#34;</span>
</span></span></code></pre></div><p>調べていく中で「サンドボックス内でも毎回 <code>~/.zshenv</code> はロードされるのでは？ Codex 関係の環境変数が定義されているなら、<code>~/.zshenv</code> で対策できそう」と閃いて、解決に至りました。</p>
<p><code>~/.zshrc</code> の <code>eval &quot;$(mise activate zsh)&quot;</code> が効かないのは、<code>~/.zshrc</code> がインタラクティブシェルでしか読み込まれないためです。Codex はコマンドを非インタラクティブシェルで実行するようで、全ての zsh 起動時に読み込まれる <code>~/.zshenv</code> 側の設定が効く、というわけです。</p>
<p>なお <code>eval &quot;$(mise activate zsh)&quot;</code> 自体を <code>~/.zshenv</code> に移す方法も思いつき、実際に動きはしました。ただ、これはあまり良くない方法だと思います。<a href="https://mise.jdx.dev/dev-tools/shims.html" target="_blank" rel="noopener">activate の PATH 方式</a>
はプロンプト表示のたびに環境変数を更新する仕組みで、プロンプトの出ない非インタラクティブシェルで使うのは本来の想定から外れるためです。</p>
<p>mise も非インタラクティブ環境（スクリプトや IDE、CI）では shims を推奨しており、今回はそれに従いました。<a href="/2026-03-29-1/">[2026-03-29-1]</a>
 で Emacs 向けに採用したのと同じ、shims を <code>PATH</code> に追加する方法です。</p>
<p><code>~/.codex/config.toml</code> への <code>PATH</code> のベタ書きは <code>~/.zshenv</code> との二重管理になるため避けたかったので、きれいな形に落ち着いてよかったです。</p>
<h2 id="まとめ">まとめ</h2>
<p>Codex CLI と Codex.app に mise 管理の Ruby や Node.js を使わせる方法をまとめました。</p>
<p>mise は普及しつつあると思いますが、ググっても分からず、みんなどうしているんだろうと思ったので、簡単な記事を書きました。どなたかの参考になれば幸いです。</p>
<h2 id="関連">関連</h2>
<ul>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/f752b939d030779795b703001d3f65b45e7dd0d8/.zshenv" target="_blank" rel="noopener">現在の <code>~/.zshenv</code></a>
</li>
<li><a href="https://github.com/masutaka/dotfiles-public/blob/f752b939d030779795b703001d3f65b45e7dd0d8/.zshrc" target="_blank" rel="noopener">現在の <code>~/.zshrc</code></a>
</li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
