Codex CLIをOpenRouterで使う

OpenRouterとは?

OpenRouterは色々なAIモデルの呼び出しを一つのエンドポイント, API tokenで行えるサービスです。 OpenAIのGTP系のモデルやGoogleのGemini,AnthropicのClaudeといった有名なモデルも、 コーディングで高い評価を得ているQwen等の少しマニアックなモデルも使用することが可能です。

中には、無料で使えるモデルも存在するので、とりあえず特定のモデルを試したい!という場合にはピッタリなサービスなのではないでしょうか。 無料モデルでは、アクセス制限が少し厳しいのですが、$10 チャージするとアクセス制限が大幅に緩和されます。 ですが、今回はとりあえず使ってみることが目的なので、それはまた後にしようかと思います。

なぜCodex CLIを選択したのか?

OpenRouterがOpenAI互換なAPIを採用しているので、OpenAI製のツールなら叩けるのできるのでは?(実際はそうはいかない…) という予測と,実装がRustな点です。

とりあえず openai/gpt-oss-120b:freeを叩いてみる

codexの導入と設定

いつも通りflakeでnix shellを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  description = "Codex by OpenRouter";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
  };

  outputs =
    { self, nixpkgs }:
    let
      platform = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages."${platform}";

    in
    {
      devShells.${platform}.default = pkgs.mkShell {
        packages = with pkgs; [
          codex
        ];

      };

    };
}

わざわざ、flakeを書きましたが、入れたツールが一個だけだったので

1
nix shell nixpkgs#codex

なり

1
nix shell -p codex

なりでも十分だったかもしれません…

アカウントの作成とAPI keyの作成

アカウントはGoogle,Github,Metamaskのアカウントで作成するか、メールアドレスで新規作成するかを選択できます。

今回筆者はGithubアカウントで作成しました。

続いて、API TOKENの作成を行います。

トークンの作成ではトークン名、とExpiration(有効期限)が必須の項目なので、適当な名前で期限は1年にしました。 このトークンはOPENROUTER_API_KEYとしてCodex CLIを実行するシェルの環境変数に設定として設定しましょう。

筆者はdirenvを使用しているので、.envrcに以下のように設定しました。

1
export OPENROUTER_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

また、freeなモデルの実行にはプライバシー設定で以下のように、“Enable free endpoints that may train on inputs”,“Enable free endpoints that may publish prompts"を共に有効化する必要があります。

codexの設定

筆者はnix shell内で

1
codex --version

を実行した時点でディレクトリ$HOME/.codex/が作成れていたのでそこにconfig.tomlを置き設定を記述しました。

  • $HOME/.codex/config.toml
1
2
3
4
[model_providers.openrouter]
name = "OpenRouter"
base_url = "https://openrouter.ai/api/v1"
env_key = "OPENROUTER_API_KEY"

実行

以下のコマンでCodex CLIを実行します。 ここで、--configconfig.tomlに書かれた設定を上書きするオプションで、 --modelは名前の通りモデル名を指定するためのオプションです。

1
codex --config model_provider=openrouter --model openai/gpt-oss-120b:free

MCPサーバーを動かす

ここでは、設定でハマったポイントだけ

MCPサーバーの設定は、プロジェクトごとに.codex/config.tomlを置くか、 グローバルに$HOME/.codex/config.tomlに置くかの二通りの方法があります。

stdioで通信するタイプのサーバーの場合は、commandにサーバーの起動コマンドを設定します。

1
2
[mcp_servers.<server name>]
command = "<command>"

一方、httpでやりとりするMCP サーバーではcommandではなくてurlにURLを設定します。

1
2
[mcp_servers.<server name>]
url = "<URL>"

環境変数を参照するMCPサーバーの場合は少しややこしくて、 Codexを呼び出すシェルで設定されていても 無視されます(おそらくわざとそうしている)

実行するシェルで環境変数ENV_VARが設定されていてそれを参照したいならば 以下のように$で展開するように設定する必要があります。

1
2
3
[mcp_servers.<server name>]
command = "<command>"
env = { ENV_VAR = "$ENV_VAR" }
CC BY
Hugo で構築されています。
テーマ StackJimmy によって設計されています。