JavaScript

目次

組み込みJSについて

a-blog cmsには、標準でJavaScriptが組み込まれています(組み込みJSと呼んでいます)
設定変更の方法について紹介します。各機能の詳細についてはリファレンスを参照してください。


サイトの表示側の組み込み JS ではなく、管理画面の拡張や JavaScript 全体の選び方を知りたい場合は、JavaScript でカスタマイズする、または管理画面の JavaScript 拡張の一覧を参照してください。

各種ライブラリの使用と設定について

各種機能には、ライブラリを使用しているものが多数あります。基本的な設定は/js/config.js に記載しています。
CKEditorなどライブラリによっては、それぞれのconfigファイルがあるものもあります。

設定を変更する場合は、config.jsの内容を変更する必要がありますが、直接/js/config.jsファイルを変更するのではなく、/themes/お使いのテーマ/js/xxxx.js を作成し、必要な値を上書きするようにします。
直接config.jsを変更しないのは、CMSのバージョンアップ時に誤ってconfig.jsを上書きするリスクを回避するためです。

設定を編集する

使用したいJavaScriptファイルを用意する

適用しているテーマフォルダ内にJavaScriptファイルを入れます。

例)「sample.js」というJavaScriptファイルを使用したい場合
/themes/適用しているテーマ/js/sample.js

テンプレートから参照する

JavaScriptを適用したいテンプレートのhead内に、使用したいJavaScriptファイルを参照するソースコードを記述します。a-blog cms用のJavaScriptファイルの参照コード(「BEGIN_MODULE Js」〜「END_MODULE Js」の部分)より後に記述してください

例)「sample.js」というJSファイルを使用したい場合のhead内の記述

<!-- BEGIN_MODULE Js --><script type="text/javascript" src="/acms.js{arguments}" charset="UTF-8" id="acms-js"></script><!-- END_MODULE Js -->
<script type="text/javascript" src="/js/sample.js" charset="UTF-8"></script>

JavaScriptを編集する

手順1項で作成したJavaScriptファイルに、設定を記述します。/js/config.jsの設定を上書きすることになります。頭に「ACMS.Config.」を付けて記述してください。
また、Ver. 2.5.0よりacms.jsが非同期的にjavascriptを読み込み実行しますので、config.jsが読まれた事が保証される
ACMS.Ready(function() { });
の中に書きます。

例)検索キーワードのハイライトを適用するセレクタ要素を追加する場合

ACMS.Ready(function() {
    ACMS.Config.searchKeywordHighlightMark  = '.entryTitle, .search .summary, .selectKeyword';
});

配列で設定を複数記述する記述方法

同じページで同じJavaScriptの動作を複数の場所で動作させたい場合、ブログ内で違う設定で動作させたい場合などに、配列で記述します。括弧([], {})の位置に注意してください。

例)絵文字の設定を配列で複数設定する場合

ACMS.Ready(function() {
ACMS.Config.emoArray    = [
    {
        'mark'      : 'textarea.js-emoditorEmoji',
        'toolbar'   : [['Emoji']],
        'config'    : {
            enterMode       : 1,
            language        : 'ja'
        }
    },
    {
        'mark'      : 'textarea.js-emoditorColor',
        'toolbar'   : [['TextColor','BGColor']],
        'config'    : {
             enterMode       : 1,
             language        : 'ja'
        }
    }
];
});
ACMS.Ready(function() {
ACMS.Config.bxsliderConf = 
{
    mode            : 'fade', // horizontal | vertical | fade
    speed           : 800,
    captions        : true,
    auto            : true,
    pause           : 6000,
    adaptiveHeight  :true
};
});

初期化の完了を待つ

ACMS.Ready() は従来どおり使えます。Ver. 3.2.29 からは、初期化が完了しているかどうかを直接確認することもできます(実験的機能。Ver. 3.2 の間は実験的機能として提供し、Ver. 3.3 で正式に提供する予定です)。

if (ACMS.readyStates.ready === 'complete') {
  console.log('すでに初期化が完了しています');
} else {
  ACMS.events.on('acms.state.ready', () => {
    console.log('初期化が完了しました');
  });
}

管理画面のカスタマイズについて

