9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Codex、OCIのGenerative AIでも動くんじゃない?

9
Posted at

はじめに

あまり明確な目的があったわけではないのですが、OCIのGenerative AIではOpenAI互換APIをサポートしていて、「Codexで使えるんじゃ」、「どこかで使い所はあるかも」というゆる〜い理由で試してみました。

結論!

以下のモデルでとりあえず動くことは確認できました。

  • grok 4.2 (xai.grok-4.20-0309-reasoning)
  • grok 4.3 (xai.grok-4.3)
  • grok 4.6 (xai.grok-4.6)
  • grok 4.7 (xai.grok-4.7)

以下はgrok 4.7利用時の簡単な動作確認の様子です。
image.png

またGeminiについては動かすことができませんでした。

環境のイメージ

VMは東京リージョンに作成して、Generative AIはシカゴリージョンを使います。
※Grokをサポートしているリージョンであるため

image.png

OCI GenAIでOpenAI互換APIを使う設定

VMへcodexのインストール

OSは何でも良いのですが、デフォルトであるOracle Linux 9を利用します。

起動したら以下でcodexをインストールします。

sudo dnf install nodejs -y
sudo npm install -g @openai/codex

インストールが完了したらcodexを起動します。

codex

以下の画面になるので3を選択します。
image.png

APIキーを求められるので、先ほど生成したキーをとりあえず入力します。
image.png

1を選択し、enterを入力する。codex cliの画面になるのでctrl+dで一旦終了させます。
image.png

config.tomlファイルを編集します。

vi ~/.codex/config.toml

以下の様に内容を書き換えます。

model = "xai.grok-4.7"
model_provider = "oci"
model_reasoning_effort = "xhigh"
web_search = "disabled"

[features]
multi_agent = false
daemon_auto_start = false

[model_providers.oci]
name = "OCI Generative AI"
base_url = "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/v1"
env_key = "OCI_GENAI_API_KEY"
wire_api = "responses"

これで下準備は完了です。

codexの起動

改めてcodexを起動していきます。
まずOCI_GENAI_API_KEY環境変数に取得したAPIキーをセットします。

export OCI_GENAI_API_KEY=sk-*********eB

すでに起動しているサーバーデーモンを停止します。

codex app-server daemon stop

codexを起動します。

codex

grokが選択されていることを確認し、helloと問いかけて応答が返ってくるかを確認します。
image.png

本当にOCI GenAIを使っているのか確認する

OpenAI側を使う設定はしていないのですが、念の為、確認しておきます。

tcpdumpでOCI Generative AIへアクセスを確認

VMに対して新たにSSHでログインし、codexで生成しているところでtcpdumpを実行し、エンドポイント(inference.generativeai.us-chicago-1.oci.oraclecloud.com)にアクセスが行っていることを確認します。

HOST=inference.generativeai.us-chicago-1.oci.oraclecloud.com
getent ahosts "$HOST"
sudo tcpdump -i any -nn -tttt "host $HOST and tcp port 443"

結果の確認。64.181.150.234がエンドポイントのIPで、そことやり取りが発生していることが確認できます。

