キャッシュドライバー

a-blog cms ではページキャッシュ、テンプレートキャッシュなどの複数のキャッシュが利用できますが、さらにキャッシュする場所や方式(ドライバー)も設定できます。

キャッシュドライバー

複数のキャッシュドライバーを用意しています。

データベースドライバー

データベース(MySQL)にキャッシュを保存します。 ある程度スピードも早く、複数台構成でもキャッシュを共有して利用できます。

ファイル キャッシュドライバー

ローカルのファイルシステムでファイルとしてキャッシュを行います。
他のAPCuやRedisなどのインメモリキャッシュに比べると低速になります。

PHPファイル キャッシュドライバー

PHPファイルとしてキャッシュします。OPcacheが有効だと高速に動作します。

メモリー キャッシュドライバー

メモリキャッシュになります。共有メモリではないので、アクセスの間だけ共有されます。

APCu キャッシュドライバー

APCu 拡張モジュールを使った、高性能な共有メモリキャッシュです。共有メモリに保存されるため、アプリケーションの性能を大幅に向上させることができます。

Redis キャッシュドライバー

Redis サーバーを使った 共有メモリキャッシュです。アプリケーションの性能を大幅に向上させることができます。複数台構成でもキャッシュを共有して利用できます。

設定変更方法

a-blog cms 設置ディレクトリに、.env ファイルを用意する必要があります。最初のパッケージに、env.txt ファイルがありますので、これを「.env」ファイルにリネームしてご利用ください。

ドライバーの変更

CACHE_xxxxxxx_DRIVER の値を変更することで、各キャッシュのキャッシュドライバーを変更することができます。
変更できる値は以下のものになっております。

  • database: データベース キャッシュドライバー
  • file: ファイル キャッシュドライバー
  • php: PHPファイル キャッシュドライバー
  • memory: メモリー キャッシュドライバー
  • apcu: APCuキャッシュドライバー
  • redis: Redis キャッシュドライバー

「コンフィグキャッシュ」「ページキャッシュ」に利用できるドライバーは下記3つのドライバーのみとなります。

  • database
  • file
  • redis

APCuを選択した場合、サーバー環境によっては、PHPプロセス毎にキャッシュがされてしまい、古いキャッシュが返ってきてしまう事があります。このような環境の場合は、他のキャッシュドライバーを選択ください。 * XSERVERの「Xアクセラレータ Ver.2」以外の場合、この環境となることを確認しています。

Webサーバーを複数台構成(プロフェッショナル以上)にする場合、キャッシュドライバーは「redis」をお勧めします。複数台で1つのキャッシュを参照でき、効率がよくなるためです。「Redis」が利用できない場合は、データベースキャッシュドライバーでもキャッシュを共有できますが、「redis」のほうがキャッシュ専用でパフォーマンスも出ますので「redis」が利用できる場合は「redis」をご利用ください。

CACHE_xxxxxxx_DRIVER には複数の値を「パイプ(|)」でつなげて設定することが出来ます。複数の値を設定した場合は、右から優先して利用できるドライバーがあったら、そのキャッシュドライバーを利用します。

CACHE_TEMPLATE_DRIVER=apcu|file

この場合、テンプレートキャッシュで、APCuが利用できる環境だとAPCuキャッシュを使用して、利用できない環境だとファイルキャッシュを使用します。

デフォルト設定

# キャッシュ設定
# Supported: apcu, php, memory, file, redis, database

# テンプレートのキャッシュをするドライバーを選択します
CACHE_TEMPLATE_DRIVER=file
CACHE_TEMPLATE_NAMESPACE=template
CACHE_TEMPLATE_LIFETIME=2678400

# フィールド情報のキャッシュをするドライバーを選択します
CACHE_FIELD_DRIVER=database
CACHE_FIELD_NAMESPACE=field
CACHE_FIELD_LIFETIME=86400