管理画面の動作を変えたい場合は、組み込み JS ではなく 管理画面の JavaScript 拡張(実験的機能)を使います。

組み込みJSのイベントハンドラ


イベントハンドラを設定する事で、ある特定のJavaScriptのイベント(クリックイベントなど)が発生した時に処理を挟み込めます。a-blog cmsでは組み込みJSが実行したイベントの後に処理を実行できるようにするため、いくつかのイベントハンドラを用意しています。

a-blog cms が用意しているイベントは ACMS.addListener を利用することでイベントに対してリスナーを登録することができます。

Ver. 3.2.29 以降は、新しいイベントの仕組み ACMS.events が使えます。ACMS.addListener と ACMS.dispatchEvent について、これまでのコードはそのまま動作し、既存のイベントも引き続き発火します。新しく書くコードでは ACMS.events を使うことをおすすめします。

ACMS.events は、イベントが発火した後に登録したリスナーには、過去の発火を届けません(ACMS.addListener は届けます)。そのため、起動時のイベント(acmsReady・acmsAdminReady)は ACMS.events.on ではなく、ACMS.ready()・ACMS.adminReady() を使ってください。

ACMS.addListener('eventName', function (event) {
  console.log(event);
});

また、event オブジェクト の detail プロパティにアクセスすることでイベント独自のカスタムデータを参照することができます。

ACMS.addListener('eventName', function (event) {
  console.log(event.detail); // or console.log(event.obj)
});

今のイベント

Ver. 3.2.29 以降の書き方

受け取る値

acmsReady

ACMS.ready(fn)(従来の ACMS.Ready(fn) も使えます)

なし

acmsAdminReady

ACMS.adminReady(fn)

なし

acmsDispatch

ACMS.events.on('acms.dispatch.after', fn)

なし

acmsAddUnit

置き換えなし(引き続き ACMS.addListener('acmsAddUnit', ...) を使います。非推奨にはしていません)

e.target にユニットの DOM

acmsAfterPostInclude

置き換えなし(引き続き ACMS.addListener('acmsAfterPostInclude', ...) を使います)

e.detail.include

acmsAddCustomFieldGroup

ACMS.events.on('field-group.add.after', fn)

{ element }

acmsDialogOpened

ACMS.events.on('dialog.open.after', fn)

{ element }

acmsAdminSelectTab

ACMS.events.on('tab.select.change', fn)

{ tab }

acmsValidateFailed

ACMS.events.on('validator.submit-fail.after', fn)

{ results, form }

acmsFormInvalid

ACMS.events.on('validator.invalid.after', fn)

{ results, element }

acmsFormValid

ACMS.events.on('validator.valid.after', fn)

{ results, element }

acmsFormValidated

ACMS.events.on('validator.validated.after', fn)

{ results, element }

acmsAdminDelayedContents

ACMS.events.on('admin.delayed-contents.change', fn)

{ target, detail }

acmsLazyLoaded

ACMS.events.on('lazy-load.load.after', fn)

{ element }

// acmsReady(Ver. 3.2.29 以降)
ACMS.ready(() => {
  ACMS.Config.postIncludeEffect = 'fade';
});

// acmsAdminReady(Ver. 3.2.29 以降)
ACMS.adminReady(() => {
  // 管理画面の初期化後に行う処理
});

// acmsDispatch(Ver. 3.2.29 以降)
ACMS.events.on('acms.dispatch.after', () => {
  $('[href*=bxslider]').remove();
});

// acmsAddCustomFieldGroup(Ver. 3.2.29 以降)
ACMS.events.on('field-group.add.after', ({ element }) => {
  console.log(element); // カスタムフィールドグループの DOM
});

// acmsValidateFailed(Ver. 3.2.29 以降)
ACMS.events.on('validator.submit-fail.after', ({ results, form }) => {
  console.log(results); // バリデーション結果
});

// acmsFormInvalid / acmsFormValid / acmsFormValidated も同じ形
ACMS.events.on('validator.valid.after', ({ results, element }) => {
  console.log(results);
});

ACMS.events.on は、リスナーの登録を解除するための関数を返します。

acms.dispatch.after は、ACMS.Dispatch() が実行されるたびに(ダイアログやインライン編集で動的にコンテンツが追加される都度)発火します。


