Ver. 3.2.9 & Ver. 3.1.62 リリースのお知らせ


この記事では、2025年12月15日にリリースした Ver. 3.2.9Ver. 3.1.62 の修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。


リリースノート

Ver. 3.2.9 の変更点

features

  • CMS-7429 POST処理時のリファラーチェックをオプションで設定できるように改善(referrer_validation: require|none|allow_empty)

  • CMS-7452 Develop テーマを Ver. 1.0.5 にアップデート

  • CMS-7451 UTSUWA テーマを Ver. 3.0.7 にアップデート

  • CMS-7326 package.json や package-lock.json など開発環境用のファイルを直アクセスできないように変更(forbid_direct_access_file 設定の追加)

  • CMS-6951 メディアを編集後、ページ内全てのメディアのサムネイル画像が変更されるように改善

changed

  • CMS-7323 jQuery を 3.7.1 へアップデート & 対応バージョンを 3.7.1 のみに変更

fixed

  • CMS-7417 ブロックエディター機能で、画像ブロック・リンクボタンブロック・ファイルブロックの編集画面側HTMLを閲覧画面側と統一し、スタイルをより簡潔にかけるようにする

  • CMS-7420 メンテナンスプログラムから REQUEST_TIME 定数を利用するとエラーが発生する問題の修正

  • CMS-7421 MySQLのポートが3306でない場合、インストールに失敗する場合がある問題を修正

  • CMS-7422 ユニットメニューのラベルが空の場合、ユニット設定でラベルが表示されない問題の修正

  • CMS-7423 校正オプション「imageRatioSizeH」や「imageRatioSizeW」で、パスにクエリが含まれる場合サイズを取得できない問題を修正

  • CMS-7425 Ver. 3.2.4 より モジュールID編集モーダルでデータ保存後に JavaScript が再適用されない問題の修正

  • CMS-7426 古いEntry_Bodyのテンプレート & 動的フォーム有効だと、エントリー詳細で、管理パーツが崩れて表示される問題を修正

  • CMS-7430 DBのキャッシュキーをVARBINARY型からVARCHAR型に変更

  • CMS-7431 インストール時にPHPのタイムアウト制限を無制限にするように変更

  • CMS-7432 PHP8.3 以下のインストーラー(メンテナンスプログラム)で、array_any の未定義エラーが発生する問題を修正

  • CMS-7433 Ver. 3.2 より Entry_Body モジュールでトリミング・拡大・表示位置の機能が動作していない問題の修正

  • CMS-7434 Ver. 3.2.6 より、HTML標準のカラーピッカーだと値を空にできない影響でブログを保存するとテーマカラーが #000000 として保存されてしまう問題の修正

  • CMS-7436 Uncaught TypeError: Acms\Services\Image\Contracts\ImageEngine::detectImageExtenstion(): Return value must be of type string, null returned が発生する問題の修正

  • CMS-7439 エントリー編集画面で Undefined array key エラーが発生する可能性がある問題の修正

  • CMS-7440 エントリーのインポート機能でグループユニットの中身が消えてしまう問題の修正

  • CMS-7437 配置 v1 を利用していると画像やメディアユニットの表示が崩れる問題の修正

  • CMS-7442 Ver. 3.2.4 より CSVインポート機能で MIMEタイプが text/plain と認識される環境で誤判定が起きる問題を修正

  • CMS-7444 静的書き出しの差分書き出しでメディアのファイルが書き出されない問題を修正

  • CMS-7446 エントリー管理からまとめて操作のページに移動すると 「Uncaught TypeError: Cannot read property」エラーが発生する問題の修正

  • CMS-7447 エントリー管理画面でカスタムフィールドによる並び替えが動作していない問題の修正

  • CMS-7449 ASSETS_DELIVERY_URL の設定により外部ドメインのアセットURLも置換してしまう問題を修正

  • CMS-7450 V2 モジュールのページネーション設定の文言が間違っている問題の修正

  • CMS-7453 グループユニットで囲まれたブロック/リッチエディターの編集画面に内容が正しく反映されない問題の修正

