Claude Code から Codex CLI を呼び出すなら MCP と SKILL/BASH どっちがいい?実際に使って感じたこと

スポンサーリンク
Claude CodeからCodex CLIを呼び出す2つの方法(MCP vs SKILL/BASH)を選ぶ開発者のイメージ IT技術

Claude Code の SKILL から Codex CLI を呼び出すとき、あなたは「MCP 経由」と「SKILL/BASH(codex exec)」のどちらを選んでいますか? 筆者は最初「MCP のほうが正確そう」という先入観で使い始めました。しかし実際には処理が重く、何が起きているか見えないブラックボックス感に悩み、SKILL/BASH に切り替えた経験があります。この記事では、両者を実際に使って感じた違いと、使い分けの指針をお伝えします。

関連記事: 生成AI活用の記事一覧 / IT技術の記事一覧

スポンサーリンク

はじめに — Claude Desktop の SKILL から Codex を呼び出す選択肢

Claude Desktop の SKILL 機能を使うと、codex exec などのコマンドを呼び出してAIエージェントに作業を委ねることができます。そのとき「Codex の呼び出し方」として、大きく2つの選択肢があります。

  • MCP 経由: Model Context Protocol サーバーとして Codex を接続し、JSON-RPC でやり取りする
  • SKILL/BASH: SKILL の中で codex exec コマンドを直接実行する

「MCP のほうが正確そう」という先入観

MCP(Model Context Protocol)はAnthropicが提唱した標準的なプロトコルです。そのため「構造化された通信ができて正確なはず」「セッション管理もしっかりしているはず」という印象を持ちやすいです。筆者も最初はそう考えて、MCP 経由で Codex を呼び出すことを選びました。出典: developers.openai.com

Claude Code MCP経由とSKILL/BASHの呼び出し比較図
MCP経由とSKILL/BASH、2つのCodex呼び出し方法

まず MCP を試した — 期待と現実のギャップ

期待していたこと:構造化・セッション管理・正確な出力

MCP を使えば、Codex との通信が JSON-RPC 2.0 ベースの構造化メッセージになります。そのため、以下のようなメリットを期待していました。

  • リクエスト/レスポンスが明確に定義されていて信頼性が高い
  • セッション管理ができて長期の処理も安心
  • ツール呼び出しの結果が構造化されて扱いやすい

現実:処理が重く、ブラックボックスで不安

実際に使ってみると、期待とはかなり違いました。まず処理が非常に重く、数分〜数十分待たされることがありました。さらに困ったのは「今何をしているのか全くわからない」点です。MCP 経由では Codex の処理状況がリアルタイムで見えず、ただひたすら待つしかありません。

この「ブラックボックス感」は想像以上にストレスでした。処理が止まっているのか、進んでいるのか、失敗しているのか、判断できないのです。出典: morphllm.com