このページで説明しているイベントハンドラの書き方は変わりません。既存のテーマを書き換える必要はありません。

管理画面の操作(保存・削除・アップロードなど)に処理を割り込ませたい場合は、管理画面の JavaScript 拡張(実験的機能)を参照してください。処理の中止・送信内容の書き換え・非同期処理の待機ができます。

acmsReady

組み込みJSの実行が出来る段階で発火するイベント。js/config.js などをカスタマイズする時は、このイベントが発火してから設定を行う。またよく使うイベントなのでエイリアスが用意されている ACMS.Ready(function() {});

ACMS.Ready(function() {
  ACMS.Config.postIncludeEffect = 'fade';
});

// 以下でも同じです。
ACMS.addListener('acmsReady', function() {
  ACMS.Config.postIncludeEffect = 'fade';
});

acmsAdminReady

管理画面用の組み込みJSが実行出来る段階で発火するイベント。

ACMS.addListener("acmsAdminReady", function() {
});

acmsDispatch

組み込みJSのディスパッチ処理が終わった時のイベントハンドラ。正確には、ACMS.Dispatch()の処理が終わった後に実行される処理を記述できます。以下の例では、組み込みJSの処理が終わった段階で、bxsliderのCSSを読み込んでいるlinkタグを削除しています。

ACMS.addListener("acmsDispatch", function() {
    $("[href*=bxslider]").remove();
});

acmsAddUnit

エントリーの編集画面にてユニットが追加された時のイベントハンドラ。カスタムユニットでJavaScriptを利用したい場合などに利用します。

ACMS.addListener("acmsAddUnit", function(e) {
   console.log(e.target); // ユニットの dom が入っています。
});

acmsAfterPostInclude

PostIncludeで動的にHTMLが読み込まれた後に実行されるイベントハンドラ。webフォントや、配置を揃えるJSなどの利用が考えられます。

ACMS.addListener("acmsAfterPostInclude",function(){
   //ここに処理が入ります。
});

acmsAddCustomFieldGroup

カスタムフィールドグループで項目が追加された時のイベントハンドラ。 以下の例では、カスタムフィールドグループで項目が追加された時、その項目に対して、DatepickerのJSが動くようにしています。

ACMS.addListener("acmsAddCustomFieldGroup",function(e) {
    console.log(e.target); // カスタムフィールドグループの dom が入っています。
});

acmsDialogOpened

モジュールID編集用ダイアログや、ブログ編集用ダイアログなどのダイアログウィンドウが表示されるタイミングで発火するイベントです。

ACMS.addListener("acmsDialogOpened", function() {

});

acmsAdminSelectTab

管理画面で使われているタブパネルが切り替わったタイミングで発火するイベントです。

ACMS.addListener("acmsAdminSelectTab", function() {

});

acmsValidateFailed

フォームのsubmitボタンを押した時に組み込みJSによるバリデーションに失敗したタイミングで発生するイベントです。

ACMS.addListener("acmsValidateFailed", function(event) {
  console.log(event.detail.results); // バリデーション結果を取得できます。
});

acmsFormInvalid

「組み込みJSによるバリデーション」に失敗したタイミングで発生するイベントです。

ACMS.addListener("acmsFormInvalid", function(event) {
  console.log(event.detail.results); // バリデーション結果を取得できます。
});

acmsFormValid

「組み込みJSによるバリデーション」に成功したタイミングで発生するイベントです。

ACMS.addListener("acmsFormValid", function(event) {
  console.log(event.detail.results); // バリデーション結果を取得できます。
});

acmsFormValidated

「組み込みJSによるバリデーション」によるバリデーションが行われたタイミングで発生するイベントです。

ACMS.addListener("acmsFormValidated", function(event) {
  console.log(event.detail.results); // バリデーション結果を取得できます。
});

acmsAdminDelayedContents

ダイアログや、タブなど後から表示されるコンテンツが表示されるタイミングで発火するイベントです。

ACMS.addListener("acmsAdminDelayedContents", function() {

});

acmsLazyLoaded

組み込みJSの 「遅延読み込み」により要素の遅延読み込みが完了したタイミングで発火するイベントです。

