コンテンツにスキップ

🆙 Codex 0.46.0 上級入門チュートリアル

🆙 Codex 0.46.0 上級入門チュートリアル

Section titled “🆙 Codex 0.46.0 上級入門チュートリアル”

1. Approval Policy:信頼を設計する

Section titled “1. Approval Policy:信頼を設計する”

Codex は野良 AI ではありません。ちゃんとあなたに権限を求めます。設定ファイルには 4 つのポリシーがあります。

~/.codex/config.toml
approval_policy = "untrusted" # デフォルト。「信頼されていない」コマンドを実行する時だけ確認
ポリシー意味適用シーン
untrusted危険なコマンドを実行する時だけ確認日常開発(おすすめ)
on-failureコマンド失敗後、サンドボックス解除して再試行するか確認デバッグ段階
on-request権限昇格が必要なタイミングをモデルに判断させるちょっと楽をしたい時
never完全自動、絶対に邪魔しないCI/CD、または度胸がかなりある時

> ひとことジョークnever モードは、AI にクレジットカードを渡すようなものです。AI は大喜び、あなたのサーバーは泣くかもしれません。

2. Sandbox:サンドボックスは猫砂ではない

Section titled “2. Sandbox:サンドボックスは猫砂ではない”

Codex は OS レベルのサンドボックスの中でコマンドを実行し、うっかりあなたのハードディスクを初期化してしまうのを防ぎます。

sandbox_mode = "read-only" # デフォルト:読み取り専用

3 つのモード比較

モードファイルの読み取りファイルの書き込みネットワークアクセス適用シーン
read-only:check_mark_button::cross_mark::cross_mark:コードの閲覧と分析
workspace-write:check_mark_button::check_mark_button:(現在のディレクトリ):cross_mark:*通常の開発
danger-full-access:check_mark_button::check_mark_button:(ファイルシステム全体):check_mark_button:Docker コンテナ内で自由に使いたい時

*ネットワークアクセスは設定で有効化できます

高度なサンドボックス設定

sandbox_mode = "workspace-write"
[sandbox_workspace_write]
# 追加の書き込み許可ディレクトリ(例:Python 仮想環境)
writable_roots = ["/Users/あなた/.pyenv/shims"]
# ネットワークアクセスを有効化(要注意!)
network_access = true
# /tmp ディレクトリを除外(デフォルトでは書き込み可能)
exclude_slash_tmp = false

> 安全メモ:macOS と Linux では、.git/ フォルダはデフォルトで読み取り専用です。AI が Git 履歴を壊さないようにするためです。

model = "gpt-5-codex" # デフォルトモデル

よく使われるモデルのおすすめ

  • o3 - 推論力が非常に高く、複雑なタスク向き(ただし遅い)
  • gpt-5-codex - コーディング向けに最適化。速度と品質のバランスが良い
  • gpt-5 - 汎用の強力モデル
  • gpt-4o - 古参ながら安定感あり

推論の深さを調整する

model = "o3"
model_reasoning_effort = "high" # minimal | low | medium | high
model_reasoning_summary = "detailed" # auto | concise | detailed | none

> おまけmodel_reasoning_effort = "high" は、AI にエスプレッソを 3 杯飲ませるようなものです。より深く考えますが、その分お金もかかります。


MCP(Model Context Protocol) は Codex 0.46.0 の目玉機能です。AI が外部ツール、サービス、データソースにアクセスできるようになります。

MCP を「AI の USB ポート」だと思ってください。

  • Codex = PC 本体
  • MCP Server = 外付け HDD、プリンター、カメラ…

MCP サーバーの設定:2 つの方法

Section titled “MCP サーバーの設定:2 つの方法”

方法 1:STDIO(ローカルプロセス)

Section titled “方法 1:STDIO(ローカルプロセス)”
[mcp_servers.docs]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/docs"]
env = { API_KEY = "sk-xxxxx" }

実践例:Context7 につなぐ(開発ドキュメントの強い味方)