Ver. 3.1.62 の変更点

features

  • CMS-7324 package.json や package-lock.json など開発環境用のファイルを直アクセスできないように変更(forbid_direct_access_file 設定の追加)

fixed

  • CMS-7419 メンテナンスプログラムから REQUEST_TIME 定数を利用するとエラーが発生する問題の修正

  • CMS-7424 校正オプション「imageRatioSizeH」や「imageRatioSizeW」で、パスにクエリが含まれる場合サイズを取得できない問題を修正

  • CMS-7428 iOS環境で、フォームに「js-ajax_upload_image」クラスが付与されている場合、フォーム送信に失敗する問題を修正

  • CMS-7435 Ver. 3.1.59 より、HTML標準のカラーピッカーだと値を空にできない影響でブログを保存するとテーマカラーが #000000 として保存されてしまう問題の修正

  • CMS-7438 エントリー編集画面で Undefined array key エラーが発生する可能性がある問題の修正

  • CMS-7445 Json2Tplモジュールのキャッシュが空だと、無期限キャッシュが設定されてしまう問題を修正

  • CMS-7443 静的書き出しの差分書き出しでメディアのファイルが書き出されない問題を修正

  • CMS-6969 blogテーマのファイルユニットのアイコンを画面幅が狭い時は中央揃えに


リリースノートの補足

CMS-7323 jQuery を 3.7.1 へアップデート & 対応バージョンを 3.7.1 のみに変更

管理画面/フロントで利用している jQuery を 3.7.1 に更新し、動作保証(対応)バージョンを 3.7.1 のみに統一しました。

既存のカスタマイズで古いバージョンの jQuery 前提の挙動に依存している場合、アップデート後に影響が出る可能性がありますので、独自 JavaScript(プラグイン含む)の動作確認をお願いします。


最後に

該当する問題がございましたら、できるだけ早めのバージョンアップをご検討ください。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいります。

今後ともどうぞよろしくお願いいたします。

a-blog cms のMCPサーバーを作ってみました


この記事は Advent Calendar 2025 の25日目の記事となります。a-blog cms に関する25日分の記事が公開されていますので、ぜひご覧ください。

https://adventar.org/calendars/11394



はじめに

こんにちは。a-blog cms を開発している伊藤です。
この記事では、2025 年秋に開催された a-blog cms Training Camp 2025 で発表した 「a-blog cms × MCP」 の内容を、アドベントカレンダー向けにまとめて紹介します。

最近は ChatGPT や Claude、Cursor など「AI と開発ツール」が急速に進化しています。特に 2024 年 11 月に公開された MCP(Model Context Protocol) は、CMS の世界にも大きな影響を与える新しい仕組みです。

今回、a-blog cms の GET API を利用した 専用 MCP サーバー(acms-mcp-server) を実装したので、内容・設定方法について、みていきます。

発表スライドも添付したので、よろしければご覧ください。

発表スライド
https://drive.google.com/file/d/1bnuSgKOMUQnXNijRbJRSbM8UC4Nr_MbJ/view?usp=sharing

MCPとは?

MCP は、AI と外部サービス(API・ファイルシステム等)をつなぐための 共通プロトコル です。

MCP のポイント

  • AIツールが共通して採用する “AI ツールの標準”

  • AI が外部 API を直接 “安全に” 使えるようになる

  • AI とサービスの間に “MCP サーバー” が入る構造

  • AI 側からは「自然言語」で指示するだけで API 呼び出しが可能

たとえば…

「最新のブログ記事を取ってきて」
「この記事の本文を取得して要約して」
「このモジュールの設定内容を見せて」

こんな曖昧な指示でも、AI が勝手に MCP ツールを選び、必要な API を叩いてくれます。