ACMS.addListener("acmsLazyLoaded", function() {

});

オリジナルのイベントハンドラを用意する

また、独自にイベントハンドラを用意することも可能です。以下のように、ACMS.dispatchEventでイベントを発行します。

//イベントの発行
ACMS.dispatchEvent("イベントハンドラ名");
ACMS.dispatchEvent("イベントハンドラ名", dom, detail, options);
  • 第1引数(必須): イベントハンドラ名
  • 第2引数(オプション): リスナーでイベントが発行されたdomを取得できます。
  • 第3引数(オプション): 任意のオブジェクトをリスナーで取得できます。
//ハンドラの実行
ACMS.addListener("イベントハンドラ名", function(event) {
    // dispatchEventで渡した dom が取得できます。指定していない場合は、window.document が入っています。
    console.log(event.target); 
    
    // dispatchEventで渡した detail が取得できます。
    console.log(event.detail); // or console.log(event.obj);
});

Ver. 3.2.29 以降は、ACMS.events.notify でイベントを発行し、ACMS.events.on で受け取れます。イベント名は他と重ならないよう プラグイン名.動作.after のように付けてください。

// イベントの発行
ACMS.events.notify('my-plugin.something.after', { id: 1 });

// ハンドラの実行
const unsubscribe = ACMS.events.on('my-plugin.something.after', (payload) => {
  console.log(payload.id);
});

// 受け取りをやめるとき
unsubscribe();

管理画面向けのイベント(実験的機能)

Ver. 3.2.29 から、管理画面の操作に割り込むための新しいイベントの仕組み(ACMS.events)が加わりました。この機能は、Ver. 3.2 の間は実験的機能として提供し、Ver. 3.3 で正式に提供する予定です。従来のイベントと同時に発火するため、既存の購読はそのまま動作します。

新しい仕組みでは、次のことができます。

  • 操作の中止(確認ダイアログを出して、キャンセルされたら保存しない)
  • 送信内容の書き換え
  • 非同期処理の待機(外部 API に問い合わせてから続行する)

従来のイベントとの対応表は イベント一覧 にあります。

ACMS.addListener について

ACMS.addListener は今後も動作します(撤廃しません)。新しく書く場合は ACMS.events.on を使ってください。詳細は イベント(ACMS.events) を参照してください。

組み込みのJavaScript以外の任意のJavaScriptを使用する

a-blog cmsに標準で組み込まれているJavaScript以外のJavaScriptを使用する方法を説明します。

使用したいJavaScriptファイルを用意する

適用しているテーマフォルダ内にJavaScriptファイルを入れます。

例)「sample.js」というJavaScriptファイルを使用したい場合
/themes/適用しているテーマ/js/sample.js

テンプレートから参照する

JavaScriptを適用したいテンプレートのhead内に、使用したいJavaScriptファイルを参照するソースコードを記述します。a-blog cms用のJavaScriptファイルの参照コード(「BEGIN_MODULE Js」〜「END_MODULE Js」の部分)より後に記述してください。

例)「sample.js」というJSファイルを使用したい場合のhead内の記述

<!-- BEGIN_MODULE Js --><script type="text/javascript" src="/acms.js{arguments}" charset="UTF-8" id="acms-js"></script><!-- END_MODULE Js -->
<script type="text/javascript" src="/js/sample.js" charset="UTF-8"></script>

アセット API で読み込む(Ver. 3.2.29 以降)

Ver. 3.2.29 からは、JS / CSS をハンドル(名前)と依存関係で宣言して読み込めます。テンプレートに直接 <script> を書く代わりに使うと、読み込み順が依存関係から自動的に決まります。

// extension/acms/Hook.php
public function afterBuild(&$res)
{
    \Acms\Services\Facades\Asset::script('my-theme-script', '/themes/my-theme/js/main.js', [
        'position' => 'body_end',
    ]);
}

詳細は アセット API(JS / CSS の登録) を参照してください。

jQueryについて

