OpenAI Codex CLI(JS) を Azure OpenAI で動かすための設定メモ

OpenAI Codex CLICLIで動作するコーディングエージェント。(同名のOpenAI Codexはクラウドで動作するコーディングエージェントサービスで別物)

(追記)JS版とRust版(開発中)がありRustに置き換える流れになっている。この記事はJS版の話なのでしばらくしたら陳腐化する。なお6/6時点ではRustはまだAzure OpenAI未対応。

github.com

Azure OpenAIを使うにはちょっと工夫が必要そうだったのでメモ。今後良くなるとは思う。

前提

Azure OpenAIを使えて、o4-miniなどデプロイ済みのモデルがあること。(手元ではo4-miniで動作している。)

要約

まず、~/.codex/config.yaml を書く。(JSONにしたい場合は読み替えてください)

provider: azure
# azureの場合はデプロイしたモデルのDeploy名
model: o4-mini
providers:
  azure:
    name: "AzureOpenAI"
    baseURL: "https://*******.openai.azure.com/openai"
    # 一旦このキー名にしておくこと
    envKey: "OPENAI_API_KEY"

次に、{workdir}/.envもしくは~/.codex.envへAzure OpenAIのAPIキーをOPENAI_API_KEYとして書く。もちろん、何らかの方法で環境変数として指定できる術があるならそちらでもよい。

OPENAI_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

後は codex を実行するだけ。

おまけ

codexで使う環境変数をファイルで書くには

明示的に指定するか、{workdir}/.envもしくは~/.codex.envに書くことができる。

このことは 実装のコメントに書かれていた。

codex/codex-cli/src/utils/config.ts at c6e08ad8c1e1d1eaa34536c7dd263b1f59e92325 · openai/codex · GitHub

なぜ OPENAI_API_KEY を指定しないといけないのか

わからん。

まず、環境変数OPENAI_API_KEYがないと以下のような確認が毎回出る(npxで実行しているのはシステムやユーザ環境に入れたくないこだわりなので気にしない)

$ npx codex
Sign in with ChatGPT to generate an API key or paste one you already have.
[use arrows to move, enter to select]

❯ Sign in with ChatGPT
  Paste an API key (or set as OPENAI_API_KEY)

これは結構鬱陶しいので省略したい。

実装を眺めたところ、OPENAI_API_KEY環境変数でないと入力を要求するし、スルーする方法もなさそうだった。

なので、providerは"azure"を使う場合でも、キー名は OPENAI_API_KEYとすることで、このチェックをごまかしている。

ちなみに、環境変数を使わない場合はPaste an API key (or set as OPENAI_API_KEY)を選んでAzure OpenAIのAPIキーを入れても動作はする(毎回いれることになりますけどね)

Azure OpenAIのBaseURLとモデル名の指定はどうやればよいか?

Azure OpenAIのエンドポイントURLは以下のような感じになっている。

https://リソース名.azure.com/openai/deployments/デプロイ名/chat/completions?api-version=2025-01-01-preview

この場合、baseURLには以下を指定する。

https://リソース名.azure.com/openai

デプロイ名はmodelに指定する。

わかりにくいけど、Azure AI Foundryの画面上でいえば「名前」のほう。「モデル名」のほうではない。

YAMLの設定はこんな感じになる。

model: デプロイ名
provider: azure
providers:
  azure:
    name: "AzureOpenAI"
    baseURL: "https://リソース名.azure.com/openai"
    envKey: "OPENAI_API_KEY"

ちなみにapi-versionは環境変数 AZURE_OPENAI_API_VERSION で指定できる。現在のデフォルト値は 2025-03-01-previewで特にいじることもないはず。

codex/codex-cli/src/utils/config.ts at c6e08ad8c1e1d1eaa34536c7dd263b1f59e92325 · openai/codex · GitHub

devcontainerで動かすには

現状はNodeJSが必要。(Rust実装も頑張っているみたい)

devcontainerで使うなら~/.codexをマウントするよう設定するとよい。

https://code.visualstudio.com/remote/advancedcontainers/add-local-file-mount

devcontainer.jsonの設定例。

{
    "name": "Node.js & TypeScript",
    "image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",

        // (中略)
    "mounts": [
                // マウント先はベースイメージのHomeディレクトリに合わせる必要がある
        "source=${localEnv:HOME}/.codex,target=/home/node/.codex,type=bind,consistency=cached"
    ],
}

環境変数~/.codex.env にしてファイルをマウントするほうがいいかもしれない。

あとはdevcontainer上でインストールして実行すれば動くはず。

npm install --save-dev "@openai/codex"
npx codex