# モジュールのキャッシュをするドライバーを選択します
CACHE_MODULE_DRIVER=database
CACHE_MODULE_NAMESPACE=module
CACHE_MODULE_LIFETIME=86400

# 一時キャッシュで利用するドライバーを選択します
CACHE_TEMP_DRIVER=memory
CACHE_TEMP_NAMESPACE=temp
CACHE_TEMP_LIFETIME=10800

# コンフィグのキャッシュをするドライバーを選択します
# ページキャッシュに指定できるドライバーは、file, database, redis のみとなります。
CACHE_CONFIG_DRIVER=database
CACHE_CONFIG_NAMESPACE=config
CACHE_CONFIG_LIFETIME=2678400

# ページキャッシュをするドライバーを選択します
# ページキャッシュに指定できるドライバーは、file, database, redis のみとなります。
CACHE_PAGE_DRIVER=database
CACHE_PAGE_NAMESPACE=page

# redisのコネクション設定をします
CACHE_REDIS_HOST=
CACHE_REDIS_PASSWORD=
CACHE_REDIS_PORT=6379

Redis を利用するには、Redisサーバーの情報を設定する必要があります。
また、PHPの拡張モジュールとしてRedisが入っている必要があります。

CACHE_REDIS_HOST=
CACHE_REDIS_PASSWORD=
CACHE_REDIS_PORT=6379

a-blog cms Training Camp 2025 を開催しました


年に 1 度、 a-blog cms ユーザーが一堂に会するイベントとして開催している a-blog cms Training Camp 2025 は、おかげさまで無事終了いたしました。

昨年の開催では、「もうすぐ Ver. 3.2 が公開予定」「このような機能になります」 といった未来の展望にフォーカスした内容を中心にお届けしましたが、今年はリリースが秋となったことを受け、次の計画ではなく 実際の利用事例や成果の共有 に重きを置いた実践型セッションを多数実施いたしました。全 12 セッションという構成で、1つ 1 つはコンパクトな内容でありながら、多くの登壇者の皆さまにご協力いただき、大変充実したプログラムとなりました。

イベントは 2025年 11月 21日 (金) 13:00 〜 18:00貸し会議室 KUWAYAMA にて開催し、終了後は シルクロード 名古屋駅店 に場所を移して懇親会を実施いたしました。登壇者および参加者同士の交流も一層深まり、非常に有意義な時間となりました。

1. 実案件で失敗しない a-blog cms v3.2 へのアップデート術

宇井 陸登 さん / 有限会社アップルップル

今回の大きな変更点は、ユニット周りのCSSが従来のfloatから、現代的なFlex/Gridへと刷新されたことです。これは管理画面の使い勝手を良くし、デザインの自由度を本来の形に戻すための変更とのことです。

a-blog cms Ver. 3.2 がリリースされ、変わったところ、非推奨になったところなどを詳しく紹介がありました。実際、3.1 → 3.2 の変化は大きいのですが古い仕様のまま運用するのであれば、あまり問題なく運用は可能に作られています。

2. Web業界以外の人に、a-blog cms 3.2をおすすめしてみる(できるか?)

坂本 邦夫 さん / フォルトゥナ

いつも初心者に向けて、そしてこうなったらいいなを開発側に向けてのセッションを持ってきてくれる坂本さんの安定のお話でした。

Ver. 3.2 に合わせて全機能を精査し、ブロックエディター、監査ログ、自動アップデート、スマートフォンプレビュー の 4 点を S 評価として高く評価いただき、特に、表のコピー&ペースト対応やセキュリティ面での運用負荷軽減は、現場での実効性が高いとのコメントをいただきました。

さらに多くの関係者へ価値を届けるための改善案として、非技術者向けの短いデモ動画や、決裁者にも届く説明形式の動画の重要性についてもご提案をいただきました。ご提案を実施に繋げられるように頑張ります。

3. a-blog cmsで考えるレイアウトと文字組み

石川 寿刀 さん / Letoro* Design

