はじめに
Github Copilotを利用して開発をしていたのですが、以下の2点からOpenAI Codex(Codex CLI)を追加で導入してみることにしました。
- Github CopilotのPremium requestsの上限を使い切ってしまいそう
- より性能が高いであろうgpt-5.2-codexを使ってみたかった
しかし、Dev Containerに導入するにあたってハマったポイントがあったため備忘録を兼ねて記事化しました。
公式クイックスタートにしたがって導入してみる
まずは公式クイックスタートにしたがって、以下のコマンドを実行しました。
npm install -g @openai/codex
しかし、devcontainer 環境では次のようなエラーが発生しました。
npm error code EACCES
mpm error syscall mkdir
npm error path /usr/local/lib/node_modules/@openai npm error errno -13
npm error Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@openai'
(以下省略)
このエラーの解決方法を調査しました。
インストールが失敗する理由と回避策
このエラーの原因は、devcontainer 内のユーザー権限にあります。
多くの devcontainer では、root ではないユーザー(node や vscode)で作業するため、npm install -g が書き込み先とする /usr/local/lib に権限がありません。
この問題に対して sudo npm install -g を使う方法もありますが、devcontainer の再構築や将来のメンテナンスを考えるとおすすめできません。
なお、この npm の権限問題は Codex 特有のものではなく Claude Code など他の Node.js 製 CLI ツールでも同様の報告が多く、sudo npm install -g を避けるのが定石とされています。
npm の prefix をユーザー領域に変更する
安全な回避策として、npm のグローバルインストール先をユーザー領域に変更します。
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
export PATH="$HOME/.npm-global/bin:$PATH"
その後、改めて Codex CLI をインストールします。
npm install -g @openai/codex
# 確認
codex --version
これで、EACCES エラーは解消されインストールに成功しました。
devcontainer で使う際の注意点
devcontainer で Codex CLI を使う場合、いくつか注意点があります。
- devcontainer は再構築される前提で考える必要がある
- 初期化処理(依存インストールなど)はまとめて管理したほうが楽
このあたりは、postCreateCommand や初期化スクリプトの設計が重要になってきますが、ここでは詳細には踏み込みません。
補足:Codex CLI を継続利用する場合
Codex CLI では、~/.codex/ に認証情報、セッション履歴、プロンプトを保存できますが、devcontainer を再構築した場合にはプロジェクトのワークスペース外であるため消えてしまいます。これらを保持したい場合には、ホスト側ディレクトリと bind mount する構成が便利ですが、詳細は別記事で扱う予定です。
まとめ
- devcontainer 環境でも Codex CLI は問題なく利用できる
-
npm install -gはそのままだと EACCES エラーで失敗しやすい - npm の prefix をユーザー領域に変更することで安全に導入できる
- 継続利用や自動化を考えると、Dev Containerの初期化手順の整理が重要になる
postCreateCommand やマウントまわりは設定次第で挙動が大きく変わり、
ハマりどころも多いため、別の記事で詳しくまとめる予定です。