a-blog cms MCP Server について

a-blog cms の GET API を利用して、AIツールが a-blog cms の情報にアクセスできるようになります。GitHub、npmで MCP Serverを公開しています。

できること

今回の MCP サーバーで実装したツールは次の通りです。

  • キーワード検索(ページネーション対応)

  • エントリー詳細の取得

  • モジュール ID の一覧取得

  • モジュール ID の詳細取得

  • Twig(V2モジュール)のテンプレートスニペット取得

つまり、a-blog cms のコンテンツを AI から直接検索 & 活用できるようになります。

a-blog cms 側の準備

MCP サーバーを利用するには、a-blog cms 側 にいくつか準備が必要です。

APIキーの取得

管理画面 > コンフィグ > API設定 からV2のAPI機能を有効にして、APIキーをメモしておきます。

APIキーの取得
APIキーの取得

拡張アプリのインストール

標準のAPI機能だけだと、機能が足りないので、以下拡張アプリをダウンロード・設置してインストールします。

https://github.com/appleple/acms-mcp-module-api

インストール方法は、GitHubの README をご覧ください。

モジュールIDの作成

MCPサーバーからアクセスするための、APIを作るため、モジュールIDを作成します。

API

モジュール名

モジュールID名

引数チェック

記事検索API

V2_Entry_Summary

mcp_entry_summary

キーワード・ページ

記事詳細API

V2_Entry_Body

mcp_entry_body

エントリーID

モジュールID一覧API

V2_McpModuleApi_Index

mcp_modules

なし

モジュールID詳細API

V2_McpModuleApi_Detail

mcp_module_detail

なし

モジュールIDは、必ず「APIでの取得を許可」にチェックを入れてください。

モジュールIDの設定例
モジュールIDの設定例

AIツール側の準備

前提条件

acms-mcp-serverNode.js 製 の MCP サーバーです。そのため、Node.js がインストールされている必要があります。

インストールされていない場合は、公式サイトから導入してください。

https://nodejs.org/ja

インストール後、以下のコマンドでバージョンが表示されればOKです。

$ node -v
$ npm -v

Claude Desktopの例

Claude Desktopを起動し設定 > 開発者 を開き、[設定を編集]ボタンを押すとclaude_desktop_config.json というファイルが開きます。

Claude Desktop設定画面
Claude Desktop設定画面

テキストエディタで開いて以下の内容に更新します。

ACMS_BASEACMS_X_API_KEY はご自身の環境のものに置き換えてください。

{
  "mcpServers": {
    "acms": {
      "command": "npx",
      "args": [
        "-y",
        "acms-mcp-server@beta",
      ],
      "env": {
        "ACMS_BASE": "a-blog cms のブログURL",
        "ACMS_X_API_KEY": "メモしたAPIキー"
      }
    }
  }
}

Claude Desktop はアプリを再起動しないと反映されないため、JSON設定後アプリを再起動ください。

再起動後、コネクタの中に「acms」があれば成功です。

コネクタにacmsがあれば成功
コネクタにacmsがあれば成功

失敗する場合

もし MCP の登録に失敗する場合は、node へのパスが通っていない可能性があります。
特に nodenv などで Node.js を管理している環境では、この問題が発生しやすい ため注意が必要です。その場合は、利用している環境に合わせて、先ほどの JSON 設定に PATH を明示的に指定してください。

"env": {
  "ACMS_BASE": "a-blog cms のブログURL",
  "ACMS_X_API_KEY": "メモしたAPIキー"
  "PATH": "/Users/xxxxxx/.nodenv/shims:/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin"
}

Cursorエディタの例

プロジェクトディレクトリに.cursor/mcp.json を作成して、以下内容(JSON)をコピペします。

ACMS_BASEACMS_X_API_KEY はご自身の環境のものに置き換えてください。