a-blog cms Ver. 3.2 におけるブロックエディタと文字組み機能の検証結果が共有されました。実際のデモを通じて、1〜3 カラムの標準レイアウトは問題なく構築でき、見たまま更新 の操作性が大幅に向上していることが確認できました。

一方で、3分の1+3分の2 のような非対称分割や 4カラム構成は現状では実現が難しく、必要に応じて従来ユニットや新しいグループユニットについて組み合わせる必要がありそうとの内容でした。

4. a-blog cms cloud のサービス開始

平山 智則 さん / アルブストリクス株式会社
永富 敬千 さん / 有限会社アップルップル

今回のセッションでは、弊社の新しい取り組みとして、AWS 環境の構築から CMS 提供、運用保守までを一貫してサポートする a-blog cms cloud を発表しました。近年、信頼性や可用性の観点から AWS 環境での運用を求めるクライアントが増えており、a-blog cms を安全かつ安定した環境で利用したいというご要望も多く寄せられています。

これらのニーズに応えるため、弊社側で環境準備から継続的な保守体制までをワンストップで担う仕組みを整備しました。クライアントがインフラ面を気にすることなく、安心して Web サイトの運用に集中できる体制構築を目指しています。今後もサービスの拡充と品質向上に努めてまいります。

5. イベントサイトで今週のイベントを表示する

入交 昭 さん / HOOP Design

a-blog cms を活用したイベント機能の実装手法について共有いただきました。通常のエントリーとは異なる「時間軸」で管理する必要があるイベント情報を、今週の開始日・終了日とイベント開始日・終了日を用いてフィルタリングするアプローチが紹介されました。CMS のグローバル変数機能で週の境界を算出し、エントリーサマリーで条件抽出することで、現在から未来に向けたイベント表示が可能になります。

標準機能で対応できる範囲に加え、パートナーストアのイベントプラグインを利用することで不定期開催にも柔軟に対応可能とのことでした。現場で役立つ非常に実践的な内容で、参加者の関心も高いセッションとなりました。

6. FullCalendarを利用したイベントカレンダーの実装

小澤 琢磨 さん / 株式会社あんどぷらす

a-blog cms を活用したイベントカレンダー機能の実装事例をご紹介いただきました。イベントタイトル入力、複数イベント登録、期間設定という 3 つの要件を満たすため、標準機能の検討から FullCalendar を用いた代替実装までのプロセスが共有されました。

標準のスケジュール機能およびエントリーカレンダーモジュールでは、一部要件(期間設定や複数登録)に制約があることが確認され、開始日・終了日のカスタムフィールドを追加するアプローチを試行。しかし、表示範囲制御が難しいという課題から、FullCalendar を活用した API 連携方式へと舵を切り、全要件を満たす形でカレンダー実装が完了しました。

7. 少し変わったテーマ制作に役立ったver3.2の新機能

新 謙二 さん / 株式会社アイデアソース

a-blog cms Ver. 3.2 と htmx を活用した「スワイプ型 LP ページ」開発の取り組みが紹介されました。スマホ世代をターゲットに、YouTube ショートのような縦横のスワイプ操作を軸にした UI 構成が特徴で、中央にスマホレイアウト、左右に固定メニューや QR を配置する独自のデザインが印象的でした。

技術面では、新ブロックエディターをフル活用し、ユニットを使わずに構築。HTMX によるページ遷移のないフォーム処理や、郵便番号補完・バリデーション改善など、実務に直結する工夫も共有されました。管理機能の拡張性にも配慮されており、非常に参考度の高い内容でした。

8. a-blog cms Ver. 3.2 の V2モジュールと Twig記法を導入してみて

菅原 彩 さん / 有限会社アップルップル

Ver. 3.2 における Twig 導入と V2 モジュール の現状について報告を行いました。開発チームとしては、今後 Twig を積極的に推進していく方針である一方、従来記法の廃止予定はなく、移行を急ぐ必要はない旨が共有されました。