GitHub Issue が示す根本原因(#15567, #15320)

この問題は個人的な環境の問題ではなく、Codex の既知の問題です。GitHub のリポジトリには類似の問題が複数報告されています。ツール呼び出しのストリーミングが未実装であったり、TUI(ターミナル UI)への反映が不完全だったりするケースが確認されています。出典: github.com/openai/codex

つまり、MCP 経由で Codex を使う際の「見えない問題」は、現時点では構造的な課題であり、すぐには解決しないということです。

MCP が本当に得意な用途は CRUD 操作

MCP の設計思想:JSON-RPC 2.0 ベースの即レスポンス前提

MCP がうまく機能するケースも理解しておく必要があります。MCP は JSON-RPC 2.0 をベースにした同期型のリクエスト/レスポンスプロトコルです。そのため、すぐにレスポンスが返ってくる処理と相性がよいです。

agnost.ai の記事によると、”The original MCP design assumed tools return results quickly.”(日本語訳: MCPの元々の設計は、ツールが結果を素早く返すことを前提にしていた)とされています。出典: agnost.ai

得意領域と苦手領域

具体的な得意・苦手をまとめると以下のとおりです。

  • 得意: Google カレンダーへの予定登録・取得、データベースのレコード取得、Slack メッセージの読み込みなど「即レスポンスが返る CRUD 操作」
  • 苦手: コード生成・テスト実行・リファクタリングなど「長時間かかる AI タスク」

Claude Skills と MCP の技術的な比較によると、MCP サーバーはコンテキストを大量に消費するという課題もあります。たとえば5つのサーバーで58ツールを使うと、会話を始める前からすでに約55,000トークンを消費してしまいます。出典: IntuitionLabs

Anthropic 公式も Tasks プリミティブを実験的追加(2025年11月)

こうした課題を受けて、Anthropic は 2025年11月の MCP 仕様アップデートで「Tasks プリミティブ」を実験的に追加しました。これは「call-now, fetch-later」パターンと呼ばれる非同期処理の仕組みで、長時間処理への対応を目指すものです。出典: WorkOS

タスクは workinginput_requiredcompletedfailedcancelled などの状態を持ち、クライアントが後から結果を取得できるようになっています。ただし、2026年3月現在はまだ実験的な機能です。出典: DEV Community

ArminRonacher の批判と Cloudflare の事例

Flask の作者として知られる Armin Ronacher 氏は、MCP について「MCP よりコード生成のほうが効率的」と批判しています。また Cloudflare の事例では、2,500 エンドポイントを MCP にすると 244,000 トークンを消費するのに対し、コード生成なら 1,000 トークンで済むという試算も示されています。

つまり、MCP は「すべての用途に最適」ではなく、用途に応じた使い分けが重要だということです。出典: morphllm.com

MCPとSKILL/BASHの用途別使い分けフロー図
MCPとSKILL/BASHの使い分け判断フロー

SKILL/BASH(codex exec)に切り替えた

リアルタイムで見える安心感

MCP の代わりに SKILL/BASH で codex exec を使ってみると、体験が大きく変わりました。Codex の出力がリアルタイムでターミナルに流れてくるので、「今ここを処理しているんだ」とひと目でわかります。

この「可視性」は思ったよりも大きな安心感をもたらしてくれます。処理が長引いても「ちゃんと動いている」とわかるので、不安になって強制終了してしまうことが減りました。また問題が起きたときも、エラーメッセージをすぐに見られるので対処しやすいです。

Skills は Claude Code、Claude.ai、API のどこでも同じように動作します。つまり一度書いたスキルを複数の環境で再利用でき、MCP サーバーのような大量のトークン消費も発生しません。出典: claude.com

既知のバグと注意点(#15536, #15524, #15527)

ただし、SKILL/BASH にも既知のバグがあります。使う前に把握しておくと良いでしょう。

  • #15536: 処理が失敗してもexit code 0を返すケースがある(成功と誤認しやすい)
  • #15524: read-only サンドボックスでも書き込みが通ってしまうことがある
  • #15527: ネスト実行時に親の THREAD_ID を汚染するケースがある

これらのバグは実際に問題になることもあります。特に exit code の問題は、エラーを見落とす原因になりかねません。出典: github.com/openai/codex

次のセクションで紹介する codex exec --json モードを使うと、この問題を回避しやすくなります。

MCP vs SKILL/BASH 比較表

ここまでの内容をまとめた比較表です。

観点MCPSKILL/BASH
進捗の見え方見えない(ストリーミング未実装)リアルタイムで確認できる
処理の重さ重い(待ち時間が長い)軽い(即時実行)
向いている用途CRUD・データ取得・API連携AIコード生成・長時間タスク
安定性セッションが不安定なことがある中程度(既知バグあり)
コンテキスト消費多い(サーバー設定で数万トークン)少ない(スキルは必要時のみ読み込み)
将来性高い(Tasks 対応で改善中)低め(app-server 移行中)

現時点では、Codex CLI を使った AI タスク実行には SKILL/BASH のほうが実用的です。しかし MCP も着実に改善されているため、将来的な展望も踏まえて選択することが重要です。出典: builder.io

発展 Tips:SKILL 内で codex exec –json を使う

JSONL フォーマットで何が変わるか

通常の codex exec の出力はテキストですが、--json オプションを付けると JSONL(JSON Lines)フォーマットで出力されます。これにより、処理の成功・失敗をプログラムで確実に判定できるようになります。

JSONL の各行には処理のフェーズと状態が含まれます。そのため、「どの段階で何が起きたか」を正確に把握できます。

実際の JSONL サンプルと解説

実際の出力例を見てみましょう。

{"type":"thread.started","thread_id":"67e55044-..."}
{"type":"turn.started"}
{"type":"item.started","item":{"id":"item_0","type":"command_execution","command":"sh -c 'ls'","status":"in_progress"}}
{"type":"item.completed","item":{"id":"item_0","type":"command_execution","exit_code":0,"status":"completed"}}
{"type":"item.completed","item":{"id":"item_1","type":"agent_message","text":"\u5b8c\u4e86\u3057\u307e\u3057\u305f"}}
{"type":"turn.completed","usage":{"input_tokens":1200,"output_tokens":345}}

各行の意味は以下のとおりです。

  • thread.started: セッションが開始された
  • turn.started: 1回の処理ターンが開始された
  • item.started / item.completed: 個々のコマンドや応答の開始・完了
  • turn.completed: 処理ターンが完了し、トークン使用量も確認できる

exit code 問題への対処法

先ほど紹介したバグ #15536(失敗しても exit code 0 を返す)は、--json モードで対処できます。具体的には、出力の turn.failed イベントや各 itemexit_code フィールドを確認することで、失敗を確実に検知できます。

# 失敗時の出力例
{"type":"turn.failed","error":{"message":"Command failed with exit code 1"}}

SKILL のスクリプト内で JSONL をパースして turn.failed を検知する処理を入れることで、エラーを見落とすリスクを大幅に下げられます。

あわせて読みたいおすすめ書籍

AIエージェントの仕組みや実装をより深く理解したい方には、以下の書籍がおすすめです。LangChainやLangGraphを使った実践的な構築手法から、開発・運用のノウハウまでカバーしています。

まとめ・使い分け指針

今すぐ動かすなら SKILL/BASH

Claude Code から Codex CLI を呼び出す場合、現時点では SKILL/BASH(codex exec)が最も実用的な選択肢です。処理の進捗がリアルタイムで見え、軽快に動作します。また、コンテキストの消費も少なく済みます。

MCP は CRUD 操作とデータ取得に

MCP が真価を発揮するのは、すぐにレスポンスが返る操作です。具体的には以下のような用途に向いています。

  • Google カレンダーへの予定の作成・取得
  • データベースのレコード検索・更新
  • Slack のメッセージ読み込み・送信
  • 外部 API からのデータ取得

こうした CRUD 操作は MCP の設計思想に合っており、安定して動作します。

将来的には MCP の Tasks 対応に期待

MCP の Tasks プリミティブ(2025年11月実験追加)が安定すれば、長時間の AI タスクにも MCP が使えるようになります。その時点では使い分けの判断も変わってくるでしょう。

まとめると、使い分けの指針は次のとおりです。

  • 今すぐ Codex で AI タスクを動かすなら → SKILL/BASH(codex exec
  • カレンダー・DB・Slack などの CRUD 操作なら → MCP
  • エラーハンドリングを確実にしたいならcodex exec --json
  • 長時間タスクへの MCP 対応は → Tasks プリミティブの安定化を待つ

Claude Code の AI エージェント連携はまだ進化の途中です。ツールの特性を理解したうえで、用途に合った方法を選んでいきましょう。

関連記事: 生成AI関連記事の一覧

引用・出典

とつ

某SIer企業勤務。
生成AI(ChatGPT、Claude、Gemini)に強い関心を抱き、業務に積極的に活用している。本アカウントでは、最新技術の実践例と活用法を発信する。
また、仕事以外では家事育児やヘルスケアにおいても、生成AIの可能性を模索し、日常生活での利活用に努める。

老け顔から「とっつあん」とあだ名で呼ばれ、それが「とつ」といつしか略されるようになったのがハンドルネームの由来。
「リベラルアーツ大学」をきっかけに、稼ぐ力を養いたいという思いからBlogサイトの運営を開始し、Blogの成長とともにAWSのスキルアップにも注力している。
家族は妻と7歳長男、3歳次男。

とつをフォローする
IT技術生成AI
スポンサーリンク
シェアする
とつをフォローする

コメント

タイトルとURLをコピーしました