Ver. 3.2.22 リリースのお知らせ


この記事では、2026年5月27日にリリースした Ver. 3.2.22 の変更内容について紹介いたします。

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


リリースノート

Ver. 3.2.22

Changed

  • CMS-6834 HTMLコメント除去及び空白削除をデバッグモードが無効時のみに限定

Fixed

  • CMS-5281 一括置換画面で、置換内容によってHTML崩れが発生してしまう問題を修正

  • CMS-5517 文字列置換で、空文字(削除)への変換ができるように修正

  • CMS-5970 ブログのエクスポートで、ゴミ箱にあるエントリーのタグをエクスポートしないように修正

  • CMS-6311 ユーザーID=1のユーザーが存在しないと、プレビュー共有URLが正しく動作しない問題を修正

  • CMS-6321 DB名・テーブル名にハイフンが含まれる場合のSQLエラーを修正

  • CMS-6474 プレビューモード中に非表示ユニットが表示される問題を修正

  • CMS-6709 埋め込みユニットのOGP画像でalt属性を空文字にし無効なwidth/heightを削除

  • CMS-6710 ビデオユニットのiframeにあるframeborder属性を削除

  • CMS-6786 読者ユーザーでログインしたときの管理ボックスに、テンプレートやコンフィグセット、テーマセット、編集画面セット、ライセンスの状態が表示されてしまっている問題の修正

  • CMS-7005 ブログインポート時に、静的書き出し設定で指定したカテゴリーIDと V2_Navigation モジュールのメディアIDが更新されない問題の修正

  • CMS-7595 ゴミ箱状態のエントリーに削除・公開・複製などの管理アクションが表示される問題の修正

  • CMS-7613 画像・ファイルのバックアップを取ってリロードすると、データベースのセレクトメニューに追加されるように見える問題の修正

  • CMS-7617 スケジュール管理画面のヘッダーに編集中のセット名を表示

  • CMS-7618 User_Search モジュールでランダムソート指定時に strtoupper(null) の deprecation が発生する問題の修正

  • CMS-7644 ログイン中にモジュールキャッシュが適用されてしまう問題の修正

  • CMS-7645 Ver. 3.2.0 より Entry_Body 系モジュールで複数エントリー指定時に最初の1件しか表示されない問題の修正

  • CMS-7647 エントリー管理ページで、カテゴリーで絞り込んだURLにアクセスするとカテゴリーセレクトに現在のカテゴリーが表示されない問題の修正

  • CMS-7648 Ver. 3.2.0 より Schedule モジュールの年表示で 1〜9 月のスケジュールデータが反映されない問題の修正

  • CMS-7654 管理画面の関連エントリーUIで、画像パスにルートパスが付与されておらず、リンク切れになる場合がある問題を修正

  • CMS-7655 Ver. 3.2.18 よりテンプレート探索でカテゴリーコードと同名の .html がある場合に 404 になる問題の修正

  • CMS-7656 テーマディレクトリが存在しない場合に Twig のロードでエラーになる問題の修正

  • CMS-7657 Ver. 3.2.20 よりカスタムフィールドの絞り込みで「_and_」ではなく「and」指定をすると、絞り込みがおかしくなる場合がある問題を修正


リリースノートの補足

CMS-7657 Ver. 3.2.20 よりカスタムフィールドの絞り込みで「_and_」ではなく「and」指定をすると、絞り込みがおかしくなる場合がある問題を修正

Entry_Summary をはじめとする各モジュールで、フィールド絞り込み(モジュールID)の指定に区切り文字として _and_ ではなく and を使っている場合、Ver. 3.2.19 までは正しく絞り込めていた条件が、Ver. 3.2.20 以降で正しく機能しなくなる問題がありました。

たとえば次のようなフィールド絞り込みです。

content_language/2/and/information_hide/em/and/private/em

本来は「content_language が 2、かつ information_hide が空、かつ private が空」という複数条件で絞り込まれるべきところ、Ver. 3.2.20 では生成される SQL から後半の条件が欠落し、先頭の条件(content_language)だけしか反映されない状態になっていました。結果として、意図しないエントリーが一覧に表示されてしまいます。

and 区切りでモジュールIDのフィールド絞り込みを設定しているサイトは多く、影響が広いため、本バージョンで修正しました。Ver. 3.2.20・3.2.21 をご利用でフィールド絞り込みを使われている場合は、お早めのバージョンアップをご検討ください。

CMS-7655 Ver. 3.2.18 よりテンプレート探索でカテゴリーコードと同名の .html がある場合に 404 になる問題の修正

カテゴリーコードと同名のテンプレートファイルがテーマ直下に存在する場合、そのカテゴリーの URL にアクセスすると HTTP 404 になってしまう問題がありました。Ver. 3.2.18 以降で発生します。

たとえば次のような構成で再現します。

  • カテゴリーコード entry のカテゴリーを作成している

  • テーマ直下にエントリー詳細用の entry.html を配置している

  • この状態で /entry/(カテゴリートップ)にアクセスすると 404 Not Found になる

news カテゴリー+ news.html、入れ子の /parent/child/parent/child.html など、カテゴリーコードとテンプレート名が同名で衝突する組み合わせで発生します。

本バージョンで、同名衝突時にもカテゴリートップが正しく表示されるよう修正しました。


最後に

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

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

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

Ver. 3.2.24 & Ver. 3.1.73リリースのお知らせ


この記事では、2026年6月17日にリリースした Ver. 3.2.24Ver. 3.1.73 の変更内容について紹介いたします。

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


リリースノート

Ver. 3.2.24