jQueryはa-blog cmsに標準で組み込まれています。jQueryのバージョンはa-blog cmsのバージョンによって異なります。jQuery関連ファイルが格納されている場所は、/js/library/jquery/内です。
a-blog cmsが標準で使用しているjQueryの情報は、動作条件のjQuery バージョン対応表を参照してください。
a-blog cmsで使用しているjQueryのファイルと異なるバージョンのjQueryを参照すると、a-blog cmsの動作に影響が出ることがあります。

jQueryプラグインを追加する

jQueryプラグインを使用する場合もjavaScriptの場合と同様に、適用しているテーマ内にjQueryプラグインのファイルを置き、head内から参照してください。

jQueryの読み込みについて

Ver. 2.5.0よりjavascriptの読み込みが非同期になった為、jQueryについても非同期で読み込まれまれるようになりました。その為、jQueryを使うプラグインなどをacms.jsより後で読み込んだとしても、その時点でjQueryが読み込まれておらずエラーが発生します。

対策1

jQueryをacms.jsから読み込む事をやめ、テンプレートから直接jQueryをロードします。 以前のバージョンでは組み込みJSのjQueryとバッティングしてエラーを出していましたが、Ver. 2.5.0からテンプレー トから読み込んでいるjQueryを優先して読み込むようになりました。こうする事により、同期的にjQueryが読み込ま れますので、エラーを回避する事が出来ます。

<script src="%{JS_LIB_JQUERY_DIR}jquery-1.11.1.min.js" charset="UTF-8"></script>
<!-- BEGIN_MODULE Js -->
<script src="/acms.js{arguments}" charset="UTF-8" id="acms-js"></script><!-- END_MODULE Js -->

対策2

Ver2.5.0より追加された特殊な組み込みJSを利用します。組み込みJSが読み込まれた時に実行したい処理を以下のメソッドに指定します。

ACMS.Ready(function() {
// 組み込みJSが読み込まれた後に実行したい処理
});

また、jQueryプライグインなどを読み込みたい場合はACMS.SyncLoaderという組み込みJSを利用して同期的にロードしてきます。