{
  "mcpServers": {
    "acms": {
      "command": "npx",
      "args": [
        "-y",
        "acms-mcp-server@beta",
      ],
      "env": {
        "ACMS_BASE": "a-blog cms のブログURL",
        "ACMS_X_API_KEY": "メモしたAPIキー"
      }
    }
  }
}

設定完了したら、右上の歯車から設定を開き、 Tools & MCPacms が追加されていることを確認してください。

CursorエディタのTools&MCP設定画面
CursorエディタのTools&MCP設定画面

利用例

設定が完了したら、実際の利用例をみていきましょう。

1. CMSのコンテンツを参照してみる

Claude Desktop で CMSで登録されているエントリーの情報を検索します。

* MCPは siteテーマ の初期データが入っている環境に接続しています。

このサイトにある「セキュリティ」に関する記事をまとめて要約して

MCPが自動で「セキュリティ」をキーワードにCMSに検索しにいき、記事を取得して、要約してまとめて一覧表示してくれることが確認できます。

Claude Desktopでの実行結果
Claude Desktopでの実行結果

他にも以下のような応用が考えられます。

  • セキュリティに関する内容が古い記事を探して?

  • セキュリティに関する内容が古くなっていそうな記事はどれ?

  • セキュリティの〇〇に関する内容を初心者にもわかりやすく説明して

ポイントは全コンテンツにアクセスするわけにはいかないので、キーワードで絞りこんで指示してあげることになります。

2. テンプレートをAIで実装してみる

次は、Cursorエディタを使用して、twigによるテンプレートを実装してみましょう。

* MCPは developテーマtest_entry_summary モジュールIDを作成した環境に接続しています。

test.html.twigに、test_entry_summaryモジュールIDを使って、
・タイトル
・アイキャッチ画像
・概要文
を表示するテンプレートを作ってください。
Tailwind CSS を使って、カードレイアウトにしてください。

MCPが自動的に、指定されたモジュールIDを検索しにいき、V2モジュールのスニペットを参照しながら、指定されたTailwind CSSでテンプレートを実装してくれました。

Cursorエディタのエージェント画面
Cursorエディタのエージェント画面
実装されたテンプレートの表示
実装されたテンプレートの表示

最後に

AI の進化は本当に速いです。
MCP の登場で CMS 開発・運用の在り方も大きく変わろうとしています。

a-blog cms も、この波に遅れないように、引き続きアップデート、開発を続けていきます。

この記事が、みなさんの AI 活用のヒントになれば嬉しいです。

ぜひ試してみてください!!

モジュールのGET API機能

モジュールIDが出力する変数をAPI(JSON)で取得できる機能です。 Ver.3.0から利用できます。

いままではJSONデータを取得する際に、JSON形式のテンプレートを作成して対応していましたがその手間を省くことができます(※2022年1月19日現在は、Json_2Tplモジュールでは使用できません)。

API機能を使うための初期設定

管理画面 > コンフィグ > API設定 からAPI機能の設定を行います。



API有効化

API有効化にチェックを入れる事で、API機能が有効になります。

X-API-KEY

APIを使用してHTTP通信をする際に必要になります。HTTPリクエストヘッダーに含める必要があります。
API-KEYはコンフィグセット毎に生成されるので、異なるコンフィグセットを設定しているブログが存在する場合は注意しましょう。

Allow-Origin

APIリクエストを許可するドメインを設定します。
同一オリジンでAPIを使用する際には Allow-Origin の設定は不要です。

APIの制限

APIリクエストを制限することが出来ます。何も設定しないと、 外部から想定していない使われ方をすることもあるので、出来るだけ設定しましょう。

HTTP リファラー

リクエスト元のHTTPリファラーで制限します。 ワイルドカード アスタリスク(*)が利用できるようになっています。

IP アドレス

リクエスト元のIPアドレスで制限します。 ブラウザ(JavaScript)からのリクエストはエンドユーザーによってIPアドレスが変わるので、 サーバーサイドから利用する場合に、IPアドレスで制限しましょう。