Features

  • CMS-7653 ブロックエディターで data-settings 属性によるエディターごとの個別設定を可能にする

  • CMS-7658 モジュール管理モーダルで hash を指定できるように変更

  • CMS-7660 Redis キャッシュの TLS(rediss://)接続をサポート

  • CMS-7663 プラグイン(拡張アプリ)が Twig ベースの管理画面を実装できるように改善、および拡張 Twig API・設定画面ヘルパ acms_config() の追加

  • CMS-7669 フォーム/動的フォームのバリデーション選択肢を PHP Attribute で動的化

  • CMS-7670 ブロックエディターの組み立て済み HTML をフックで調整できる仕組みの追加

  • CMS-7672 ブロックエディター画像ユニットの拡大表示デフォルトを設定画面から変更可能にする

Changed

  • CMS-6535 「開発モードで動作中」のトーストを閉じることができるように改修

  • CMS-6716 session.gc_maxlifetime を CMS 側で設定できるよう改良

  • CMS-7598 メディアステータスがエントリー依存の場合に、非公開ユニット内のメディアを非公開にする

  • CMS-7677 管理画面の確認ダイアログ(confirm)メッセージの分かりやすさを改善

  • CMS-7686 フォーム編集画面の新規作成時に、「テンプレート指定無効」「複数アドレス指定無効」のチェックボックスのデフォルトを、セキュリティ的に安全な設定に変更

Security

  • CMS-7668 フロントエンド依存パッケージの既知脆弱性の修正

Fixed

  • CMS-6428 エントリーおよびリビジョン削除時に、位置情報・関連エントリー・サブカテゴリーが削除されていない問題の修正

  • CMS-6429 カテゴリー削除時に、フルテキストと位置情報、サブカテゴリーが削除されていない問題の修正

  • CMS-6430 ブログ削除時に、関連テーブルの削除漏れがある問題の修正

  • CMS-7584 バージョンの予約公開時に、同時アクセスによりユニットが重複登録される場合がある問題の修正

  • CMS-7616 /alt/remind/ にアクセスすると意図しないページが表示される問題の修正

  • CMS-7651 管理画面のユーザー一覧で、エントリー数が多いとパフォーマンスが低下する問題の修正

  • CMS-7665 バージョンプレビュー画面において、バージョンに紐づくユーザーが削除されている場合に PHP エラーが発生する問題の修正

  • CMS-7666 DB セッション使用時(PHP_SESSION_USE_DB 有効)にフォームが二重送信される可能性がある問題の修正

  • CMS-7667 V2_Category 系モジュールでエントリーフィールド絞り込み時に、カテゴリーが 0 件になる問題の修正

  • CMS-7671 CSV インポートのドキュメントで geo_latgeo_lng の説明・例が逆になっている問題の修正

  • CMS-7674 Schedule モジュールの変数表に dayClass が記載されていない問題の修正

  • CMS-7676 先頭が 0 の UUID で、カスタムユニットのフィールドが保存されない問題の修正

  • CMS-7678 バックアップのリストア後に 500 エラーが表示される問題を修正

  • CMS-7679 WYSIWYG エディターのリンク作成モーダルで入力すると、エディター本文が編集されてしまう問題の修正

  • CMS-7681 Google Maps ピッカーでズーム入力を変更すると、元の値に巻き戻る問題を修正

  • CMS-7683 動的フォームの入力チェックを外して再設定すると、必須ラベルが表示されない問題の修正

  • CMS-7684 エントリー複製で動的フォーム項目が複製されない問題の修正

Ver. 3.1.73

Fixed

  • CMS-7682 ライトエディターのオプションボタンがホバーフリッカーを起こす問題の修正

  • CMS-7680 WYSIWYGエディターのリンク作成モーダルで入力するとエディター本文が編集されてしまう問題の修正

  • CMS-7687 エントリー複製時に動的フォームのフォーム項目が複製されない問題の修正


リリースノートの補足

CMS-7653 ブロックエディターで data-settings 属性によるエディターごとの個別設定を可能にする

<div 
  class="js-block-editor"
  data-settings='\{"features":\{"textItalic":false,"customClass":true\}\}'
>
</div>

ブロックエディターのカスタムフィールドを設置する要素に data-settings 属性を付与することで、同じ画面内でもエディターごとに異なる設定を適用できるようになりました。1つのテーマ・1つの画面の中で、用途に応じて挙動の異なるエディターを使い分けられます。

詳しくは「カスタムフィールドのブロックエディター設定をフィールド毎に上書きする」のドキュメントをご確認ください。

CMS-7672 ブロックエディター画像ユニットの拡大表示デフォルトを設定画面から変更可能に

ブロックエディターの画像ユニットについて、これまで固定だった「拡大表示」の初期値を、編集画面設定から変更できるようにしました。サイトの方針に合わせて、画像クリック時の拡大表示を標準でオン/オフのどちらにするかを、テンプレートを触らずに切り替えられます。

CMS-7669 フォーム/動的フォームのバリデーション選択肢を PHP Attribute で動的化

<?php

namespace Acms\Custom;

use Acms\Services\Validator\Attribute\AsValidationOption;

class Validator
{
    /**
     * @param  string $val 入力値
     * @param  string $arg バリデーション引数
     * @return bool
     */
    #[AsValidationOption(label: 'サンプルチェック', group: '形式チェック')]
    public function sample($val, $arg)
    {
        return strpos($val, $arg) !== false;
    }
}

フォームおよび動的フォームの管理画面で利用できるバリデーションの選択肢を、PHP Attribute を用いて動的に定義できるようにしました。バリデーションの追加・拡張がコード側で宣言的に行えるようになり、拡張時の見通しが良くなります。

詳しくは「Validatorの拡張について」のドキュメントをご確認ください。

CMS-7660 Redis キャッシュの TLS(rediss://)接続をサポート

# redis の TLS(転送時の暗号化)接続設定
# tls を指定すると rediss:// で接続します。未設定 / tcp / redis は redis:// (平文)
CACHE_REDIS_SCHEME=tls
# CACHE_REDIS_SSL_VERIFY_PEER=true
# CACHE_REDIS_SSL_VERIFY_PEER_NAME=true
# CACHE_REDIS_SSL_ALLOW_SELF_SIGNED=false
# CACHE_REDIS_SSL_CAFILE=

Redis をキャッシュストアとして利用する際、rediss:// スキームによる TLS 接続に対応しました。マネージドの Redis サービスなど、接続経路の暗号化(TLS)が必要・推奨される環境でも、安全に Redis キャッシュを利用できます。

CMS-7686 フォーム編集画面の新規作成時のデフォルト設定をセキュリティ的に安全な設定へ変更

フォームの新規作成時、「テンプレート指定無効」「複数アドレス指定無効」のチェックボックスのデフォルト状態を見直し、有効になる値を初期値とするよう変更しました。これらの設定は、フォームからの送信内容によってメールテンプレートや宛先が外部から操作されることを防ぐためのものです。本バージョンより、新しく作成するフォームは標準で安全な設定となります。

なお本変更は新規作成時の初期値のみに適用され、既存フォームの設定値は変更されません。運用中のフォームについては、必要に応じて編集画面から設定をご確認ください。

CMS-7598 メディアステータスがエントリー依存の場合に、非公開ユニット内のメディアを非公開にする

メディアのステータスが「エントリーの公開状態に従う」設定の場合に、非公開ユニット内に配置されたメディアも非公開として扱うようにしました。エントリーは公開でも、特定のユニットだけを非公開にしているケースで、そのユニット内のメディアが意図せず参照できてしまう状態を防ぎます。


最後に

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

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

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

Ver. 3.2.25 & Ver. 3.1.74リリースのお知らせ


この記事では、2026年7月7日にリリースした Ver. 3.2.25Ver. 3.1.74 の変更内容について紹介いたします。

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


リリースノート

Ver. 3.2.25

Features

  • CMS-7659 メールテンプレートをTwigテンプレートエンジンで記述できるようにする

  • CMS-7710 フォームのエクスポート/インポート機能を追加

  • CMS-7700 校正オプション str_replace / preg_replace を追加

  • CMS-7697 HtmlPurifier で許可ホストの iframe を whitelist で指定できるようにする

  • CMS-7696 ブロックエディターの画像ブロック・ファイルブロックで複数メディアの一括アップロード・挿入に対応

  • CMS-7693 Twig有効時にアンカー類のパス書き換えを抑止する設定を追加

  • CMS-7691 メディア一括アップロードの件数上限緩和と同時並列数の設定対応

Changed

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

  • CMS-7709 post_max_size 超過POSTを413で処理し themes/system/413.html の専用テンプレートを返すように変更

  • CMS-7699 各種インポート画面に同一バージョンのエクスポートファイルのみ対応する旨の注意書きを追加

  • CMS-7690 テストランナー Vitest を 4 系へアップデート

  • CMS-7685 エントリー編集画面の地図ユニットUIを改善

Security

  • CMS-7735 SNS認証での管理ログイン時に管理ログイン用IP制限が適用されない問題の修正

Fixed

  • CMS-7738 メンテナンスプログラム(setup)からの DB 更新で PRIMARY KEY が失われ、ユーザー一覧に同一ユーザーが重複表示される問題の修正

  • CMS-7737 シークレットブログ/カテゴリーが会員機能無効時にアクセス制限されない問題の修正

  • CMS-7712 進捗ポーリングの TypeError で進捗バーが途中停止する問題を修正

  • CMS-7711 シーケンステーブルが不整合な状態になっても不正なIDのデータが作られないように修正

  • CMS-7708 画像リサイズ時にEXIFのOrientation(向き)が考慮されず画像が回転して表示される問題の修正

  • v2_form モジュールで添付ファイルのファイルパスがおかしくなる問題の修正

  • CMS-7695 エントリーのインポートで予約リビジョン参照が不正データとして取り込まれる問題の修正

  • CMS-7694 テーマ設定のセレクトで、未設定や存在しないテーマを選択しているときの表示が分かりづらい問題の修正

  • CMS-7689 ブロックエディターのテキストリンクで相対パスURLが保存できない問題の修正

  • CMS-7688 グレースケール画像のWebP変換失敗で「画像の生成に失敗しました」エラーになる問題の修正

Ver. 3.1.74

Fixed

  • CMS-7736 SNS認証での管理ログイン時に管理ログイン用IP制限が適用されない問題の修正


リリースノートの補足

CMS-7659 メールテンプレートをTwigテンプレートエンジンで記述できるようにする

{# 例: tpl_twig 有効時、フォームの自動返信メールテンプレートなどで #}
{{ name.value }} 様

お問い合わせいただいた内容は以下の通りです。

{{ inquiry.value | nl2br }}

Twig テンプレートを有効にしている場合、メールテンプレートおよびフォームの本文・件名(管理画面での直接入力)を Twig で記述できるようになりました。

テーマファイル経由は制作者向けの機能として include/extends・Markdown・extendsTwig の独自フィルタなど公開側テーマと同じ仕組みが使えます。

一方、フォームの本文・件名のように運営者が管理画面から直接入力する文字列は、利用できるタグ・フィルタ・関数を絞ったサンドボックス環境で評価され、送信者側の入力によるテンプレートインジェクションを防ぎます。

エスケープ方式はファイルの拡張子から自動判定されます(.txt 系はエスケープなし、.html 系は HTML エスケープ)。

メールテンプレート

CMS-7710 フォームのエクスポート/インポート機能を追加

フォームの設定をYAML形式でエクスポート・インポートできるようになりました。エクスポートはフォーム編集画面から、インポートは専用画面(「フォームインポート」)から実行します。インポート時、フォームID(form_code)が対象ブログ内の既存フォームと一致する場合は既存のフォームを保持したまま設定を上書きし、送信ログやエントリーとの紐付けを維持します。一致するフォームがなければ新規作成されます。エントリー・ブログ・モジュールと同様に、他ブログや他環境へのフォーム設定の持ち出しが可能になります。

なお、インポートは同一バージョンの a-blog cms でエクスポートしたファイルのみ対応しています。

フォームのエクスポート・インポート

CMS-7700 校正オプション str_replace / preg_replace を追加

{title}[str_replace('株式会社', '(株)')]
{tel}[preg_replace('/(\d{2,4})-?(\d{2,4})-?(\d{3,4})/', '$1-$2-$3')]

変数の校正オプションに、文字列をそのまま置換する str_replace と、正規表現で置換する preg_replace を追加しました。preg_replace はデリミタ・フラグを含む PCRE 記法で記述し、$1 などの後方参照も利用できます。不正な正規表現を指定した場合は元の値をそのまま返すフェイルセーフになっています。

校正オプション

CMS-7697 HtmlPurifier で許可ホストの iframe を whitelist で指定できるようにする

# config.system.yaml
html_purifier_iframe_allowed_hosts: [
    'www.youtube.com/embed|fullscreen; encrypted-media; picture-in-picture|',
    'www.youtube-nocookie.com/embed|fullscreen; encrypted-media; picture-in-picture|',
    'player.vimeo.com/video|fullscreen; picture-in-picture|',
    'www.google.com/maps/embed'
  ]

これまで変数出力中の iframedangerous_tags により一律でエスケープされていましたが、ホスト単位のホワイトリスト方式に変更しました。書式は host[/パス前方一致][|Permissions-Policyトークン[|sandboxトークン]] で、既定では YouTube/YouTube(nocookie)/Vimeo/Google マップの埋め込みを、必要なパスと最小権限のトークン付きで許可します。許可ホスト以外の iframesrc だけが無効化されます(タグ自体は残ります)。

HTMLPurifier による HTML サニタイズ

CMS-7696 ブロックエディターの画像ブロック・ファイルブロックで複数メディアの一括アップロード・挿入に対応

画像ブロック・ファイルブロックについて、メディア選択・アップロード・ドラッグ&ドロップのいずれの経路でも複数ファイルをまとめて選択でき、選択した順に個別のブロックとして一括挿入されるようになりました。

また、ブロックを選択していない状態でもエディター本文へ画像・ファイルを直接ドラッグ&ドロップすると、その場でブロックが生成されます。画像ブロックの枠には画像のみ、ファイルブロックの枠には画像以外のファイルのみが挿入され、枠の種別に合わないメディアはアップロード前の段階で弾かれます。

CMS-7693 Twig有効時にアンカー類のパス書き換えを抑止する設定を追加

# config.system.yaml
acms_anchor_no_rewrite_if_twig_enabled: on # on | off

Twig を有効にしている場合、a 要素の href や form 要素の action に書いた相対パスへ、a-blog cms が自動でブログコードを補完する処理を抑止できる設定を追加しました。ブロックエディター等でサイト内リンクを相対パスのまま書いても、意図しないパス書き換えが起きなくなります。この設定は新規インストール時のみ既定で有効(on)になります。

既存サイトはアップグレード時に既存の config.system.yaml を引き継ぐため、この設定を明示的に追加しない限り従来どおりパスが書き換えられます。

パスの書き換え

CMS-7691 メディア一括アップロードの件数上限緩和と同時並列数の設定対応

# config.system.yaml
media_upload_limit: 100        # 一度にアップロードできる最大件数(1〜1000)
media_upload_concurrency: 4    # 同時にアップロードする本数(1〜20)

メディアの一括アップロードについて、これまで固定だった1回あたりの上限件数(20件)を、設定で変更できるようにしました(デフォルト値は100件)。

また、これまで選択したファイルを一斉に並列送信していた処理を、同時実行数を絞って順次送信する方式に変更し、その並列数も設定できるようにしました(デフォルト値は4)。

大量のファイルを一度にアップロードする際のサーバー負荷を抑えられます。

CMS-7709 post_max_size 超過POSTを413で処理し themes/system/413.html の専用テンプレートを返すように変更

PHP の post_max_size を超える POST を送信すると $_POST が空になり、送信内容を復元できません。従来は、テンプレートに post:v#filesize という変数ブロックを書いておくことでだけエラーを表示できる仕組みでした。この仕組みは Twig テーマでは動作せず、また書き忘れているテーマでは何も表示されないため、送信が失敗したことにすら気づけませんでした。

本バージョンでは、テーマ側で何も書かなくても、PHP がリクエストの段階で post_max_size 超過を検知し、自動的に HTTP 413 を返すように変更しました。413応答時のテンプレートは system テーマに新設した 413.htmltpl_413 で変更可能)が使われるため、Twig・従来型テンプレートのどちらでも同じエラーページが表示されます。

また、テーマに 413.html を追加することでオリジナルのデザインにカスタマイズ可能です。


最後に

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

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

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

Ver. 3.2.27 リリースのお知らせ


この記事では、2026年7月27日にリリースした Ver. 3.2.27 の変更内容について紹介いたします。

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


リリースノート

Features

  • CMS-7729 エントリー管理にタグ絞り込みを追加し、カテゴリー絞り込みでサブカテゴリー所属も拾えるようにする

  • CMS-7743 V2トピックパスモジュールの items に type・id・code を追加

  • CMS-7744 各種 Field モジュール(ブログ / カテゴリー / エントリー・V1 / V2)に閲覧側 URL を追加

  • CMS-7764 テキストユニットの非推奨タグ(pre/none/markdown/wysiwyg)を専用ユニットへ変換するデータ修正ツールの追加

  • CMS-7766 グループユニットのCSSクラス(column_group_class)を一括変換するデータ修正ツールの追加

  • CMS-7714 PHP 8.5 対応

Changed

  • CMS-7745 プラグイン向けPHPUnitテスト基盤を本体から切り出し、独立パッケージ(ablogcms/testing-framework)として整備・公開

  • CMS-7759 htaccess.txt/.htaccessの記述をApache 2.4構文に統一

  • CMS-7701 インストーラー周りのセキュリティ強化(.htaccess 配置・有効化必須化・setup 削除・CSRF 対策)

Fixed

  • CMS-7746 SNSログイン・SNS会員登録で最終ログイン日時が更新されない問題の修正

  • CMS-7747 監査ログのメール通知リンクが一覧トップになり該当ログを探す必要がある問題の修正

  • CMS-7748 プラグインのV2モジュール(Modules/Get/V2)が名前空間の自動登録漏れで解決できない問題の修正

  • CMS-7753 filterBlockEditorHtml フックが編集画面でも発火してしまう問題の修正

  • CMS-7754 setup リダイレクトにキャッシュ抑止ヘッダが無く setup 撤去後もリダイレクトが残り得る問題の修正

  • CMS-7755 アップデート時に cache_data / cache_tag の PRIMARY KEY が自動復旧されない問題の修正

  • CMS-7763 静的書き出し(CLIページ生成)時に本体Basic認証・SSL強制リダイレクトが発火し全ページが403等で書き出される回帰の修正

  • CMS-7765 CDN配下でのキャッシュオフロードを阻害するCache-Controlヘッダー(no-cache)の修正


リリースノートの補足

CMS-7729 エントリー管理にタグ絞り込みを追加し、カテゴリー絞り込みでサブカテゴリー所属も拾えるようにする

エントリー管理画面の「高度な絞り込み」に、タグでの絞り込みを追加しました。エントリー編集画面と同じ操作感でタグを選択してエントリーを検索することができます。

複数のタグを選んだ場合は、そのすべてが付いているエントリーだけが表示されます。候補として出てくるタグは「いま選んでいるタグと一緒に使われているタグ」だけなので、絞り込みする必要のないタグは選択肢に表示されません。なお、ゴミ箱のエントリーにしか付いていないタグは候補にも検索結果にも出てきません。

あわせて、カテゴリーでの絞り込み時にサブカテゴリーとして設定しているエントリーも表示されるようになりました。サブカテゴリーを利用しているサイトでも効率的にエントリーを探すことができるようになります。

CMS-7764 テキストユニットの非推奨タグ(pre/none/markdown/wysiwyg)を専用ユニットへ変換するデータ修正ツールの追加

テキストユニットの「タグセレクト」で選べる pre / none / markdown / wysiwyg は、Ver. 3.2 以降では独立した専用ユニットが用意されており、新規利用は非推奨となっています。過去に作成したエントリーに残っているこれらのユニットを、対応する専用ユニットへまとめて置き換えるツールを管理画面の「データ修正」に追加しました。

  • pre → コードユニット

  • none → HTML ユニット

  • markdown → Markdown ユニット

  • wysiwyg → WYSIWYG ユニット

変換するタグはチェックボックスで選べるので、「まずは wysiwyg だけ」といった段階的な移行も可能です。「子ブログを含める」を選べば、階層下のブログもまとめて変換できます。

このツールはデータの移行を行うもので、出力される HTML の構造やクラス名は変換前後で変わります。そのため見た目が変わる可能性があります。本番環境で実行する前に、テスト環境での確認をおすすめします。

CMS-7766 グループユニットのCSSクラス(column_group_class)を一括変換するデータ修正ツールの追加

グループユニットに設定した CSS クラスを、管理画面からまとめて置き換えられるツールを追加しました。既存の「ユニットグループ修正」と同じ操作感でお使いいただけます。

制作や運用の途中でクラス名を変更したいときや、テーマを乗り換えたときに、エントリーを1件ずつ開いて直す必要がなくなります。「子ブログを含める」を選べば階層下のブログもまとめて変換できます。

また、変更後の値を空にすることでクラスの一括削除もできるようになりました(既存の「ユニットグループ修正」でも同様です)。

CMS-7714 PHP 8.5 対応

a-blog cms が動作する PHP のバージョンに PHP 8.5 を追加しました。これにより、対応バージョンは PHP 8.1 〜 8.5 になります。

新しい PHP に切り替えるタイミングで、a-blog cms のバージョンアップもあわせてご検討ください。これまでのバージョンの PHP でも、引き続きご利用いただけます。

合わせて以下のプラグインも PHP 8.5 に対応したバージョンをリリースしております。

CMS-7745 プラグイン向けPHPUnitテスト基盤を本体から切り出し、独立パッケージ(ablogcms/testing-framework)として整備・公開

これまで a-blog cms 本体のリポジトリ内にしか無かったテスト用の仕組みを、独立した Composer パッケージとして公開しました。プラグインを開発される方が、a-blog cms の本体ソースを手元に用意しなくても、自分のプラグインに対して自動テストを書けるようになります。

composer require --dev "ablogcms/testing-framework:3.2.*"

パッケージのバージョンは、テストしたい a-blog cms のバージョンに合わせてご指定ください(3.2 系なら 3.2.*)。データベースを使ったテスト用の基底クラスやテストデータの作成ヘルパーが含まれているため、実際に近い状態での検証が行えます。

あわせて、CI からそのまま利用できる a-blog cms 同梱の Docker イメージ(PHP 8.1 〜 8.5)も用意しました。複数の PHP バージョンでの動作確認を自動化でき、a-blog cms のバージョンアップ時にもプラグインの品質を保ちやすくなります。

プラグイン(拡張アプリ)のテスト

CMS-7701 インストーラー周りのセキュリティ強化(.htaccess 配置・有効化必須化・setup 削除・CSRF 対策)

インストーラー(setup ディレクトリ)まわりを全面的に見直しました。主な変更は次のとおりです。

  • インストール完了後の setup ディレクトリを「削除」に変更: これまではリネームでしたが、削除するようになりました。インストーラーが残り続けることによるリスクがなくなります。

  • インストーラーの再実行をブロック: インストール済みのサイトでは、外部からインストーラーを実行できないようになりました。

  • setup へのログインに回数制限: パスワードの総当たり攻撃を防ぐため、一定回数失敗するとロックされるようになりました。

  • 直接アクセスを防ぐ .htaccess の追加: プログラム本体が置かれているディレクトリにも .htaccess を同梱し、インストール時にきちんと有効になっているかをチェックするようになりました(Apache 系サーバー以外ではチェックをスキップします)。

あわせて、データ修正ツールの場所も整理しました。データの整列やインデックスの修正といった日常的なメンテナンス機能は管理画面の「データ修正」に移動し、setup 側には「管理画面にログインできなくなったときの復旧手段」(ドメインの修正・アクセス制限の解除・2段階認証のリセット)だけを残しています。

データ修正ツールやデータベース更新が必要な場合は、同一バージョンの a-blog cms をダウンロードし、setup ディレクトリを再配置してください。

また、インストール時に選べるテーマとして、デモコンテンツを含まない「blank テーマ」も追加しました。ゼロからテーマを作り始めたい場合にお使いいただけます。

さらにこのバージョンより、インストール字に選べるテーマを任意に拡張できるようになりました。詳しくは以下のドキュメントをご確認ください。

オリジナルテーマをインストーラーの選択肢に追加する


最後に

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

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

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

Ver. 3.2.29 & Ver. 3.1.75 & Ver. 3.0.61 リリースのお知らせ


この記事では、2026年8月26日にリリースした Ver. 3.2.29 と Ver. 3.1.75、Ver. 3.0.61 の変更内容について紹介いたします。

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


リリースノート

Ver. 3.2.29 の変更点

Features

  • CMS-7724 ブログ/カテゴリー/ユーザー/フォーム作成後に編集画面へ遷移するように変更

  • CMS-7772 サイト内検索で半角カナの濁点・半濁点が全角データにヒットしない問題の対応(検索テキストのカナ正規化設定を追加)

  • CMS-7814 管理画面「データ修正」にWebP変換機能を追加

  • CMS-7831 コンフィグセット単位のエクスポート・インポート機能の追加

  • CMS-7834 htmxの読み込み戦略設定(htmx_load_strategy)の追加

Changed

  • CMS-7721 React 19 アップデート & Tiptap v3 アップデート

  • CMS-7773 システム更新のパッケージ解凍失敗時に原因を特定できるようにする

  • CMS-7782 SmartPhoto のアクセシビリティ向上

  • CMS-7823 埋め込みユニットの表記が一部「引用」のまま残っているのを統一

  • CMS-7832 クライアントキャッシュ有効時間(cache_expire_client)の既定値を0に変更

Security

  • CMS-7703 Json_2Tplのパストラバーサル・SSRF・LFI対策

  • CMS-7705 外部通信の TLS 証明書検証が無効化されている問題の修正

  • CMS-7784 リバースプロキシ配下でのアクセス元IPアドレスの判定を厳格化

  • CMS-7785 リバースプロキシ配下での接続情報の判定を厳格化

Fixed

  • CMS-7771 CDN配下でのキャッシュオフロードを阻害するCache-Controlヘッダー(no-cache)がページキャッシュ配信経路に残っている問題の修正

  • CMS-7813 静的書き出しのCLI実行時にサブディレクトリ設置環境で404になる問題の修正

  • CMS-7827 データベースのリストアで監査ログ(audit_log)が消去される問題の修正

  • CMS-7828 シンボリックリンク環境でインストーラーが Bin directory not found になる問題の修正

  • CMS-7829 Squareテーマがインストールできない問題の修正

  • CMS-7830 ブログインポート時に field_bid / geo_bid が読み替えられずカスタムフィールドが壊れる問題の修正

  • CMS-7833 サブディレクトリ設置環境の静的書き出しでルート相対パスの書き換えが不正になる問題の修正

Ver. 3.1.75 の変更点

Security

  • CMS-7835 Json_2Tplのパストラバーサル・SSRF・LFI対策

  • CMS-7837 外部通信の TLS 証明書検証が無効化されている問題の修正

  • CMS-7794 リバースプロキシ配下でのアクセス元IPアドレスの判定を厳格化

  • CMS-7795 リバースプロキシ配下での接続情報の判定を厳格化

Fixed

  • CMS-7760 htaccess.txt/.htaccessの記述をApache 2.4構文に統一

Ver. 3.0.61 の変更点

Fixed

  • CMS-7761 htaccess.txt/.htaccessの記述をApache 2.4構文に統一

Security

  • CMS-7836 Json_2Tplのパストラバーサル・SSRF・LFI対策

  • CMS-7838 外部通信の TLS 証明書検証が無効化されている問題の修正

  • CMS-7804 リバースプロキシ配下でのアクセス元IPアドレスの判定を厳格化

  • CMS-7805 リバースプロキシ配下での接続情報の判定を厳格化


リリースノートの補足

CMS-7724 ブログ/カテゴリー/ユーザー/フォーム作成後に編集画面へ遷移するように変更

ブログ・カテゴリー・ユーザー・フォームなどを新規作成した際、作成完了後にその編集画面へ自動的に遷移するようになりました。

あわせて、作成完了時のお知らせ表示をURLパラメータ方式からセッションを使った一度限りの表示方式に変更しています。作成直後のページをリロードしたり、URLを共有したりしても「作成しました」の通知が再表示され続けることがなくなりました。

CMS-7831 コンフィグセット単位のエクスポート・インポート機能の追加

コンフィグセットインポート画面
コンフィグセットインポート画面

コンフィグセット単位ごとにコンフィグをエクスポート・インポートできる機能を追加しました。

コンフィグセット詳細画面からエクスポートし、一覧画面からインポートする導線を用意しています。インポート時には、新規に追加するだけでなく、既存のコンフィグセットを置き換えることも選べます。

案件間で共通の設定を使い回したい場合や、開発環境で作った設定を本番環境へ持ち込みたい場合などにお使いいただけます。

CMS-7834 htmxの読み込み戦略設定(htmx_load_strategy)の追加

症状

組み込みJSの htmx を利用したページ内リンクで、ブラウザの「戻る」「進む」ボタンを使った際に 画面の中身が更新されないことがありました。

これはhtmxの初期化処理(ready())が実行されないことに起因する問題のうち、 最も気づかれやすい一例です。ready()は「戻る/進む」対応だけでなく、 以下の処理もまとめて行っているため、初期化が実行されない場合は 他の症状として現れることもあります。

  • ページ内のhx-*属性がまったく動作しない 「戻る/進む」対応と根本原因は同じで、hx-gethx-postを指定したボタン・ リンクをクリックしても何も起こらない、という形で現れることがあります

  • <meta name="htmx-config">で指定した設定が反映されない historyCacheSizedefaultSwapStyleなどの設定を行っていても、 無視されて既定値の挙動になることがあります

  • ローディングインジケーター(.htmx-indicator)用のスタイルが 差し込まれず、表示/非表示の見た目が意図通りにならない

  • htmx:loadイベントに依存する他のJavaScript(サードパーティ連携や 自作の初期化コードなど)が動作しない このイベントを起点に処理を行っている実装がある場合、影響を受けます

これらはhtmxの初期化処理そのものが止まることに起因する、原理上考えられる 症状です。実際にどこまで顕在化するかはページの構成やタイミングに左右され、 発生条件が不安定(同じページでも読み込みタイミング次第で起きたり 起きなかったりする)なのも特徴です。

原因

a-blog cmsでは、JavaScriptで、ページ内にhx-*属性を検出した場合にのみhtmxを動的に読み込む 「遅延読み込み」方式(dynamic)を採用しています。

一方、htmx公式は、モジュール読み込みや動的挿入を含む非同期的な読み込みについて、 標準的な<script>タグでのブロッキング読み込みを前提に設計されており、 それ以外の読み込み方法は動作を保証していないことを明言しています。 実際、htmx本体側でもこの制限を解消しようとする試みが複数回行われましたが、 いずれも別の不具合を招く結果となり撤回された経緯があります (詳細は htmx quirks: Loading htmx asynchronously is unreliable を参照)。

今回の「戻る/進むボタンで画面が更新されない」不具合は、a-blog cmsの 動的読み込み方式が、この既知の制限に該当したことが原因です。

対応

private/config.system.yamlhtmx_load_strategy 設定を追加しました。

htmx_load_strategy: static

内容

dynamic(既存サイトの既定値)

hx-*属性検出時にJavaScriptで htmxを動的に読み込む従来方式。htmxが不要なページでは読み込まれず軽量ですが、戻る/進むボタンの不具合が起こり得ます。

static(新規インストールの既定値)

hx-*属性検出時にPHP 側で標準的な<script>タグを出力し、htmxを読み込む、htmx公式が想定する方式。戻る/進むボタンの不具合は発生しません。

移行ガイド

  • 既定値は互換性維持のため従来どおり dynamic です。既存サイトの動作は変わりません。

  • hx-push-url を使用しているサイト(ブラウザ履歴と連動する構成)では、 static への切り替えを推奨します。

  • hx-ext属性でhtmx拡張機能を利用しているサイトは、dynamic のままだと 今後別の初期化順序の問題が起こり得るため、あわせて static への切り替えを ご検討ください。

  • 新規インストール時は static が既定値のため、通常はそのままご利用ください。

CMS-7721 React 19 アップデート & Tiptap v3 アップデート

管理画面のReactを19系、リッチエディタのTiptapをv3系へアップデートしました。

あわせて、管理画面の拡張基盤を整備しました。型付きイベントバスACMS.events、プラグイン登録の仕組みACMS.plugins、UIの差し込み口(Slot/Fill)などを通じて、プラグイン開発者や制作パートナーがコア改修なしに管理画面の挙動をJavaScriptでカスタマイズできるようになります。

これらの基盤を含む管理画面のパッケージ群(@ablogcms/*)をnpmで公開しました。プラグイン開発時にご利用いただけます。

Ver.3.2.29 現在では実験的機能としての提供になります。予告なく仕様変更が発生する可能性があるのでその点はご了承ください。

CMS-7782 SmartPhoto のアクセシビリティ向上

画像を拡大表示するライブラリ SmartPhoto を最新版へ更新しました。カルーセル操作のラベルなど、アクセシビリティに関する改善が含まれています。

https://appleple.github.io/SmartPhoto/

セキュリティ的な仕様変更の補足

外部URLを取得する機能のセキュリティ強化(Json_2Tplモジュール)

JSON2TPLモジュールで取得先に指定するURLについて、以下の制限を追加しました。

  • 社内ネットワークやプライベートIPアドレス宛のURLは取得できません

  • ローカルファイルの参照は、テーマディレクトリ配下に限定されます

  • レスポンスの Content-Type は JSON・プレーンテキスト系のみ許可されます(それ以外は取得できません)

  • レスポンスサイズの上限(既定5MB)、リダイレクト回数の上限(デフォルト5回)を設けました

社内システムのAPIやテーマ外のローカルファイルを取得先に指定している場合は、取得できなくなることがあります。その場合は、環境設定ファイル(.env)に以下の設定を追記して明示的に許可してください。

JSON2TPL_SSRF_WHITE_LIST=10.0.1.0/24,192.168.1.100
JSON2TPL_LOCAL_WHITE_LIST=storage/,/var/www/shared-data
JSON2TPL_MAX_CONTENT_LENGTH=5242880
JSON2TPL_MAX_REDIRECTS=5

外部URLを指定できる機能でのTLS証明書検証の有効化

Webhookの送信先URL、埋め込みユニットの参照先URLなど、利用者側で任意のURLを指定できる機能について、TLS証明書の検証を既定で有効にしました。

送信・取得先のサーバーが自己署名証明書や期限切れ証明書を使用している場合、通信が失敗するようになります。該当する送信先・参照先がある場合は、正しい証明書への切り替えをご検討ください。

.env に HTTP_SSL_VERIFY=false を設定することで検証を無効化する仕組みもありますが、本番相当の環境(DEBUG_MODE が無効な環境)では機能しません(中間者攻撃を防ぐための仕様上の制約です)。開発環境での一時的な検証用途に限られるため、本番での恒久対応としては通信先の証明書を是正してください。

(LINEログインなど、CMS側であらかじめ通信先が固定されている機能は対象外です。)

HTTP_SSL_VERIFY=false

プロキシ配下でのアクセス元IP判定の厳格化

ロードバランサー・リバースプロキシ配下で運用しているサイトについて、config.server.php の TRUSTED_PROXY_LIST で指定したプロキシから接続してきた場合に限り、X-Forwarded-For 等の転送ヘッダーを信用するようにしました。

これまでは TRUSTED_PROXY_LIST が設定されていれば、接続元がそのプロキシ自身かどうかに関わらず転送ヘッダーを信用していたため、TRUSTED_PROXY_LIST の記述漏れ・タイポ・ロードバランサーのIP変更などがあった場合、意図せず転送ヘッダーが無視され、ログインIP制限・ログイン試行ロック・監査ログのアクセス元IPがロードバランサー自身のIP(実質同一IP)になっていることがあります。

該当する運用をしている場合は、config.server.php の TRUSTED_PROXY_LIST に、実際に接続してくるロードバランサー・プロキシのIPアドレス(またはCIDR)を正しく指定してください。IPアドレスが動的に変わり事前に列挙できない構成では、次のように ‘*’ を指定できます(「すべてのIPを信頼する」ではなく「接続してきた相手だけを信頼する」という意味です)。

// サーバーへプロキシ経由以外で到達できない構成でのみ使用してください
define('TRUSTED_PROXY_LIST', '*');
// IPアドレス範囲が公開されているCDN(Cloudflare等)ではCIDRで列挙してください
// define('TRUSTED_PROXY_LIST', '173.245.48.0/20,103.21.244.0/22');

クライアントキャッシュまわりの見直し

クライアントキャッシュ有効時間のデフォルト値変更

クライアントキャッシュ有効時間(cache_expire_client)のデフォルト値を 300秒 から 0秒(キャッシュしない)に変更しました。

既存サイトを本バージョンにアップデートする場合、管理画面または private/config.system.yaml で明示的に値を設定したことがある場合はその値が優先されるため影響はありません。一方、一度も管理画面やprivate/config.system.yaml から明示的に変更したことがなく、デフォルト値に依存している場合は、この変更によりキャッシュ有効時間が変わりますのでご注意ください。

CDN 配下での Cache-Control ヘッダー修正

CDN(CloudFront・Cloudflare等)配下で運用しているサイトについて、これまで中間キャッシュのオフロードを妨げていた Cache-Control ヘッダーの記述を修正しました。修正後は CDN 側でのキャッシュが正しく効くようになるため、更新反映のタイミングが CDN のキャッシュ有効時間(s-maxage、上記のキャッシュ有効時間の設定値と連動)に依存するようになります。即時反映を期待する運用をしている場合は、上記のキャッシュ有効時間の設定もあわせてご確認ください。


最後に

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

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

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