[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7"]
env = { UPSTASH_API_KEY = "your_key_here" }

方法 2:Streamable HTTP(0.46.0 の新機能!)

Section titled “方法 2:Streamable HTTP(0.46.0 の新機能!)”

これは 0.46.0 の大きなアップデートで、リモートの MCP サーバーに接続できます。

# まず実験的な RMCP クライアントを有効化
experimental_use_rmcp_client = true
[mcp_servers.figma]
url = "http://127.0.0.1:3845/mcp"
# 任意:環境変数で Bearer Token を渡す
bearer_token_env_var = "FIGMA_TOKEN"

OAuth ログイン対応

# OAuth 対応の MCP サーバーにログイン
codex mcp login figma
# ログアウト
codex mcp logout figma

人気の MCP サーバーおすすめ一覧

Section titled “人気の MCP サーバーおすすめ一覧”
サーバー用途設定例
Context7最新の開発ドキュメントにアクセスnpx @upstash/context7
FigmaFigma のデザインファイルを読み取り・操作Streamable HTTP + OAuth
Playwrightブラウザテストの自動化npx @playwright/mcp
Chrome DevToolsChrome ブラウザのデバッグSTDIO 起動
GitHubPR や Issues を管理(git より高機能)npx @github/github-mcp-server
SentryエラーログにアクセスStreamable HTTP
# MCP サーバーを追加
codex mcp add docs -- npx -y docs-server --port 4000
# すべてのサーバーを一覧表示
codex mcp list
# 単一サーバーの詳細を表示(JSON 形式)
codex mcp get docs --json
# サーバーを削除
codex mcp remove docs
# OAuth のログイン / ログアウト
codex mcp login figma
codex mcp logout figma
[mcp_servers.my_server]
command = "my-server"
args = ["--verbose"]
# 任意:デフォルトのタイムアウトを上書き
startup_timeout_sec = 20 # デフォルト 10 秒
tool_timeout_sec = 120 # デフォルト 60 秒
# 任意:設定を消さずに一時的に無効化
enabled = false

> デバッグのコツ:MCP サーバーの起動に失敗したら、~/.codex/log/codex-tui.log のログを確認してください。


以前の MCP はローカルプロセス(STDIO)にしか接続できませんでしたが、これからは任意の HTTP サーバーに接続できます。つまり:

  • :check_mark_button: 社内ネットワーク上の API に接続できる
  • :check_mark_button: クラウドサービス(Linear、Figma など)に接続できる
  • :check_mark_button: OAuth 2.0 ログインに対応
  • :check_mark_button: Bearer Token 認証が使える

1. もっともシンプルな HTTP MCP

experimental_use_rmcp_client = true
[mcp_servers.linear]
url = "https://mcp.linear.app/mcp"

2. Bearer Token 認証付き

experimental_use_rmcp_client = true
[mcp_servers.internal_api]
url = "https://api.mycompany.com/mcp"
bearer_token_env_var = "INTERNAL_API_TOKEN"

シェルで環境変数を設定します。

export INTERNAL_API_TOKEN="your_secret_token"
codex

3. OAuth 2.0 ログイン

experimental_use_rmcp_client = true
[mcp_servers.figma]
url = "https://mcp.figma.com"
# 注意:bearer_token_env_var は不要

その後、次を実行します。

codex mcp login figma
# ブラウザが開いて OAuth ログインが完了します

Streamable HTTP の問題を切り分ける

Section titled “Streamable HTTP の問題を切り分ける”

問題が起きたら、次を試してください。

  1. フラグが有効か確認する
grep experimental_use_rmcp_client ~/.codex/config.toml
# ここで次が見えるはず:experimental_use_rmcp_client = true
  1. 接続性をテストする
curl -v https://mcp.linear.app/mcp
# サーバーに到達できることを確認
  1. 詳細ログを確認する
RUST_LOG=debug codex
tail -f ~/.codex/log/codex-tui.log

> 既知の問題 #4707 参照):Windows では一部の MCP サーバーで missing field command エラーが出ることがあります。現在修正中です。


1. Profiles:設定をワンクリックで切り替える

Section titled “1. Profiles:設定をワンクリックで切り替える”
# デフォルト設定
model = "gpt-5-codex"
approval_policy = "untrusted"
# Profile 1:集中モード(o3、高推論)
[profiles.focus]
model = "o3"
model_reasoning_effort = "high"
approval_policy = "never"
sandbox_mode = "workspace-write"
# Profile 2:安全モード(読み取り専用 + 必ず承認)
[profiles.safe]
model = "gpt-4o"
approval_policy = "untrusted"
sandbox_mode = "read-only"
# Profile 3:高速プロトタイピング(全自動)
[profiles.prototype]
model = "gpt-5-codex"
approval_policy = "never"
sandbox_mode = "workspace-write"

使い方:

codex --profile focus "このアルゴリズムを最適化して"
codex --profile safe "セキュリティ脆弱性をレビューして"
codex --profile prototype "TODO アプリを作って"

2. カスタムモデルプロバイダー

Section titled “2. カスタムモデルプロバイダー”

例 1:ローカル Ollama を使う

model = "mistral"
model_provider = "ollama"
[model_providers.ollama]
name = "Ollama"
base_url = "http://localhost:11434/v1"
wire_api = "chat"

> ヒント:LM Studio で API Server を有効にしてください(Settings → Developer → Enable API Server)。

例 2:Azure OpenAI

model = "gpt-4o"
model_provider = "azure"
[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY"
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses"

例 3:サードパーティ API(Mistral AI など)

model = "mistral-large"
model_provider = "mistral"
[model_providers.mistral]
name = "Mistral"
base_url = "https://api.mistral.ai/v1"
env_key = "MISTRAL_API_KEY"
wire_api = "chat"
# カスタム HTTP ヘッダー
http_headers = { "X-Custom-Header" = "value" }
# 環境変数から読み込むヘッダー
env_http_headers = { "X-User-ID" = "MY_USER_ID" }

3. ネットワーク調整(重要!)

Section titled “3. ネットワーク調整(重要!)”

各モデルプロバイダーごとに、ネットワークパラメータを個別に設定できます。

[model_providers.openai]
name = "OpenAI"
base_url = "https://api.4allapi.com/v1"
env_key = "OPENAI_API_KEY"
# ネットワーク調整
request_max_retries = 4 # リトライ回数(デフォルト 4)
stream_max_retries = 10 # ストリーム切断後の再接続回数(デフォルト 5)
stream_idle_timeout_ms = 600000 # アイドルタイムアウト 10 分(デフォルト 5 分)

> 使用シーン:カフェの Wi-Fi などネットワークが不安定な環境では、リトライ回数やタイムアウトを増やすと効果的です。

Codex は基本的に現在の環境変数をすべて引き継ぎますが、制御したい場合もあります。

[shell_environment_policy]
# 継承ポリシー:all(すべて) | core(重要な変数のみ) | none(空にする)
inherit = "core" # HOME, PATH, USER などだけを引き継ぐ
# 機密変数を除外(ワイルドカード対応)
exclude = ["AWS_*", "AZURE_*", "*_SECRET"]
# 強制的に設定
set = { CI = "1", NODE_ENV = "test" }
# ホワイトリストモード(設定した場合はこれらだけを残す)
include_only = ["PATH", "HOME", "USER"]

実践例:CI/CD 環境

[shell_environment_policy]
inherit = "none"
set = {
PATH = "/usr/bin:/bin",
CI = "true",
NODE_ENV = "production"
}

Codex は次の 3 か所の AGENTS.md を自動で読み込み、優先順位順に統合します。

  1. ~/.codex/AGENTS.md - グローバルな個人設定
  2. プロジェクトルートの AGENTS.md - プロジェクト規約
  3. 現在のディレクトリの AGENTS.md - ローカル指示

例:~/.codex/AGENTS.md(個人のスタイル)

# 私のコーディングスタイル
## 共通ルール
- JavaScript ではなく TypeScript を使う
- 関数名はキャメルケース
- テストは Jest を使い、他のフレームワークは使わない
## Python プロジェクト
- Black で整形する
- テストは pytest で書く
- 型注釈は必ず完全に書く
## 禁止事項
- 依存関係を勝手にインストールしない。まず私に確認する
- package.json のバージョン番号を変更しない

例:プロジェクトルートの AGENTS.md(チーム規約)

# このプロジェクトのガイド
## アーキテクチャ
- バックエンド:Django + PostgreSQL
- フロントエンド:React + TailwindCSS
- API:RESTful。バージョンプレフィックスは /api/v1/
## コードレビューのチェックポイント
- [ ] すべての API に単体テストがある
- [ ] データベースマイグレーションファイルが生成されている
- [ ] README が更新されている
## 特別ルール
- 日付フォーマットは ISO 8601 に統一する
- エラーコード範囲:4000-4999 はクライアントエラー、5000-5999 はサーバーエラー

> Pro Tip:会社で CLAUDE.md を使っているなら、フォールバック用のファイル名として設定できます。 > > TOML > project_doc_fallback_filenames = ["CLAUDE.md", ".agentrules"] >

6. 通知システム:Codex に完了を知らせてもらう

Section titled “6. 通知システム:Codex に完了を知らせてもらう”

方法 1:TUI 内蔵通知(簡単)

[tui]
# すべての通知を有効化
notifications = true
# または特定の種類だけ有効化
notifications = ["agent-turn-complete", "approval-requested"]

対応している端末:iTerm2、Ghostty、WezTerm(macOS Terminal と VS Code の端末は非対応)。

方法 2:外部スクリプト通知(上級)

notify = ["python3", "/Users/あなた/.codex/notify.py"]

notify.py を作成します。

#!/usr/bin/env python3
import json
import sys
import subprocess
notification = json.loads(sys.argv[1])
if notification["type"] == "agent-turn-complete":
message = notification.get("last-assistant-message", "Task completed!")
# macOS 通知
subprocess.run([
"osascript", "-e",
f'display notification "{message}" with title "Codex"'
])
# または terminal-notifier を使う
# subprocess.run(["terminal-notifier", "-title", "Codex", "-message", message])

7. OpenTelemetry:すべてを記録する

Section titled “7. OpenTelemetry:すべてを記録する”
[otel]
environment = "production"
exporter = { otlp-http = {
endpoint = "https://otel.mycompany.com/v1/logs",
protocol = "binary",
headers = { "x-api-key" = "${OTEL_TOKEN}" }
}}
log_user_prompt = false # ユーザー入力は記録しない(プライバシー保護)

記録されるイベント:

  • codex.conversation_starts - 会話開始
  • codex.api_request - API リクエスト(処理時間を含む)
  • codex.tool_decision - ツール利用の判断(承認 / 拒否)
  • codex.tool_result - ツール実行結果

Codex の強みは、OpenAI だけでなく、ほぼすべての互換 API プロバイダーにつなげられる点にあります。この章では、さまざまなカスタム API のシナリオを詳しく解説します。

API が OpenAI の仕様に従っていれば、そのまま設定できます。

Codex接入4All API

1.2 LM Studio(GUI で使えるローカルモデル)

Section titled “1.2 LM Studio(GUI で使えるローカルモデル)”
model = "lmstudio-community/Meta-Llama-3-8B-Instruct-GGUF"
model_provider = "lmstudio"
[model_providers.lmstudio]
name = "LM Studio"
base_url = "http://localhost:1234/v1"
wire_api = "chat"

> ヒント:LM Studio で API Server を有効化してください(Settings → Developer → Enable API Server)。

1.3 Anthropic Claude(プロキシ経由)

Section titled “1.3 Anthropic Claude(プロキシ経由)”

Codex は標準では Anthropic API を直接サポートしていませんが、変換プロキシを使えば接続できます。

model = "claude-3-5-sonnet-20241022"
model_provider = "anthropic-proxy"
[model_providers.anthropic-proxy]
name = "Anthropic Claude (via Proxy)"
base_url = "https://localhost:8080/v1" # 変換プロキシを起動する
env_key = "ANTHROPIC_API_KEY"
wire_api = "chat"

変換プロキシのセットアップ(LiteLLM を使用):

pip install litellm[proxy]
# プロキシを起動
litellm --model claude-3-5-sonnet-20241022 --port 8080

2.1 社内 API(カスタム認証付き)

Section titled “2.1 社内 API(カスタム認証付き)”
model = "company-gpt-4"
model_provider = "internal"
[model_providers.internal]
name = "Company Internal API"
base_url = "https://ai.company.internal/v1"
env_key = "COMPANY_API_KEY"
wire_api = "chat"
# カスタム HTTP ヘッダー
http_headers = {
"X-Department" = "engineering",
"X-Cost-Center" = "ai-research"
}
# 環境変数から読み込むヘッダー
env_http_headers = {
"X-User-ID" = "EMPLOYEE_ID",
"X-Session-Token" = "SSO_TOKEN"
}
# ネットワーク調整(社内ネットワークは安定していることが多い)
request_max_retries = 2
stream_idle_timeout_ms = 180000 # 3 分

環境変数を設定する

export COMPANY_API_KEY="your_internal_key"
export EMPLOYEE_ID="E12345"
export SSO_TOKEN="sso_token_from_login"
codex

2.2 追加のクエリパラメータが必要な API

Section titled “2.2 追加のクエリパラメータが必要な API”
[model_providers.custom_with_params]
name = "Custom API with Query Params"
base_url = "https://api.example.com/inference"
env_key = "CUSTOM_API_KEY"
wire_api = "chat"
# クエリパラメータを追加
query_params = {
version = "2024-01",
region = "us-east-1",
tier = "premium"
}

生成される URL:[completions?version=2024-01&region=us-east-1&tier=premium](https://api.example.com/inference/chat/completions?ve