モジュールID設定

APIはモジュールIDを指定して、動作するようになります。上記の設定でAPIは有効になりましたが、利用するモジュールID側で、APIでの出力を許可するか設定する必要があります。

API出力したいモジュールIDの「条件設定」で、APIにチェックをつけてください。



エンドポイント

エンドポイントとはAPIにアクセスするためのURIのことを言います。a-blog cmsでは URLコンテキストの末尾に /api/:module_id/:module_id は任意のモジュールID)を追加したURIがエンドポイントになります。

例えば、a-blog cmsを https://example.com というURLで使用していて、summary_index というモジュールIDを設定したモジュールの情報を取得する場合のエンドポイントは以下になります。

https://example.com/api/summary_index/

また、a-blog cmsの特徴であるURLコンテキストを利用することができます。
例えば、 summary_index のモジュールIDを設定したモジュールの情報のうち、カスタムフィールド「price」の値を「60000」で登録しているかつ2ページ目の情報だけを取得したい場合は以下のようなエンドポイントになります。

https://example.com/field/price/60000/page/2/api/summary_index/

API機能はモジュールIDを作成することができるすべてのモジュールに対応しています。

ハンズオン記事

以下の記事では、API機能を使って画面遷移なしでエントリーのフィルタリングをする方法を紹介しています。動画もあるので、ぜひご覧ください。

Ver. 3.2.10 & Ver. 3.1.63 リリースのお知らせ


この記事では、2025年12月24日にリリースした Ver. 3.2.10Ver. 3.1.63 の修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。


リリースノート

Ver. 3.2.10 の変更点

features

  • CMS-7455 ベンチマークモード時に Server-Timing ヘッダーを付与する機能を追加

  • CMS-6402 Form_Submit モジュールを利用したフォーム機能で自動返信メール送信前の HOOK を追加(beforeSendAutoReply)

fixed

  • CMS-7454 更新メニューの変更点のスタイル崩れを修正

  • CMS-7457 Entry_Bodyで、更新日時や投稿日時の変数が出力されない問題を修正

  • CMS-7456 Entry_Calendar モジュールで表示モードを 月表示 以外(week, days, until_days)

  • 設定すると、Undefined array key エラーが発生する問題の修正

  • CMS-7458 Entry_Body でグループユニット使用時に「続きを読む」でユニットが正しく表示さ

  • ない問題を修正

  • CMS-7441 グループユニットからテキストユニットを出し入れするとテキストユニットのデータ消えることがある問題の修正

  • CMS-7459 Ver. 3.2 よりエントリーのまとめて操作機能で確認画面に選択したエントリー一覧が表示されない問題の修正

  • CMS-7461 表側のエントリー編集画面で、左右の余白がない問題を修正

  • CMS-7462 値が空のユニットグループが選択できない問題の修正

  • CMS-7464 V2_Navigationモジュールの管理画面が表示されない問題を修正

Ver. 3.1.63 の変更点

fixed

  • CMS-7460 エントリー編集ページで、不要な管理ボックスUIが表示される問題を修正

  • CMS-7463 エントリーのユニット追加ページが表示されない問題を修正


リリースノートの補足

CMS-7455 ベンチマークモード時に Server-Timing ヘッダーを付与する機能を追加

ベンチマークモード有効時に、HTTPレスポンスの Server-Timing ヘッダーを通じてパフォーマンス情報を提供できるようにしました。これにより、API経由でもベンチマーク情報を取得できるようになります。

ブラウザの開発者ツールで確認
ブラウザの開発者ツールで確認

最後に

該当する問題がございましたら、できるだけ早めのバージョンアップをご検討ください。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいります。

今後ともどうぞよろしくお願いいたします。

簡単アップデート(手動)

