🔖

【CodexSDK爆誕】Difyやn8nでワークフローを頑張る前に、CLI(AIエージェント)に丸投げすべき!

に公開

「AIエージェント」と「ワークフロー」の違いを知らないせいで、めっちゃ遠回りしましたわ…。


前回「Gemini 2.5 Pro→MCP→MySQL接続でデータ分析を自動化しようとしたら微妙すぎた件」という記事を書きました。その後いろんなアプローチを検討し、最終的にCodexSDKが最強でした。

毎日取得しているYouTubeの再生数データを自動的にAIに分析させて、サマリーをLINEに通知させたいと思いました。ちなみにデータはMySQL(さくらVPS)を使っていて、SQLで取り出せます。

もやりたいですし、LINEやdiscordから直接CodexやGeminiに質問し、分析結果が返ってくるみたいなのも実装したかったんですが、私自身の知識不足もあって、仕様が二転三転したんですよね。

最終的に、node(Express)サーバーに同梱されているCodexSDK(CLI)を呼び出すのが最良という結論になりましたが、difyやn8nなど流行りツールも一通り試しての失敗談も兼ねてまとめます。

0. ChatGPTのコネクター検証&GeminiAPIが不安定すぎる問題

前回の記事の振り返りとなりますが「ChatGPTのコネクタ→MCP→MySQL」なら一瞬で分析結果が返ってきました。しかし当時スケジュール機能に対応しておらず、拡張性も高くはありません。

そこで無料枠のGeminiAPIを利用したら、謎のトークンエラーにより動作が安定しませんでした。GeminiCLIやCodexCLIは安定していたので、こっち使うのが無難だねという結論になりました。

今振り返ると「CLI=AIエージェントである」という理解が乏しい状態で「GeminiAPIの謎仕様」と格闘する二重苦だったので、どちらか片方が問題なければ、ここまで苦戦しなかったでしょう…。

1. CLIを自動化で使うには会話履歴を自作する必要ありました…

「じゃあCLIを呼び出せるnodeサーバ作って終わり!」って思ったのですが、ヘッドレスモードでCodexCLIやGeminiCLIを呼び出した場合はresume未対応という衝撃事実を突きつけられます。

要するに会話ができません。私が「今週の分析結果はどう?」と聞いて回答をもらったあとに「2か月前と比較してどうだった?」と再質問できない。一つ前に何を話ししたか覚えてないんです。

先にネタバレしておくと、10月6日にリリースされたCodexSDKは会話履歴機能もあるので神という話になるのですが、当時まだリリースされておらず、履歴管理を自作する必要があったのです。

tmux で強引に取得できないか試す

とはいえ会話履歴の実装は「車輪の再発明」感が強すぎるので、最初はtmaxで人間がターミナルを操作しているかのように見せかけて、回答部分だけ正規表現で取ってくる力技を試しました。

しかし、ChatGPTに何度頑張ってもらってもノイズが含まれてしまって安定しませんでした。そもそもCLIの仕様は毎週のようにコロコロ変わるので、tmuxを使う案がベストとも言い難いですね。

なので車輪の再発明だとしても「履歴管理を自作しないと会話は無理っぽい」が当時の結論です。

LLMとの会話履歴は意外と原始的!

仕方ないので会話履歴、つまり「ChatGPTが前回の会話内容をどのように把握しているか」勉強したのですが、最初私はLLMが何かしらの方法で会話内容を「記憶している」と思っていました。

しかし実際は、メッセージを送る度に過去の会話履歴を全部くっつけて送っているそうなのです。

例えばChatGPTと100回会話したとして、過去1〜99回分の会話と最新のメッセージを配列などで送っているだけ!その過程で履歴が圧縮されたりするから、たまにおバカさんになる…とのこと。

簡易的には、会話内容を毎回「HISTORY-{id}.md」とかに追記させておいて、プロンプトの頭に「このファイルを読んで前回の会話内容を把握してください」と指示するアプローチでも良いと。

2. 最近流行ってるDify, n8nだったら解決できるんじゃない??

その後「そういや最近Difyとかn8nとか聞くけど、あれならいけるんじゃない?」と思いました。まず不安定だったGeminiAPIに再挑戦し、ダメだったらCLIを呼び出す流れを試そうとしました。

Dify(GeminiAPI編)

MCPサーバーとうまく連携できず断念。 MCPサーバー側を改修すれば動くかもしれない雰囲気はありましたが、他ツールで動いてるのにDifyのためだけに改修する必要性は感じなかったんです。

あと(エンジニア目線かもですが)n8nと比べてGUIの癖が強く感じたこと、自前VPSで立ち上げようするとDockerコンテナが複数必要になるので、やりたいことに対して大げさな印象でした。

