背景:Agentic CodingでCMSの使われ方が変わりつつある
Claude CodeやCodex、CursorといったAIエージェントが、開発ワークフローの中で直接コードを書き、ツールを操作する場面が増えてきた。いわゆるAgentic Codingと呼ばれる流れの中で、CMSもその操作対象になりつつある。
コンテンツの取得や作成、スキーマの確認、型の生成——これまで管理画面やAPIドキュメントを見ながら人間が手動で行っていた操作を、AIエージェントが開発の流れの中で自然に行うケースが出てきている。
microCMSにはマネジメントAPIが用意されているし、MCP(Model Context Protocol)サーバーも公式で提供されている。APIとしてのインターフェースはすでにある。ただ、CLIがなかった。AIエージェントがより効率的にmicroCMSを操作する手段として、CLIがあると便利ではないかと考え、個人開発で作ってみた。
なぜAPIやMCPだけでなくCLIなのか
マネジメントAPIがあり、MCPサーバーもある中で、なぜCLIを作ったのか。いくつかの理由がある。
シェルが叩ける環境なら動く。 MCPはクライアント側が対応している必要がある。対応状況はエージェントや環境によってまちまちで、使える場面が限られることがある。CLIはシェルさえあれば動くので、エージェントの種類を選ばない。実際に、今回Claude CodeとCodexの両方で同じCLIを使うことができた。
1コマンド=1操作の明確さ。 APIを叩くには、認証ヘッダーの設定、エンドポイントURLの構築、リクエストボディの組み立てが必要になる。CLIなら microcms content list tech_articles --json のように、コマンドライン一行で操作が完結する。AIエージェントにとって「何をすれば何が起きるか」が予測しやすい。
パイプやスクリプトとの組み合わせ。 microcms content list ... --json | jq '.items[0]' のように、既存のUNIXツールチェインとそのまま組み合わせられる。AIエージェントはシェルスクリプトを書くのが得意なので、この親和性は実用上大きい。
AIエージェント以外の用途にも使える。 MCPはAIエージェント専用のプロトコルだが、CLIはGitHub ActionsやデプロイスクリプトなどのCI/CDでもそのまま使える。一つのツールで用途が広い点は、作る側にとっても使う側にとってもメリットがある。
また、MCPサーバーを接続するとツール定義がコンテキストウィンドウに載るため、接続しているだけでトークンを消費する。CLIの場合は必要なときにコマンドを実行するだけなので、コンテキストへの影響が比較的小さいという側面もある。
CLIの概要
コマンド体系
auth / api / content / media の基本操作に加え、schema pull と types generate による型生成フロー、validate による投稿前の軽量チェック、docs / search / spec による参照系操作を備えている。
参照系(docs / search / spec)はMCPを内部的に利用する構成にしており、APIキーなしで使える。
設計で意識したこと
AIエージェントから使われることを前提に、2つのことを意識した。
--json出力を安定させる。 成功時は{"ok":true,"data":...,"meta":...}、失敗時は{"ok":false,"error":{"code","message","retryable"...},"meta":...}というトップレベル構造を固定している。エージェントがokを見て分岐し、error.codeでハンドリングできるようにした。- 失敗時の終了コードを固定する。 エージェントがシェルスクリプトの中でエラーハンドリングの分岐を書きやすいようにしている。
最小の利用例
# API確認
microcms api list --json
# コンテンツ確認
microcms content list tech_articles --json
# 投稿前の軽量チェック
microcms validate tech_articles --file payload.json --json
# 公式ドキュメント参照(APIキー不要)
microcms docs list --json
microcms docs get --category content-api --file "コンテンツ一覧取得API.md"AIエージェントに実際に触らせてみた
CLIを作っただけでは「AIエージェントに向いているはず」という仮説にすぎない。実際にエージェントに触らせてみて、何が起きるかを確認した。
やったこと
Codexに対して、CLIを使ったmicroCMSへの入稿ワークフローを一通り試させた。具体的には以下の操作を行った。
config doctorで環境確認api list/api infoでAPI構造の把握validateで投稿前のペイロード検証content create/content updateでコンテンツの作成・更新content list/content getで結果の確認media uploadでメディアファイルのアップロード
うまくいったこと
JSON出力の構造が一定であることが、エージェントの自動化にとって大きかった。Codexは ok フィールドを見て成功・失敗を判断し、失敗時は error.code でハンドリングするスクリプトを自然に書いていた。出力構造が安定しているおかげで、エージェント側のパース処理が壊れにくい。
api info → validate → content create の流れがシンプルだった点も良かった。エージェントがスキーマを確認し、ペイロードを検証してから投稿する、という入稿ワークフローを自然に組み立てていた。
また、失敗時に --verbose を付けるとAPIの生メッセージ(例:has unexpected data type)まで見えるため、エージェントが原因を特定して次の一手を考えやすかった。
見つかった課題
validate と content create の型判定にズレがあった。 具体的には、セレクトフィールドに kind: ["learning"] を送ると、validate は Field type mismatch: kind expected string で失敗するが、content create は成功するケースがあった。逆に kind: "learning" で content create すると、API側で has unexpected data type が返った。事前検証のルールと実APIの受理条件が一致していない場面がある。
media list コマンドがなかった。 既存メディアのURLを確認したい場面で、CLIだけでは完結できなかった。結果的にMCPサーバーの microcms_get_media を補助的に使って対応した。CLIだけでワークフローを完結させるには、一覧取得も必要だという気づきだった。
ネットワークエラーのメッセージが粗い。 通信の揺れが UNKNOWN_ERROR: fetch failed にまとまることがあり、原因の切り分けがしづらい場面があった。--retry 5 --timeout 20000 を付けることで安定したが、エラーメッセージ自体の粒度は改善の余地がある。
フィードバックから改善したこと
Codexとのやり取りで見つかった media list の不足は、実際にコマンドを追加して対応した。CLIだけでメディアの一覧取得からアップロード、コンテンツ作成までを完結できるようになった。
この改善は、自分だけで使っていたら気づかなかったかもしれない。エージェントに一通りのワークフローを通させることで「ここが足りない」が具体的に見えた、というのは収穫だった。
この体験から感じたこと
AIエージェントにCLIを触らせてみて感じたのは、出力の予測可能性が想像以上に重要だということ。JSON構造が固定されていること、終了コードが定義されていること、--verbose で詳細が見えること——これらがあるとエージェントは自律的にエラーハンドリングを組み立てられる。逆にこれが不安定だと、エージェントの挙動も不安定になる。
もう一つは、エージェントに実際に使わせることが最良のテストだということ。人間が使うときには気にならない粒度の問題(media list がない、validate と create の整合性など)が、エージェントのワークフローでは明確なブロッカーになる。「AIフレンドリー」を謳うなら、AIに実際に触らせてみるのが一番早い。
現時点でのまとめ
このCLIはまだ検証段階にある。ただ、実際にAIエージェントに触らせてみたことで、「CMSにとってAIフレンドリーなインターフェースとは何か」について、いくつかの感触を得ることができた。
出力構造の安定性、コマンド体系の明確さ、エラー情報の粒度——こうした地味な部分が、AIエージェントにとっての使いやすさを左右する。派手な機能よりも、予測可能性の高さが重要だと感じている。
Agentic Codingの流れは今後も加速していくと思う。その中でCMSの操作がどう変わっていくのか、引き続き実運用の中で観察していきたい。
- microCMS 公式ドキュメント: https://document.microcms.io/
- npm: https://www.npmjs.com/package/@mrmtsu/mcms-cli
- GitHub: https://github.com/mrmtsu/mcms-cli