y-brew
TechBeansBrews

y-brew

HomeTechBeansBrews

© 2026 y-brew

記事一覧に戻る

Tech Article

•公開 2026年2月21日•

更新 2026年2月23日

microCMS CLIを作ってみた

microCMS向けCLIを個人開発し、AIエージェント運用で有効だった設計(安定したJSON出力・終了コード設計・validate→createフロー)と、検証で見つかった課題(validateとcreateの差分、media list不足)を実例ベースで整理した検証ログです。

Prerequisites

  • - microCMSの基本概念(Content API / Management API)
  • - シェル/CLIの基本操作
  • - AIエージェント(Codex/Claude Codeなど)の利用経験があると読みやすい

Key Points

  • - Agentic Coding時代におけるCMS操作のボトルネックとCLI導入意図
  • - --json出力と終了コード固定がAI自動化に効く理由
  • - validate/createの判定ズレなど、実運用で見えた改善ポイント
  • - 実際にmedia listを追加したフィードバックループの記録

背景: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

Reading Data

読了目安
約7分
セクション
13件
最終レビュー
2026年2月23日
Evergreen
No

Article Intent

Case Study

目次

  • 背景:Agentic CodingでCMSの使われ方が変わりつつある
  • なぜAPIやMCPだけでなくCLIなのか
  • CLIの概要
  • コマンド体系
  • 設計で意識したこと
  • 最小の利用例
  • AIエージェントに実際に触らせてみた
  • やったこと
  • うまくいったこと
  • 見つかった課題
  • フィードバックから改善したこと
  • この体験から感じたこと
  • 現時点でのまとめ