基本的にはオンラインアップデートを推奨しておりますが、Ver. 2.x から 3.0.x のようなメジャーアップデートはオンラインアップデートに対応しておりませんので、手動でのアップデートをお願いします。

手動アップデートの際には簡単アップデートの利用を推奨しています。以前は、FTPソフトを利用して多くのファイルを上書きする必要がありましたが、現在では 簡単アップデート (バージョンアップ作業の簡略化をする PHP ファイル)を用意しております。このプログラムを利用することで、パッケージのダウンロードから、解凍、ファイルの更新、旧ファイルのバックアップまでを自動化できます。

1. 簡単アップデート のダウンロード

ダウンロードの簡単アップデート よりアップデート用のプログラムをダウンロードします。

2. update.php ファイルのアップロード

バージョンの指定

サーバーの最新版を自動で判定してダウンロードするようになっておりますが、サーバーによってはエラーになる環境もあります。もし、実行時にエラーになるような時には 13行目の # を外してアップデートしたいバージョンを個別に指定してください。

アップロード

バージョンアップをする a-blog cms が動作しているサーバーのディレクトリに1ファイル update.php ファイルのみ、a-blog cms の index.php が設置されている同じディレクトリにアップロードします。

#$ablogcmsVersion = "3.0.15";

3. update.php ファイルの実行

update.phpを設置したURL(例:http://domain.com/update.php)にブラウザからアクセスすると以下のような画面が表示されます。


アップデート作業の前に、以下のものの準備をお願いします。

  • CMS の管理者権限のユーザーID と パスワード
  • Ver. 2.x から Ver. 3.0 へのアップデートの場合には新しい license.php

アップデートの実行

アップデートの実行には、利用している MySQL のパスワードを入力してアップデート実行を行なってください。アップデート処理としては、具体的には以下の処理が自動で行われます。

  1. 変更するファイルのバックアップ
  2. サーバーのPHPのバージョンにあわせて a-blog cms のパッケージをダウンロード&解凍
  3. インストールファイルを置くべき場所への移動
  4. バックアップファイルから戻すべきファイルやディレクトリ( 指定したテーマ、/php/ACMS/User、/php/AAPP、/private/config.system.yaml)を移動
  5. ダウンロードした必要の無いファイルの削除

※ バップアップについては、backup_年月日時分秒 の形式のディレクトリが作成されます。

以下の表示がされたら処理が完了しますので、次のステップへ進みます。


4. メンテナンスメニュー からデータベースのアップデート

サイトにアクセスし、メンテナンス画面が表示されることを確認してください。 メンテナンス画面から管理者権限の ユーザーID もしくは メールアドレスとパスワードを入力しログインします。

システムがバージョンアップの必要だと判定された際には「メンテナンスプログラムはアップデートの必要性を検出しました」と表示され「アップデート実行画面へ」のリンクが表示されます。



5. データベースの更新

セットアップ画面の[データベースの更新処理を実行]ボタンを押します。



6. セットアップディレクトリのリネーム

アップデートプログラムの実行が終了したら、FTPソフト等を利用して setup ディレクトリを推測されない名前に変更をしてください。削除しても構いませんが、場合によってインストールされている時と同様のバージョンの setup ディレクトリをアップロードする必要がある場合があります。

setup ディレクトリが存在するまではメンテナンスページが表示されます。

7. 表示確認と公開

a-blog cmsを設置しているアドレスにアクセスします。各ページの表示を確認し、問題が無ければ公開となります。 必要に応じてデバッグモードをONにすることで、各種エラーメッセージが表示されたり、キャッシュ機能が無効となるなど、動作確認のための状態となります。 サーバ上のファイル config.server.php 内の記述 「DEBUG_MODE」の値を確認の上、変更を行う場合は再度アップロードしてください。


デバッグモードON デバッグモードOFF
define('DEBUG_MODE', 1); define('DEBUG_MODE', 0);

以上でアップデートは完了です。