n8n(GeminiAPI編)

(エンジニア目線かもですが)DifyよりはGUIが直感的。Dockerコンテナ一つで動くのも好印象。

とはいえGUIベースであるという宿命か、ChatGPTと相談しながら実装するには相性が悪すぎる。ChatGPTに画面キャプチャを見せながら相談する必要があり、何度も往復する必要があります。

一応JSONでインポートできる形式にもしてくれますが、なにかしら壊れてるので安定しません。

あとn8nのGUIでJSON形式を動的に設定するやつ(fx?)は頭に=をつけると失敗するのですが、ChatGPTに何度聞いても気が付かず、Geminiに聞くまで一生解決できなかった、などの問題も…。

最終的にはGPT5-Codex先生に頑張ってもらい、Difyで断念したMCPサーバー接続まで行きましたが、GeminiAPIの謎エラー(前のトークンとは別?)が発生し、codexさんもお手上げ状態です。

3. 「AIエージェント」「ワークフロー」の違いを学ぶべきでした

仕方がないので「n8n→Gemini CLI or Codex CLI→MCP→MySQL」にしようかと思いましたけど、CLIコンテナ自体にExpressサーバ機能も有することになったので、n8nを経由する必要がない笑

あくまで私の印象ですが、Difyやn8nなどのワークフローツールは「それぞれの処理が単純」かつ「最低4つ以上のAPIを横断する」ようなシチュエーションでもない限り、必要ない気がします。

なぜなら、それ以外のほとんどの場面で「AIエージェント(CLI)」に丸投げした方が楽だから!!

ワークフロー(Dify, n8n)

「n8n→GeminiAPI→MCP(どのMCPツールを使うか選ばせる)→GeminiAPI→MCP(MySQLを実行)」など逐一ノード追加する必要があり、コードなら10行で終わることも大げさな感じになります。

そもそもワークフローは、AI時代以前からある自動化と同じ仕組みと言って良い。仮にGeminiAPIが問題なく動作していたとしても、CLIと同じ操作感を実現するのは超しんどそうな感じでした。

AIエージェントを設定できるノードを使えば、良いとこ取りできる場面もあるかもしれませんが、なら最初から、AIエージェント=CLI一本呼ぶ方がシンプルじゃない?という印象は拭いきれず。

AIエージェント(CodexCLI, GeminiCLI, ClaudeCode等)

「接続されているMCPツールを使って、今週の再生数を集計してください」と言うだけで完了!MCPの設定も簡単で設定ファイルに数行書くだけ、あとはAIが自立的に考えてやってくれます。

ChatGPTとかのユーザー体験に慣れすぎて当たり前だと思ってましたが、あれも今はAIエージェントみたいなもの。難しい質問だったらネットで検索するとか自律的に色々やってくれますよね?

これをワークフローで実現しようとすると、細かい条件をしっかり定義していく必要があります。

4. 今までの課題を全て解決した「CodexSDK」が最強すぎた!

ワークフローはやめてCLI(AIエージェント)一本に決めましたが、会話履歴の問題があります。

簡易的には、会話内容を毎回「HISTORY-{id}.md」とかに追記させておいて、プロンプトの頭に「このファイルを読んで前回の会話内容を把握してください」と指示するアプローチでも良いと。

こんな感じでCodex先生に実装してもらったあとに、CodexSDK爆誕という大発表がありました。

さらっとしか書いてないけど、これの強みはCLI直呼び出し唯一の弱点であった会話履歴が使えることです。しかもSDK内部ではCLIを使ってるので、.codexディレクトリそのまま使い回せます。

ちなみにClaudeCodeは「Claude Code SDK」を使ったり、そもそもコレ使わなくてもヘッドレスモードでresume使えたりするそうですが、残念ながらGeminiは現時点まだ未対応となってます。

[まとめ] まずはAIエージェント、ダメならワークフローの順で!

長々と書きましたが、ほとんどの場面でAIエージェント(CodexSDK、ClaudeCodeSDK)を使うのが最良となるでしょう。Gemini使うのは今ちょっと面倒なので、後回しで良いかもですねぇ。

その上で、「AIエージェントだけでは完結しない」要件に限り、Difyやn8nと連携させるという順番で仕様を考えるようにすれば、私のように無駄な遠回りしなくて済みます。参考にしてください。

そうそう、CLI経由ならAPIキーが不要=サブスク範囲で使えるのも大きいです。API経由は心理的なハードルも大きいですからね。ただ規約的にOKかよくわかりません。実際の所は自己責任で!

Discussion