技術面では、テンプレート拡張子をすべて .twig に統一することはできず、管理画面用ファイルは一部 .html のまま保持する必要がある点や、V2 モジュールでは設定項目が整理され、制御の多くがテンプレート側へ移行した点が解説されました。また、セクション名やカスタムフィールド名ではスネークケースが必須となるなどの注意点も提示されました。

条件分岐の挙動改善、エラーメッセージ強化など、開発体験が大きく向上しており、次回案件での本格導入に向けて期待が高まる内容となりました。

9. Twigでパワーアップした校正オプション

田村 章吾 さん / ましじめ株式会社

Ver. 3.2 で導入された Twig フィルター機能 の実践的な活用例について共有しました。Twig テンプレートエンジンにより構成オプションの自由度が向上し、全 58 フィルターのうち約 39 種を利用できることで、より柔軟で直感的なテンプレート記述が可能になります。また、一般的なテンプレート記法であるため、AI からのサポートも得やすく、開発効率向上につながる点も大きなメリットとして紹介されました。

一方で、フィルター名と a-blog cms 標準の校正オプションの競合時には Twig が優先されるため、従来オプションを利用する場合は acms_ プレフィックスが必要となる点や、危険なタグを除外やそのまま出力する際の a-blog cms と Twig の raw・safe_html などの注意点も共有しました。独自校正オプション「読了時間算出」など拡張例も紹介され、今後の活用が期待される内容となりました。

10. 生成AIにa-blog cmsのテーマを作らせてみた

たにぐち まこと さん / H2O space

AI 統合型エディター Cursor を活用したテーマ開発の検証事例を共有しました。Cursor は VSCode をベースに開発された編集環境で、ChatGPT のような対話形式で開発依頼が行える点や、音声入力や UI 切り替え、Web リソースの取り込みなどの機能を備えています。今回は、事前知識を与えずにブログ CMS テーマの生成を依頼し、一覧ページや詳細ページ、ページネーションまで実装が進むなど一定の成果が確認できました。

一方で、スタイル未適用や一部機能の不足など、精度向上の余地も明確となりました。特に、作業前に計画を立てる プランモード の活用や、インストール全体を参照させるコンテキスト指定、ルール設定の事前準備が品質向上に有効であるという知見が得られました。

11. a-blog cmsについて質問ができるAIをgeminiのgemという機能を使って作ってみた件

三ツ石 皓太郎 さん / 株式会社ヘルツ

Gemini を活用した a-blog cms 専用 AI アシスタント構築についての発表が行われました。Gemini の強みである Google アカウントさえあれば利用できる利便性や、Google ドライブ/Gmail との高い連携性を活かし、独自のカスタムエキスパートを作成するプロセスが紹介されました。

初期段階では a-blog cms に関する回答精度に課題があったものの、カスタム指示の改善や、公式ドキュメント参照、HTMLファースト思想の追加により精度が向上。DeepResearch を使った自動リサーチも有効で、記事一覧の実装方法まで適切に回答できるレベルに到達したとのことです。AI 活用の可能性を強く感じる、非常に示唆に富んだ内容でした。

12. a-blog cms x MCP 試してみた

伊藤 淳 さん / 有限会社アップルップル

a-blog cms 向け MCPサーバー開発プロジェクト の進捗報告を行いました。MCP(Model Context Protocol)は Anthropic が 2024年11月に公開した AI と外部サービスを接続する新しいプロトコルで、弊社では CMSデータを正確に扱うための専用 MCPサーバーを Node.js で開発し、GitHub にて公開しています。NPX コマンドで実行可能で、ローカル環境のみで動作する構成です。

デモでは、Claude Desktop から CMS の実データへ直接アクセスし、ハルシネーションを抑制した正確な回答が得られることを確認しました。Cursor では、実データと Figmaデザインを組み合わせたテンプレート生成にも成功しました。今後は POST系API やマネジメント系API などの拡張に取り組み、より実践的な開発体験の向上を目指していけたらと発表がありました。