[opc@codex ~]$ HOST=inference.generativeai.us-chicago-1.oci.oraclecloud.com
[opc@codex ~]$ getent ahosts "$HOST"
64.181.150.234  STREAM inference.generativeai.us-chicago-1.oci.oraclecloud.com
64.181.150.234  DGRAM
64.181.150.234  RAW
[opc@codex ~]$ sudo tcpdump -i any -nn -tttt "host $HOST and tcp port 443"
tcpdump: data link type LINUX_SLL2
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
2026-09-27 07:33:28.982448 enp0s5 In  IP 64.181.150.234.443 > 10.0.0.117.35150: Flags [P.], seq 863186597:863186921, ack 3081417031, win 732, options [nop,nop,TS val 553038360 ecr 3593109099], length 324
2026-09-27 07:33:28.982462 enp0s5 Out IP 10.0.0.117.35150 > 64.181.150.234.443: Flags [.], ack 324, win 2846, options [nop,nop,TS val 3593113678 ecr 553038360], length 0
2026-09-27 07:33:29.368663 enp0s5 In  IP 64.181.150.234.443 > 10.0.0.117.35150: Flags [P.], seq 324:648, ack 1, win 732, options [nop,nop,TS val 553038747 ecr 3593113678], length 324
2026-09-27 07:33:29.368681 enp0s5 Out IP 10.0.0.117.35150 > 64.181.150.234.443: Flags [.], ack 648, win 2846, options [nop,nop,TS val 3593114064 ecr 553038747], length 0
2026-09-27 07:33:33.627708 enp0s5 In  IP 64.181.150.234.443 > 10.0.0.117.35150: Flags [P.], seq 648:972, ack 1, win 732, options [nop,nop,TS val 553043006 ecr 3593114064], length 324
2026-09-27 07:33:33.627739 enp0s5 Out IP 10.0.0.117.35150 > 64.181.150.234.443: Flags [.], ack 972, win 2846, options [nop,nop,TS val 3593118323 ecr 553043006], length 0
2026-09-27 07:33:33.996098 enp0s5 In  IP 64.181.150.234.443 > 10.0.0.117.35150: Flags [P.], seq 972:1296, ack 1, win 732, options [nop,nop,TS val 553043374 ecr 3593118323], length 324
2026-09-27 07:33:33.996114 enp0s5 Out IP 10.0.0.117.35150 > 64.181.150.234.443: Flags [.], ack 1296, win 2846, options [nop,nop,TS val 3593118692 ecr 553043374], length 0
2026-09-27 07:33:34.327111 enp0s5 In  IP 64.181.150.234.443 > 10.0.0.117.35150: Flags [P.], seq 1296:1620, ack 1, win 732, options [nop,nop,TS val 553043705 ecr 3593118692], length 324
2026-09-27 07:33:34.327126 enp0s5 Out IP 10.0.0.117.35150 > 64.181.150.234.443: Flags [.], ack 1620, win 2846, options [nop,nop,TS val 3593119023 ecr 553043705], length 0
^C
10 packets captured
16 packets received by filter
0 packets dropped by kernel

コーディング能力を軽くチェック

grok 4.2, 4.6, 4.7でコーディング能力をチェックしてみましょう。
お題は「2D Physics Playground」です。

プロンプトは以下。

空ディレクトリから、ブラウザで動く「2D Physics Playground」を作成してください。
説明や設計だけで終わらず、必要なファイルの作成、実装、検証、修正まで行ってください。

■ 技術条件
HTML・CSS・JavaScriptとCanvas 2Dを使用する。
フレームワーク、物理エンジン、外部API、CDN、外部画像は禁止。
以下のコマンドで起動できること。
python3 -m http.server 8000

■ 基本動作
・初期画面にはボールとStartボタンを表示し、停止状態にする。
・Startを1回押すと、12個のボールが自動で動き始める。
・重力による落下、壁・床での反射、ボール同士の衝突を表示する。
・開始前の配置操作や、開始後の追加操作は不要。
・Startを連打しても処理が多重起動しない。

■ 共通初期条件
物理空間は幅960、高さ540。左上を原点とし、右・下を正方向とする。
ボールは半径18、同じ質量。
i=0~11について、初期値を次のようにする。
x = 100 + 140 * (i % 6)
y = 80 + 90 * Math.floor(i / 6)
vx = iが偶数なら90、奇数なら-90
vy = 0
長さはpx、時間は秒。重力加速度500、反発係数0.9。
乱数は使用しない。

■ 操作
・Pause/Resume:一時停止と再開。
・Reset:ボール、設定、経過時間を初期状態に戻して停止。
・重力と反発係数を変更できるスライダー。
・Canvasの空白をクリックすると、初速0のボールを追加。
・操作説明は画面内に短く表示する。

