🆙 Codex 0.46.0 上級入門チュートリアル
🆙 Codex 0.46.0 上級入門チュートリアル
Section titled “🆙 Codex 0.46.0 上級入門チュートリアル”コア概念の徹底解説
Section titled “コア概念の徹底解説”1. Approval Policy:信頼を設計する
Section titled “1. Approval Policy:信頼を設計する”Codex は野良 AI ではありません。ちゃんとあなたに権限を求めます。設定ファイルには 4 つのポリシーがあります。
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 履歴を壊さないようにするためです。
3. Model:相棒を選ぶ
Section titled “3. Model:相棒を選ぶ”model = "gpt-5-codex" # デフォルトモデルよく使われるモデルのおすすめ:
o3- 推論力が非常に高く、複雑なタスク向き(ただし遅い)gpt-5-codex- コーディング向けに最適化。速度と品質のバランスが良いgpt-5- 汎用の強力モデルgpt-4o- 古参ながら安定感あり
推論の深さを調整する:
model = "o3"model_reasoning_effort = "high" # minimal | low | medium | highmodel_reasoning_summary = "detailed" # auto | concise | detailed | none> おまけ:model_reasoning_effort = "high" は、AI にエスプレッソを 3 杯飲ませるようなものです。より深く考えますが、その分お金もかかります。
MCP:Codex を万物につなぐ
Section titled “MCP:Codex を万物につなぐ”MCP(Model Context Protocol) は Codex 0.46.0 の目玉機能です。AI が外部ツール、サービス、データソースにアクセスできるようになります。
MCP とは?
Section titled “MCP とは?”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 |
| Figma | Figma のデザインファイルを読み取り・操作 | Streamable HTTP + OAuth |
| Playwright | ブラウザテストの自動化 | npx @playwright/mcp |
| Chrome DevTools | Chrome ブラウザのデバッグ | STDIO 起動 |
| GitHub | PR や Issues を管理(git より高機能) | npx @github/github-mcp-server |
| Sentry | エラーログにアクセス | Streamable HTTP |
MCP CLI コマンド早見表
Section titled “MCP CLI コマンド早見表”# 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 figmacodex mcp logout figma高度な MCP 設定
Section titled “高度な MCP 設定”[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 のログを確認してください。
0.46.0 の新機能:Streamable HTTP
Section titled “0.46.0 の新機能:Streamable HTTP”なぜ重要なのか?
Section titled “なぜ重要なのか?”以前の 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"codex3. 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 の問題を切り分ける”問題が起きたら、次を試してください。
- フラグが有効か確認する
grep experimental_use_rmcp_client ~/.codex/config.toml# ここで次が見えるはず:experimental_use_rmcp_client = true- 接続性をテストする
curl -v https://mcp.linear.app/mcp# サーバーに到達できることを確認- 詳細ログを確認する
RUST_LOG=debug codextail -f ~/.codex/log/codex-tui.log> 既知の問題( #4707 参照):Windows では一部の MCP サーバーで missing field command エラーが出ることがあります。現在修正中です。
高度な設定テクニック
Section titled “高度な設定テクニック”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 などネットワークが不安定な環境では、リトライ回数やタイムアウトを増やすと効果的です。
4. Shell 環境変数の管理
Section titled “4. Shell 環境変数の管理”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"}5. AGENTS.md:AI に渡すメモ
Section titled “5. AGENTS.md:AI に渡すメモ”Codex は次の 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 python3import jsonimport sysimport 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- ツール実行結果
カスタム API 設定の徹底ガイド
Section titled “カスタム API 設定の徹底ガイド”Codex の強みは、OpenAI だけでなく、ほぼすべての互換 API プロバイダーにつなげられる点にあります。この章では、さまざまなカスタム API のシナリオを詳しく解説します。
1. OpenAI API 互換のサービス
Section titled “1. OpenAI API 互換のサービス”API が OpenAI の仕様に従っていれば、そのまま設定できます。
1.1 4All API(超低価格!)
Section titled “1.1 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 80802. 企業内製 API
Section titled “2. 企業内製 API”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 = 2stream_idle_timeout_ms = 180000 # 3 分環境変数を設定する:
export COMPANY_API_KEY="your_internal_key"export EMPLOYEE_ID="E12345"export SSO_TOKEN="sso_token_from_login"codex2.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®ion=us-east-1&tier=premium](https://api.example.com/inference/chat/completions?ve