まとめ

今回の a-blog cms Training Camp 2025 では、Ver. 3.2 を活用した実践的な事例共有を中心に、現場での具体的な成果や知見を多数ご紹介いただきました。ユーザーの皆さまによるリアルな活用報告に加え、弊社としての新サービス発表・技術アップデートの進捗報告も行うことができ、CMS の可能性をさらに広げる充実したセッションとなりました。

ご登壇いただいた皆さま、ご参加くださった皆さま、本当にありがとうございました。今後も、現場で役立つ情報発信と、コミュニティの成長に貢献できる機会を継続して提供してまいります。

次回は 2026年11月20日(金) を予定(11月第3金曜日)しております。

Webhook機能

外部サービスとの連携を強化するWebhook機能についてご紹介します。Ver.3.0から追加された機能です。

Webhook機能を使えば、Webhookとの連携に対応したツールとa-blog cms を連携できます。
例えばサイトの通知を受け取りたい場合、更新したら通知するという指示を与えておき、更新されるたびに外部サービスに通知する仕組みを作れるようになります。

具体的には、a-blog cms で記事が更新されたら、Slackに通知をしたり、IFTTTなどのWebサービスを経由してTwitterやFacebookなどのSNSに自動で投稿できます。

a-blog cms がサポートしているイベント

  • エントリー(作成・更新・削除・公開)
  • ユーザー(作成・更新・削除・退会・ログイン・会員登録)
  • フォーム(送信)

a-blog cms では送信側のみ対応しています。
例えば、a-blog cms でエントリーを更新したら通知したり、a-blog cms のフォームに投稿されたら外部ツールにデータを投稿するといったa-blog cmsが起点となった仕組みを作成できます。

Webhook機能の使い方

Webhook機能を有効化する

ルートディレクトリにあるconfig.server.phpの HOOK_ENABLE1 にし、Webhookを有効化します。

define('HOOK_ENABLE', 1);

Webhookの設定を作成する

管理画面 > Webhookの順にページを移動して作成します。

設定

以下はWebhook機能の基本的な設定です。

セキュリティアップデートにより「Ver. 3.1.12」と「Ver. 3.0.32」から「Webhook URL」に設定するURLのホストを「.env」ファイルに設定する必要があります。

WEBHOOK_WHITE_LIST=hooks.slack.com,xxxxxx.com # Webhookでリクエスト可能なホストをカンマ区切りで指定ください。

ステータス チェックするとWebhookの設定が有効になります
タイプ イベントをフックするタイプを指定します
イベント フックするイベントを指定します
Webhook URL WebhookのPOST先のURLを指定します
リクエスト履歴 チェックをすると、リクエスト履歴を残します
グローバル チェックをすると、このWebhookが下の階層のブログも対象になります

ペイロード

ペイロードをカスタマイズする際には下記の設定を使用します。


カスタム ペイロードをカスタムする際にチェックをつけて「テンプレート」の項目を有効化します。
テンプレート ペイロードをテンプレートを使って組み立てます。「カスタム」にチェックが付けられている場合、テンプレートに入力された値が適用されます。

Webhookのリクエスト履歴を確認する

セキュリティアップデートにより「Ver. 3.1.12」と「Ver. 3.0.32」から デフォルトでレスポンス情報が閲覧できないようになっております。閲覧する場合は「.env」ファイルで以下項目を変更ください。 また閲覧が終わりましたら設定は元に戻してください

WEBHOOK_RESPONSE_VIEW=disabled # (disabled|enable) WebhookのログにHTTPレスポンス情報を表示するかどうか設定します。セキュリティのため、確認する時のみ「enable」に設定ください。

リクエスト履歴にチェックをつけて、ログを記録します。一度でも機能が動作していたら、管理画面>Wehook>ログの順にページを移動し、リクエスト履歴を確認できます。