■ 見た目
ダーク背景、色分けしたボール、控えめな軌跡を使い、
完成品らしい配色・余白・文字サイズにする。
ボール数、シミュレーション経過時間、FPSを表示する。
画面サイズに合わせて表示を縮尺調整し、物理空間の大きさは変えない。
具体的な画面構成や装飾は自由に設計してよい。

■ 物理と品質
描画にはrequestAnimationFrame、物理更新には固定時間刻みを使用する。
ボール同士の衝突応答と重なり補正を実装する。
通常操作で、ボールの消失、明らかなすり抜け、不自然な加速が起きないこと。
Pause中は物理状態と経過時間を更新しない。
Reset後にStartすると、同じ初期挙動を再現すること。

■ 検証と納品
開始、一時停止、再開、リセット、衝突、スライダーを検証し、
発見した不具合を修正する。
ブラウザ操作が可能なら実際の表示と操作も確認する。
利用できない場合は、見た目や操作が未検証であることを明記する。
実行していないテストを「確認済み」と報告しない。

README.mdに起動方法、操作方法、実装概要、既知の制約を記載する。
最後に、実装した機能、実施した検証、未確認事項を簡潔に報告する。

結果

どれも一発で出力されました。

grok 4.7

grok4.7.gif

grok 4.6

grok4.6.gif

grok 4.3

grok4.3.gif

grok 4.2

grok4.2.gif

注意点

簡単な動作テストはできましたが、この構成では以下の様に注意すべき点があります。

項目 OCI + Grok 4.7での制約
コンテキストの自動圧縮 **できない。長いセッションでauto-compactionが走るとOCI/xAIとの互換性問題で停止する。
Codex内蔵Web検索 できない。 web_search="disabled" が必要。最新ドキュメントやWeb上の情報をCodex自身に検索させる使い方は不可。OpenAI側ではweb_searchが標準ツールとして提供されます。(OpenAI Developers)
Multi-agent / Subagent できない。 multi_agent=false が必要。複数サブエージェントに調査・実装・レビューを分担させる使い方は不可。OpenAI標準ではサブエージェントへの委譲・並列実行が可能です。(OpenAI Developers)
Shared app-server daemon 現在の構成では使えない。 daemon_auto_start=false が必要。複数のCodexクライアントで共有daemonを再利用するのではなく、各codexプロセスが独立して動く。
/modelからGrokを選択 基本的にできない。 GrokはCodex標準モデルカタログに出てこないため、config.tomlまたは--modelで指定する運用になる。
OpenAI固有のHosted Tool そのままは使えないものがある。 OCI Responses APIで公式にサポートされるtool typeは現在function / file_search / code_interpreter / mcp。Codexがweb_searchやnamespace等を送る機能は互換性エラーになる。(Oracle Docs)
Plugins / Apps / MCP 全面的に使えるとはまだ言えない。 有効な状態で通常応答できることは確認済みだが、実際にツールをモデルへ公開した際にCodexがnamespace形式を生成するとOCIで失敗する可能性がある。要個別検証。
Codex新機能をそのままON 難しい。 OpenAI側に新しいtool typeやagent機能が追加されても、OCI Responses API側がその形式に対応するまでは利用できない可能性がある。

逆に、現時点で問題なさそうな利用としては以下のような「単一Coding Agent」としての基本操作です。

  • リポジトリを読む
  • ファイルを編集する
  • shellコマンドを実行する
  • git diffを見る
  • build/testを実行する
  • 結果を見て再修正する

最後に

動作することは確認できましたが、コンテキストの圧縮やWebツールなどの制約でCodexと同等の体験は難しいことがわかりました。

ある程度の範囲であれば何か良い利用用途が見つかるかもしれません。

xAI社ではGrok Buildというコーディングエージェントをリリースしているので、そちらを試してみるのが良いのかもと思いました。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?