とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

Codex CLIでローカルLLMモデルを使う

CodexはOpenAIのAIエージェントコーディングソフトウェアで、ChatGPTアカウントで利用できます。OpenAIのモデルを利用する場合は、対応するChatGPTプランが必要です。

Codex CLIではローカルLLMモデルも利用できます。ローカルLLMを利用すれば、OpenAIの推論リソースを使わずにCodex CLIの操作感を試したり、オフライン環境や機密データを扱う開発にも活用できます。

使い勝手がよければ他のAIエージェントコーディングソフトウェアをインストールせずにCodexに一本化出来るので、どうやって使うのか、他のツール(特にOpenCodeやGoose)と使い勝手はどう違うかなどを今回、調べてみることにしました。

CodexにはデスクトップアプリのCodex AppとCLI版のCodex CLIがありますが、これら二つは設定ファイルとして~/.codex/config.tomlを共通して使います。

Codexで外部プロバイダーのモデルを使う場合は以前は~/.codex/config.tomlに記述するとマニュアルに書かれていた記憶がありますが、config.tomlはCodex AppとCodex CLIで共通利用されるため、今のバージョンでここを書き換えるとCodex App側のOpenAI設定まで上書きされてしまいます。そのため、Codex Appの動作に影響が出てしまいます。

実際、グローバル設定~/.codex/config.tomlにローカルLLMの設定を書き加えたところ、おかしな状態にしてしまったようで、これまでのチャット履歴とCodexアカウントのログイン状態をぶっ飛ばしてしまうという失態をおかしてしまいました。現時点の設定ファイルをバックアップしたあと削除、Codex Appを終了し、Codex CLIを使ってcodex logoutcodex loginを実施することで元通りにはなりました。かなり焦りました。

という訳で、GUIとCLI共通で利用するグローバル設定をいじるのは、はっきり言っておすすめしません。専用のファイルを作って振り分ける方法が適切みたいです。

カスタムプロバイダーの設定方法

注意点として1つのプロファイルにつき設定できるモデルは1つです。使いたいモデルが複数ある場合は、たとえば次のように複数の設定ファイルを作ってください。 *.config.tomlのような感じの名前にすると、codex CLIの--profileオプションから呼び出す事が可能です。

~/.codex/
├── config.toml                 # App/OpenAI用のグローバル設定
├── ollama_gemma4.config.toml
├── ollama_qwen.config.toml
└── ollama_ornith.config.toml

設定ファイル例(ollama_gemma4.config.toml) はこのような感じです。モデル名はモデルIDを調べてそれを指定してください。

oss_provider = "ollama"
model_provider = "ollama"
model = "gemma4:12b-it-qat"

ちなみにLM Studioを使っている場合は、oss_providerとmodel_providerをlmstudioと設定、modelにはモデルIDを設定したファイルを作ると良いみたいです。

カスタムモデルを使ってCodexを起動する

Codex CLIを起動すると、次のように表示されます。

% codex --profile ollama_gemma4
╭─────────────────────────────────────────────────╮
│ >_ OpenAI Codex (v0.143.0)                      │
│                                                 │
│ model:     gemma4:12b-it-qat  /model to change │
│ directory: ~/tmp/code                           │
╰─────────────────────────────────────────────────╯
  Tip: GPT-5.5 is now available in Codex. It's our strongest agentic coding model yet, built to reason through large

  codebases, check assumptions with tools, and keep going until the work is done.
  Learn more: https://openai.com/index/introducing-gpt-5-5/

› 

  gemma4:12b-it-qat default · ~/tmp/code

この後の使い方はClaude Code, OpenCode, Goose CLIなどと一緒です。コマンドはスラッシュから始めて、閉じる時は/exitです。ローカルLLMモデルを使っている間は課金されることはありません。

実行すると⚠ Model metadata for gemma4:12b-it-qat not found. Defaulting to fallback metadata; this can degrade performance and cause issues.というメッセージが出ますが、気にしなくてもOKです。外部モデルではOpenAI側のモデルメタデータを取得できないため表示される警告だと思われます。私が試した範囲では動作に支障はありませんでした。

たとえばCodexでローカルLLMモデルを使ってちょっとした作業をやってみましょう。私が試した範囲では、Gemma 4 12B QATがかなり使いやすい印象でした。

› Python3でhello world

⚠ Model metadata for `gemma4:12b-it-qat` not found. Defaulting to fallback metadata; this can degrade performance and cause issues.

• Python3で「Hello World」を表示するプログラムを作成して実行します。

  print("Hello, World!")

  実行結果:
  Hello, World!
  
› 
  gemma4:12b-it-qat default · ~/tmp/code

使ったモデル

Ollamaで利用する場合はこちらのモデルです。

LM Studioで利用する場合はこちらのモデルです。LM Studioのモデル検索ですぐ見つかるはずです。


その他、次のモデルが動作するのを確認しました。
- qwen2.5-coder:7b
- ornith:9b

/modelコマンドでCodexのモデルに切り替えることが出来ますが、ここで切り替えるとollama_gemma4.config.tomlファイルのモデルの設定が書き換えられてしまうので、一度抜けて--profile未指定でCodexを起動してから続きの作業を行う方が良いと思います。

最終チェック時はCodexのモデルを使うと思うので、Codex CLIでもCodex Appでも慣れている方を使って作業してもらって構いません。

/modelコマンドは罠

起動時に説明がありますが、/modelコマンドでCodexモデルへの切り替えが可能です。上手く使えば、ローカルLLMモデルである程度作ったコードをCodexモデルでチェックしたり、修正したり出来そうですが、ここに大きな罠があります。

ここで設定したモデルがカスタム設定したモデルの設定ファイルに書かれてしまうのです。 次回同じようにGemma4 12Bを使おうと思ってオプション指定してCodexを起動したら、デフォルトで設定されているモデルはGPTモデルだったみたいな罠が待ち受けています。

Codexモデルを使いたくなった場合、カスタムプロファイルで起動している間は、/modelでモデルを切り替えるのではなく、いったんプロンプトを抜けて標準モードでCodexを起動して実施するといったような使い分けが必要です。

まとめ

/modelコマンドを実行すると設定ファイルの中身が書き換えられてしまうというちょっとした注意ポイントはあるものの、Codex CLIでローカルLLMモデルは間違いなく使えるようです。 普段からCodexを使っている場合は使い勝手そのままですので、同じツールを使えるならその方が良いのかもしれません。

私個人の意見では、これまで色々なAI Agentツールを使ってきましたが、Codex CLI、Goose CLI、OpenCodeを使い比べた結果、モデルの切り替えがスムーズなOpenCodeが私にはあっていそうです。

しかしすでにCodexをメインで利用している人であれば、新しいAIエージェントを導入しなくても、この方法を使えば、新しいAIエージェントを導入しなくてもCodexでローカルLLMを利用できるのは大きなメリットです。

Codex CLIだけでOpenAIモデルとローカルLLMモデルを使い分けられることが分かったのは、私としては大きな収穫でした。