ステータスコードの状態を確認できます。もしエラーになっていたら、エラーのステータスコードが表示されます。
(HTTPレスポンスステータスコードについての詳細はMDNのドキュメントをご確認ください)


Webhookの設定とリクエスト履歴が掲載されている

Webhook履歴のページ


ペイロードのテンプレートをカスタマイズする

ペイロードのテンプレートをカスタマイズするには、使用できる変数を確認するため、一度リクエスト履歴で成功レスポンス(200~299)以外のステータスコードを記録しなければなりません。一度、ペイロードの「カスタム」のチェックを外してWebhookを動作させ、エラーを出してください。

エラーのステータスコードを出したリクエスト履歴の詳細を開くと、下図のようなRequest Bodyが値として返ってきます。そうすると、使用できる変数が確認できます。

以下の場合は、タイプが「エントリー」、イベントが「公開」に設定した状態です。



セキュリティアップデートにより「Ver. 3.1.12」と「Ver. 3.0.32」からペイロードをカスタマイズするテンプレートエンジンが変更され、Twig が利用できるようになりました。テンプレート記法がかわっているため、CMSをアップデートされた場合はテンプレートの修正が必要な可能性があります。

第一階層の値を取得する

第一階層の値を取得したい場合は、{{変数名}}とペイロードのテンプレート欄に記述します。
たとえば、エントリーのURLを取得したい場合は、{{url}}になります。

第二階層以下の値を取得する

第二階層以下の値を取得したい場合は、->でつなぎます。実際には{{ 変数名.変数名2.変数名3 }}のような記述をペイロードのテンプレート欄におこないます。
たとえば、エントリータイトルを取得したい場合は{{ contents.entry.title }}になります。

テンプレートの記入例

ペイロードのテンプレート欄に下記のように記入すると出力できます。 { "value1" : "{{ url }}", "value2" : "{{ contents.entry.title }}" }

以下は、a-blog cms と Slack を連携し、Slackに通知を送るための記述です。
JSON形式の記述が採用されているため、「\n」で改行できます。

{
  "text": "ページを更新しました!\n「{{ contents.entry.title }}」\n{{ url }}",
  "username": "更新情報bot",
  "icon_emoji": ":dog:"
}

テンプレートにはカスタムフィールドの値を使用することも可能です。

{
    "webhook_id": "2",
    "webhook_name": "Slack\u901a\u77e5",
    "type": "entry",
    "event": "entry:created,entry:opened",
    "actor": {
        "uid": 1,
        "name": "admin"
    },
    "url": "http:\/\/acms.org\/entry-322.html",
    "contents": {
      ...(省略)...
      "field": {
            "message": "ここにmessageカスタムフィールドに登録された内容が入ります"
        }
    }
}

ペイロードのテンプレート欄には下記のように記入すると出力できます。

{
  "value1" : "{{ contents.field.message }}",
}

トラブルシューティング

リクエスト履歴のステータスコードがエラーになっていて動かない その1

ペイロードの「カスタム」のチェックが外れたままになっていないでしょうか?
テンプレートの変数を確認するために、カスタマイズしている最中は「カスタム」のチェックが外れた状態なので、Webhookの動作を確認したい時は「カスタム」にチェックをつけることを忘れないようにしましょう。

リクエスト履歴のステータスコードがエラーになっていて動かない その2

もしステータスコードがエラーになっていて、ログ>Response Bodyの項目で missing_text_or_fallback_or_attachmentsと表示されていたら、ペイロードの書き方が悪いかもしれません。見直してみてください。


missing_text_or_fallback_or_attachmentsと表示されている様子


ハンズオン記事

以下の記事では、Slackと連携する方法とIFTTTと連携してGoogle Driveにデータを保存する方法を紹介しています。動画もあるので、ぜひご覧ください。

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 活用のヒントになれば嬉しいです。

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