ACMS.Ready(function() {
new ACMS.SyncLoader()
.next(‘%{SYSTEM_THEMES_DIR}js/読み込みたいプラグイン1.js’) .next(‘%{SYSTEM_THEMES_DIR}js/読み込みたいプラグイン2.js') .load();
});

このjavascriptを利用すると、nextで指定した順番にロードが完了しだい次のjavascriptが読み込まれるようになります。最後のload()を呼ぶことによりロードが開始されます。

JavaScript でカスタマイズする


a-blog cms は、サイトの表示側と管理画面の両方を JavaScript でカスタマイズできます。目的によって使う仕組みが違うので、まずどれに当てはまるかを選んでください。

1. サイトの表示側に JavaScript を足したい

テーマに独自の JavaScript を読み込んだり、a-blog cms が用意している組み込み JS(バリデーション・遅延読み込み・地図など)の設定を変えたい場合です。

2. 管理画面の動作を変えたい・UI を足したい

「アップロードする前に画像をチェックしたい」「エントリー一覧に独自のボタンを足したい」「独自のブロックやユニットを追加したい」といったカスタマイズです。プラグインの形で JavaScript を書きます。

JavaScript が書ければ始められます。ビルド環境(webpack や Vite)は必要ありません。

実験的機能 管理画面の JavaScript 拡張は、Ver. 3.2 の間は実験的機能として提供し、Ver. 3.3 で正式に提供する予定です。管理画面に追加した独自の JavaScript・CSS は、バージョンアップ後の動作を保証しません。これらを原因とする不具合は、サポートの対象外です。詳細は各ページの注記を確認してください。

3. 管理画面と同じ見た目の画面を作りたい

プラグインの設定画面や独自の管理ツールを、a-blog cms の管理画面と同じデザインで作りたい場合です。管理画面で使っている CSS フレームワークと React コンポーネントを npm パッケージとして公開しています。

PHP 側のカスタマイズを探している場合

JavaScript ではなく PHP で処理を挟みたい場合は、次のページを参照してください。

npm パッケージ(@ablogcms/*)


管理画面フロントエンドの一部を npm パッケージとして公開しています。型補完を受けながらプラグインを開発したり、管理画面と同じ UI コンポーネントを使って独自の画面を作れます。

実験的機能

この機能は、Ver. 3.2 の間は実験的機能として提供し、Ver. 3.3 で正式に提供する予定です。

  • 変わりうる範囲: 公開しているサブパスと API は、マイナーバージョンアップで変更される可能性があります。
  • 変わらない範囲: サイト表示側の組み込み JS は、従来どおり ACMS.Library 経由で使えます。テーマの書き方は変わりません。
  • 公開 API の線引き: このページの「公開 API」に掲載しているものを公開 API として扱います。それ以外は保証対象外のパッケージとして扱います。
  • サポート対象外: 管理画面に追加した独自の JavaScript・CSS は、バージョンアップ後の動作を保証しません。これらを原因とする不具合は、サポートの対象外です。

npm パッケージを使わなくてもプラグインは書けます。 window.ACMS 経由のグローバル API だけで、イベントの購読・UI の差し込み・機能の登録はすべて行えます(管理画面の JavaScript 拡張)。

対応バージョン: Ver. 3.2.29 以降(パッケージは、同じバージョン番号の a-blog cms 向けに npm で公開しています)

公開ポリシー

  • このページで説明しているものが公開 API です。 それ以外のパッケージ・サブパスも利用できますが(保証対象外)、告知なく変更されることがあります。
  • バージョンは a-blog cms 本体と一致します。 利用している CMS と同じバージョンを指定してください。
  • ESM のみを配布しています。 require() では読み込めません。バンドラ、または ESM に対応した Node.js で利用してください。
  • 公開しているサブパス以外を import しないでください。内部のパスは予告なく変わります。
npm install @ablogcms/types@3.2.37

上の例は Ver. 3.2.37 の場合です。^3.2.37 のような範囲指定ではなく、利用している CMS と同じバージョンを固定することを推奨します。

公開 API

使い方をドキュメントで説明しているパッケージです。

パッケージ内容ドキュメント
@ablogcms/typesACMS グローバルの型定義開発環境と型定義
@ablogcms/eventsイベントの型定義・イベント型の宣言イベント
@ablogcms/pluginsプラグイン API の型・withFillPropsプラグイン API
@ablogcms/components管理画面の UI コンポーネント(Slot / Fill を含む)管理画面と同じ見た目で画面を作る
@ablogcms/block-editorブロックエディターの型・Tiptap / ProseMirror の参照口オリジナルブロックを作る
@ablogcms/unit-editorユニットエディターの型オリジナルユニットを作る
@ablogcms/acms.css管理画面の CSS フレームワークスタイルガイド
@ablogcms/urlURL の生成・解析(acmsPath / parseAcmsPath など)acmsパス
@ablogcms/validatorフォームのバリデーションバリデーター
@ablogcms/fetch-clientCSRF トークンを付与する通信クライアント下記
@ablogcms/dom-readyDOM の構築完了を待つ下記
@ablogcms/deprecated非推奨の警告をデバッグ時に表示する下記
@ablogcms/a11yスクリーンリーダーへの通知下記
@ablogcms/i18n翻訳の取得・プラグインの翻訳リソース下記

保証対象外のパッケージ

管理画面が内部で使っているパッケージです。利用は自由ですが、個別の使い方は説明しておらず、告知なく変更されることがあります。バージョンを固定して利用してください。

パッケージ内容
@ablogcms/mediaメディアライブラリの UI
@ablogcms/utils / @ablogcms/lib汎用ユーティリティ・実行基盤(遅延読み込み・スクリプトローダーなど)
@ablogcms/dialog / modal / drawer / notify / tooltip / tab / pending管理画面の UI 制御(確認ダイアログ・モーダル・通知など)
@ablogcms/resize-image / read-files / pdf画像のリサイズ・ファイル読み込み・PDF プレビュー
@ablogcms/wysiwyg-editorリッチエディター(Trumbowyg ベース)
@ablogcms/keyboard-shortcut / background-processキーボードショートカット・バックグラウンド処理の進捗表示
@ablogcms/kanbanカンバン表示
@ablogcms/react-hooks / react-router / react-utilsReact 用のヘルパー
@ablogcms/acms-icons / commandアイコン名の一覧・修飾キーの表示
@ablogcms/htmxhtmx の組み込み

これらの機能をサイト表示側で使う場合は、npm ではなく ACMS.Library 経由の呼び出し(組み込み JS)を使ってください。そちらは従来からの公開仕様です。

公開 API の使い方

url と validator は、上の表のリンク先(組み込み JS のドキュメント)で、同じ機能の使い方を説明しています。npm パッケージでも、引数と戻り値は同じです。以下は、それ以外のパッケージの使い方です。

fetch-client

CSRF トークン(window.csrfToken)と X-Requested-With ヘッダーを付けて、fetch で通信します。window.csrfToken は、組み込み JS が、ページの <meta name="csrf-token"> から設定します。組み込み JS を読み込んでいないページで使う場合は、自分で設定してください。ステータスが成功以外のときは FetchError を投げます。

import { fetchClient, isFetchError } from '@ablogcms/fetch-client';

try {
  const { data, status } = await fetchClient.get(location.pathname, { responseType: 'text' });
  console.log(status, data.length);
} catch (error) {
  if (isFetchError(error)) {
    console.log(error.status, error.statusText);
  }
}

fetchClient.post(url, body, config) の body には、FormData・URLSearchParams・オブジェクト(JSON として送信)を渡せます。ファイルのアップロードで進捗が必要な場合は、@ablogcms/fetch-client/xhr-upload の xhrUpload(url, formData, { onUploadProgress }) を使います。

dom-ready

DOM の構築が終わってからコールバックを実行します。すでに終わっていれば、その場で実行します。

import domReady from '@ablogcms/dom-ready';

domReady(() => {
  console.log('DOM の準備ができました');
});

deprecated

デバッグモードのときだけ、コンソールに非推奨の警告を出します。本番では何も出しません。

import deprecated from '@ablogcms/deprecated';

deprecated('旧オプション old-option', {
  since: '2026.01.01',
  version: '3.2.0',
  alternative: 'new-option',
});

a11y

スクリーンリーダーにメッセージを読み上げさせます。第2引数は 'polite'(既定)か 'assertive' です。

import { announce } from '@ablogcms/a11y';

announce('保存しました');
announce('保存に失敗しました', 'assertive');

i18n

ACMS.i18n と同じ翻訳を引きます。プラグインが ctx.i18n.addResources() で登録した翻訳は、プラグイン名:キー の形で引きます(機能の登録(レジストリ))。

import { t, getLanguage } from '@ablogcms/i18n';

console.log(getLanguage());
console.log(t('my-plugin:greeting'));

コンポーネントの一覧と実例

管理画面の UI コンポーネントは Storybook で確認できます。実際の表示、指定できる props、バリエーションが載っています。

→ Storybook

Storybook には、管理画面で使っているコンポーネントを掲載しています。このページで説明しているもの以外は保証対象外です(告知なく変更されることがあります)。

ACMS グローバルの型を使う

{
  "compilerOptions": {
    "types": ["@ablogcms/types/acms"]
  }
}

使う機能の型は、対応するパッケージの ./acms を import した分だけ厳密になります(型だけを読み込むため import type {} from と書きます)。

import type {} from '@ablogcms/types/acms';
import type {} from '@ablogcms/events/acms';
import type {} from '@ablogcms/url/acms';

詳細は 開発環境と型定義 を参照してください。

管理画面と同じ見た目を使う

npm install @ablogcms/acms.css@3.2.37
import '@ablogcms/acms.css';

クラス名の一覧は スタイルガイド を参照してください。管理画面のテンプレートの中に差し込む場合は、CSS はすでに読み込まれているためインストールは不要です。

組み込み JS との対応

サイト表示側の機能は、従来どおり組み込み JS として提供しています。テーマの書き方は変わりません。 参考として、実装が入っているパッケージを示します。

機能ドキュメントパッケージ
フォームのバリデーション組み込みJSによるバリデーション@ablogcms/validator
遅延読み込み遅延読み込み@ablogcms/lib
URL の生成(acmsパス)acmsパス@ablogcms/url
画像のリサイズ・アップロード組み込みJS@ablogcms/resize-image / @ablogcms/read-files

変更履歴

バージョン変更内容
Ver. 3.2.29実験的機能として公開