ブロックエディター

目次

ブロックエディターの基本


ブロックエディターでは、テキスト、画像、ファイルなどのコンテンツを「ブロック」単位で自由に組み立てることができ、みたままの視認性と柔軟性が大幅に向上します。

主な特徴・機能

  • HTMLのコピーアンドペーストに対応

  • スラッシュコマンド

    • マウスでブロックを選択しなくても、直感的にブロック挿入ができるようになります。

  • メディア機能に対応

    • メディアから画像やファイルを挿入することが可能

    • 大元のメディアで画像を差し替えても自動でブロックエディタ側も連動

  • インライン要素にカスタムクラス

    • 設定画面で設定した任意のクラスをインライン要素に設定可能

  • ブロック要素にカスタムクラス

    • 設定画面で設定した任意のクラスをブロック要素に設定可能

  • 2カラム・3カラムレイアウトに対応

    • みたままの状態でマルチカラムレイアウトに対応

  • マークダウンに対応

    • マークダウン記法で入力すると自動的にHTMLに変換します

使用方法

編集テンプレートのカスタムフィールド例

カスタムフィールドをブロックエディタにする場合は、以下のように記述します。

記述ルール

  • js-block-editor クラスを付与した要素が、ブロックエディタとして初期化

  • data-target 属性で、エディタ本体を表示する要素を指定

  • data-html 属性で、編集後のHTMLが格納される input 要素を指定

  • 必ず <input type="hidden" name="xxxxx:extension" value="block-editor" /> を指定

<div class="js-block-editor" data-target=".js-target" data-html=".js-html">
  <div class="js-target acms-admin-form-width-full"></div>
  <input type="hidden" class="js-html" name="hoge" value="{hoge}">
  <input type="hidden" name="field[]" value="hoge">
  <input type="hidden" name="hoge:extension" value="block-editor" />
</div>

表示テンプレートの出力例

ブロックエディタで編集したHTMLを出力するには、以下のように記述します。

記述ルール

  • 必ず raw (標準テンプレート)or safe_html (twigテンプレート)校正オプションを指定

{hoge}[raw] <!-- 標準テンプレートの場合 -->
{{ hoge|safe_html }} <!-- Twigテンプレートの場合 -->

基本設定

初期設定が js/config.js で設定されています。

blockEditorMark: '.js-block-editor',
blockEditorConfig: {
  setMainImageMark: '.js-block-editor-set-main-image',
  tableScrollableWrapperClass: 'acms-table-scrollable',
  tableScrollableClass: 'js-table-unit-scroll-hint',
  /**
    * BlockEditorコンポーネントに渡されるprops
    */
  editorProps: {
    editorProps: {
      attributes: {
        class: 'acms-entry',
      },
    },
  },
},

またdata-editor-props 属性でフィールド毎に設定を上書き可能です。ブロックエディターの編集領域に付与されるクラスをこのブロックエディターフィールドのみ上書きしています

<div
  class="js-block-editor"
  data-target=".js-target" 
  data-html=".js-html"
  data-editor-props='\{"attributes":\{"class":"custom-body-class"\}\}'
>
 ...
</div>

上記の例では、テンプレートエンジンに変数として解決されないようにするため、波括弧をエスケープしています。@verbatimブロックを利用することでも同様の回避が可能です。

メイン画像設定機能

メディア画像のメニューにメイン画像に設定するボタンが用意されています。このボタンを押した時に blockEditorConfig.setMainImageMark に設定されているセレクタの要素(メディアのカスタムフィールド)に、選択している画像をセットします。

メイン画像に設定ボタンを押すことにより、メイン画像に設定できます。
メイン画像に設定する

カスタムフィールド例

<div class="js-media-field">
  <div class="js-droparea" data-thumbnail="{entry_main_image@thumbnail}" data-type="image" style="width:200px"></div>
  <p class="js-text acms-admin-text-danger" style="display:none">許可されていないファイルのため挿入できません。</p>
  <div class="acms-admin-margin-top-mini">
    <button type="button" class="js-insert acms-admin-btn" data-type="image">メディアを選択</button>
  </div>
  <input type="hidden" name="entry_main_image" value="{entry_main_image}" class="js-value js-block-editor-set-main-image" />
  <input type="hidden" name="field[]" value="entry_main_image" />
  <input type="hidden" name="entry_main_image:extension" value="media" />
</div>

従来は、メディア・画像ユニットのみメイン画像に設定することができましたが、Ver. 3.2 から メディアのカスタムフィールドを、Entry_Summaryなどのモジュールで、メイン画像として出力できるようになりました。


テーブルのクラス設定

テーブルのメニューにテーブルを横スクロールして表示するように設定するボタンが用意されています。このボタンを押した時、テーブルのHTMLに設定されるクラスを設定できるようになっています。

スクロールするテーブルにするボタンを押すことで、テーブルが横スクロースされて表示できるようになります。
スクロールするテーブルにする

設定

説明

初期値

blockEditorConfig.tableScrollableWrapperClass

table要素の親要素につけるクラス

‘acms-table-scrollable’

blockEditorConfig.tableScrollableClass

table要素につけるクラス

‘js-table-unit-scroll-hint’

スクロールするテーブルのHTML例

<div class="tableWrapper acms-table-scrollable">
  <table class="js-table-unit-scroll-hint" data-scrollable="true">
    <tbody>
      <tr>
        <td>...</td>
        <td>...</td>
        <td>...</td>
      </tr>
    </tbody>
  </table>
</div>

出力HTMLを囲う要素のクラス名設定

ブロックエディタで出力されるコンテンツ全体を囲む要素に、任意のクラス名を設定することができます。このクラスは管理画面のブロックエディタ編集画面に反映され、独自のスタイル調整に活用できます。

設定

説明

初期値

blockEditorConfig.editorProps.editorProps.attributes.class

コンテンツを囲う親divに設定されるクラス名

‘acms-entry’

編集画面のHTML例

<div class="js-block-editor" data-target=".js-target" data-html=".js-html">
  <div class="js-target acms-admin-form-width-full">
    <div class="acms-admin-block-editor-container">
      <div class="acms-admin-block-editor">
        <div class="acms-admin-block-editor-content" aria-expanded="false">
          <div contenteditable="true" translate="no" class="tiptap ProseMirror entry-style" tabindex="0" autocomplete="off" autocorrect="off" autocapitalize="off" aria-expanded="false">
            編集しているHTML...
          </div>
        </div>
      </div>
    </div>
  </div>
  <input type="hidden" class="js-html" name="xxxxxxxx" value="xxxxxxxxx">
</div>

設定を変更する場合

設定を変更する際は、js/config.js を直接編集しないでください
将来的なアップデートやテーマの互換性維持のため、設定の上書きはテーマ内の HTML テンプレートなどで行ってください。

例:テンプレート内での上書き方法

<script>
ACMS.Ready(() => {
  ACMS.Config.blockEditorConfig.tableScrollableWrapperClass = 'c-table__wrapper';
  ACMS.Config.blockEditorConfig.tableScrollableClass = 'c-table__scrollable';
});
</script>

画像の拡大機能の設定

画像の拡大を行うための識別子として、画像リンクの class 属性に、設定する値を設定できます。デフォルト値は js-smartphoto で、標準ではSmartPhotoを使って画像を拡大させます。

また data-group 属性にエントリーID が自動で付与されます。

他設定と違い js/config.js ではなく private/config.system.yaml で行います。

block_editor_lightbox_class: js-smartphoto

メディア画像の出力例

<a href="/path/to/sample.png?v=20250710172457" class="js-smartphoto" data-group="169">
  <img src="/path/to/sample.png?v=20250710172457" class="unit-id-169 in-view" width="1200" height="675" loading="lazy" data-mid="50" alt="xxxxxx">
</a>

ブロックエディターのカスタマイズ


ブロックエディターのカスタマイズを管理画面から行えます管理画面 > 編集画面 > ブロックエディタ設定 から行えます。

管理ページのブロックエディター設定画面で、ブロックエディタのメニューや、追加できるブロックをカスタマイズできます。
ブロックエディター設定画面

画像設定

ブロックエディターで管理する画像についての設定です。

画像リサイズ

ブロックエディターで追加したメディア画像のリサイズサイズを指定します。ブロックエディターでは、全てのメディア画像がこのサイズにリサイズされます(指定サイズより小さい画像はリサイズされません)

画像リサイズの設定をピクセスで指定します。
画像リサイズ設定

拡大表示

ブロックエディターで追加したメディア画像の拡大表示設定のデフォルトを設定します。

ブロックメニュー

ブロックエディターで追加できるブロック項目を設定できます。

ブロックメニューを追加・削除できます。
ブロックメニュー設定画面
  • ブロック:ブロックの種類

  • ラベル:メニュー表示で表示されるテキスト

  • クラス:追加したブロック要素に付与されるクラス

  • グループ:メニュー表示するときのグループを指定します。空の場合、上で設定されているグループが設定されます。

追加ブロックのメニュー表示に反映されます。
追加ブロックのメニュー表示

メニュー設定

メニュー設定では、テキストを選択したときのメニュー項目の制御ができます。不要な要素があればチェックを外してください。

使いたいメニューにはチェックを入れ、不要なメニューはチェックをはずします。
テキストのメニュー設定画面
テキストを選択することで、メニューが表示されます。
テキストの装飾メニュー

カスタムクラス

カスタムクラスでは、選択したテキストを span で囲って任意のクラスを設定するときの、クラスを設定できます。

*「メニュー設定」で「カスタムクラス」にチェックが入っている必要があります。

ラベルとクラス名を好きな数だけ設定します。
カスタムクラス設定画面
選択したテキストに、カスタムクラスで「注意ラベル」を設定してる例です。
カスタムクラスのメニュー表示例

画像サイズ

メディア画像の表示サイズの選択肢を設定できます。値は % で設定します。

画像サイズの選択肢をラベルと値(%)で設定
画像サイズ設定画面
画像のポップアップメニューのサイズ選択肢に表示されます。
画像サイズのメニュー表示例

カラーパレット

ブロックエディター内で使用するカラパレットの選択肢を設定します。

16進数のカラコードで指定します。(例:#330000)
カラーパレット設定画面
色選択UIの下に、設定したカラーのリストが表示されます。
カラーパレットの表示例

文字サイズ

選択したテキストのフォントサイズを変更する時の、文字サイズの選択肢を設定します。

*「メニュー設定」で「文字サイズ」にチェックが入っている必要があります。

ラベルと値(px,em,rem)のセットで、選択肢を設定します。
文字サイズ設定画面
選択したテキストの文字サイズを、文字サイズ選択肢から選択したサイズに変更します。
文字サイズのメニュー表示例

フォント

選択したテキストのフォントを変更する時の、フォントの選択肢を設定します。

*「メニュー設定」で「フォント」にチェックが入っている必要があります。

ラベルとフォント名のセットで、選択肢を設定します。
フォント設定画面
選択したテキストのフォントを、フォント選択肢から選択したフォントに変更します。
フォントのメニュー表示例

ブロックエディターの基本ブロック


配置機能やカラム機能を閲覧画面で利用する場合は、テーマ側でユニット機能利用時に閲覧側で必要になるCSS の適用が必要です。


ブロックエディターでは、スラッシュコマンド(/)の入力やブロックメニューから、さまざまな種類のブロックを挿入できます。ここでは、基本レイアウトのブロックについて説明します。

基本

段落

通常のテキストを記述するためのブロックです。デフォルトのブロックタイプであり、見出しやリスト以外のテキストは段落として扱われます。Enter を押すと次の段落になり、Shift + Enter で改行が挿入されます。

<p>...</p>

見出し

見出しレベル1〜6に対応するブロックです。文書の構造化やアウトラインの作成に使用します。

ブロック

ラベル

出力HTML

heading1

見出し1

<h1>...</h1>

heading2

見出し2

<h2>...</h2>

heading3

見出し3

<h3>...</h3>

heading4

見出し4

<h4>...</h4>

heading5

見出し5

<h5>...</h5>

heading6

見出し6

<h6>...</h6>

リスト

順序なしリスト(箇条書き)を挿入します。

<ul><li>...</li></ul>

番号付きリスト

順序付きリストを挿入します。

<ol><li>...</li></ol>

引用

引用文を記述するためのブロックです。

<blockquote>...</blockquote>

コード

コードブロックを挿入します。等幅フォントで表示され、改行やスペースがそのまま保持されます。

<pre><code>...</code></pre>

画像

メディアから画像を挿入するブロックです。メディアライブラリと連携し、大元のメディアで画像を差し替えると同一メディアIDを持つすべての画像ブロックが自動で更新されます。

編集メニューで設定できる項目:

  • 配置: 左・中央・右

  • 画像サイズ: 編集画面設定 > ブロックエディター設定で登録した選択肢(例: 100%, 75%, 66%)から選択。

  • キャプション・代替テキスト: アクセシビリティやSEOのためにも設定を推奨

  • リンク: 画像クリック時のリンク先、別タブで開くの有無

  • 拡大表示: デフォルトで有効。SmartPhoto によるライトボックス表示。

  • メイン画像に設定: 編集画面にメディアのカスタムフィールド(blockEditorConfig.setMainImageMark で指定)がある場合、そのフィールドに選択中の画像をセット可能

その他:

  • HTMLをコピー&ペーストしたとき、画像のURLが自サイト内の同一パスに存在するファイルを指している場合、相対パスに自動変換される

  • ペーストやURLで挿入した画像(メディア未登録)は、画像を選択した状態で表示されるアップロードボタンからメディアライブラリに登録できる

<div class="media-image-block align-{left|center|right}" data-type="imageBlock" data-align="..." data-width="..." data-mid="..." data-eid="..." data-no-lightbox="false">
  <figure style="max-width: ...;">
    <a href="..."><img src="..." alt="..." loading="lazy" data-mid="..." /></a>
    <figcaption class="caption">...</figcaption>
  </figure>
</div>

ファイル

メディアからファイル(PDF、Word、Excel など)を挿入するブロックです。画像以外のファイルをダウンロードリンクとして配置できます。

表示形式:

  • アイコン表示(デフォルト): ファイル種別のアイコンとキャプションを表示

  • ボタン表示: リンク風のボタンとして表示。キャプションの設定が必須

編集メニューで設定できる項目:

  • 配置: 左・中央・右(デフォルト: 左)

  • キャプション・代替テキスト: ボタン表示時はキャプションがリンクテキストになる

  • 別タブで開く: リンクを target="_blank" で開くかどうか

  • メディア選択・編集: メディアライブラリからファイルを選択・差し替え

<div class="media-file-block align-{left|center|right}" data-type="fileBlock" data-display-type="icon|button" data-icon="..." data-extension="..." data-file-size="...">
  <a href="...">
    <img src="..." alt="..." />
    <p class="caption">...</p>
  </a>
</div>

※ 別タブで開くが有効な場合は target="_blank"rel="noopener noreferrer" が付与されます。

リンクボタン

ボタン風のリンクを挿入するブロックです。ブロック内でテキストを直接編集でき、そのテキストがボタンのラベルになります。CTA(Call to Action)やダウンロードリンクなどに適しています。

編集メニューで設定できる項目:

  • 配置: 左・中央・右(デフォルト: 中央)

  • リンクURL: クリック時の遷移先

  • 別タブで開く: target="_blank" の有無

操作:

  • ブロックを選択してテキストを入力すると、ボタンに表示される文言を編集できる

  • Enter で次のブロックへ、Backspace で空の場合はブロック削除

<div class="link-button-block align-{left|center|right}" data-type="linkButton" data-align="...">
  <a href="..." class="link-button-block-link" data-type="button">ボタンのテキスト</a>
</div>

テーブル

表を挿入するブロックです。デフォルトで3行×3列のテーブルが作成されます。行・列の追加・削除、セルの結合、ヘッダー行の設定、横スクロール表示の設定が可能です。

<div class="tableWrapper"><table>...</table></div>

区切り線

文章の途中に区切り線を挿入するブロックです。セクションの区切りなどに使用します。

<div data-type="horizontalRule"><hr></div>

レイアウト

2カラムに分割

コンテンツを2カラムのレイアウトに分割します。各カラム内で通常通りブロックの追加・編集が可能です。

<div data-type="columns" data-layout="two-column">
  <div data-type="column">...</div>
  <div data-type="column">...</div>
</div>

3カラムに分割

コンテンツを3カラムのレイアウトに分割します。

<div data-type="columns" data-layout="three-column">
  <div data-type="column">...</div>
  <div data-type="column">...</div>
  <div data-type="column">...</div>
</div>

ブロックエディターの編集画面に閲覧画面と同じスタイルを適用する


ブロックエディターは、見出し・段落・画像・テーブル・カラムなどを「ブロック」単位で組み立てる本文エディターです。標準では、管理画面の編集画面と閲覧画面で見た目が揃うように設計されています。このドキュメントでは、その結論(やること)を先に示し、続いてなぜそれで揃うのかを仕組みの流れに沿って解説します。

ブロックエディターそのものの基本的な使い方は、公式ドキュメント ブロックエディター を参照してください。

結論

編集画面のプレビューと閲覧側の表示を一致させるには、次の 3 点を押さえます。

  • ラッパークラスを揃える — 編集領域と閲覧画面の本文を同じクラスで囲む。標準は acms-entry。変えたい場合は include/edit/custom.js 等で上書きする。

  • そのクラスを起点に CSS を書く.acms-entry { ... } のように、揃えたラッパークラスを起点にスタイルを定義する。

  • 同じ CSS を両画面で読み込む — 管理画面は admin.html@section("editor-css")、閲覧画面はテーマのテンプレートで、同一の CSS を読み込む。

最短ルートは「ラッパークラスを標準の acms-entry のまま使い、.acms-entry を起点にした CSS を 両画面で読み込む」ことです。標準テーマはこの形になっています。以降で、なぜこれで揃うのかを順に説明します。

仕組みの流れ

1. 編集領域と閲覧画面上の本文が同じラッパークラスを共有する

すべての起点は、編集画面のプレビュー領域と閲覧画面の出力が、同じラッパークラスを共有していることです。

  • 編集画面:ブロックエディターの編集領域に、ACMS.Config.blockEditorConfig.editorProps.editorProps.attributes.class で指定したクラスが付与される。デフォルト値は acms-entry

  • 閲覧画面:エントリー本文(ブロックエディターのユニット出力を含む)が、同じ acms-entry クラスでラップされる。

            .acms-entry を起点にした CSS(例: editor-style.css)
                          │
        ┌─────────────────┴──────────────────┐
        ▼                                     ▼
  管理画面の編集領域                      閲覧画面のエントリー本文
  (editorProps の class = acms-entry)   (テンプレートで .acms-entry でラップ)

両者が同じクラスを持つので、そのクラスを起点にした 1 つの CSS が両方に等しく効きます。これが「揃う」ことの本質です。

2. スタイルは acms-entry を起点に記述する

CSS 側は、この acms-entry を起点にしたセレクタで記述します。

.acms-entry {
  /* 本文領域用のスタイル */
  img,
  video {
    max-width: 100%;
    height: auto;
  }
  p {
    font-size: 16px;
  }
}

3. 管理画面でその CSS を読み込む

管理画面のレイアウトでは、テーマ側で admin.htmlをカスタマイズします。 editor-css セクションでエディター用 CSS を読み込んでいます。

<!-- themes/ご利用テーマ/admin.html -->
@extends("/_layouts/admin.html")
@section("editor-css")
<link rel="stylesheet" href="/path/to/editor-style.css">
@endsection

ブロックエディターの編集画面プレビュー領域を囲むHTMLのクラス属性に acms-entry が適用されて出力されるため、同じCSSを共有することができます。

.acms-admin-block-editor-container
  └─ .acms-admin-block-editor
       └─ .acms-admin-block-editor-content   ← ここに acms-entry が付く
            └─ .ProseMirror                   ← TipTap (ProseMirror) の編集領域

4. 閲覧画面でも同じ CSS を読み込む

閲覧画面では、ブロックエディターのHTMLをacms-entry クラス属性をつけたHTMLで囲みます。

<!-- 標準テンプレートの場合 -->
<div class="acms-entry">
<!-- BEGIN unit:veil -->
@include("/include/unit.html")
<!-- END unit:veil -->
</div>
<!-- Twigテンプレートの場合 -->
<div class="acms-entry">
{% if entry.body %}
  {{ entry.body|raw }}
{% endif %}
</div>

閲覧画面のテーマでも .acms-entry を起点にしたスタイルを読み込むことで、手順 1〜3 と合わさって、編集画面と同じ見た目が再現されます。

テーマ独自のスタイルを反映する

「閲覧画面でブロックエディターのコンテンツに独自スタイルを当てている。それを編集画面のプレビューにも反映したい」という場合も、流れは結論の 3 点と同じです。状況に応じて次のいずれかを選びます。

ラッパークラスを変えずに済む場合(推奨)

標準のラッパークラス acms-entry をそのまま使うなら、追加設定は不要です。.acms-entry を起点にしたCSSを用意してください。同じ CSS を閲覧画面のテンプレートでも読み込めば、両画面で一致します。

/* 例: css/editor-style.css */
.acms-entry {
  h2 {
    padding-block-end: 0.25em;
    border-block-end: 2px solid currentcolor;
  }
}

ラッパークラスをテーマ独自のものに変える場合

閲覧画面側で acms-entry 以外のクラス(例:custom-content-style)でスタイルを当てている場合は、編集画面のラッパークラスもそれに合わせます。テーマの include/edit/custom.js 等で editorProps のクラスを上書きしてください。

/* themes/ご利用テーマ/include/edit/custom.js */
ACMS.Ready(function () {
  ACMS.Config.blockEditorConfig.editorProps.editorProps.attributes.class = 'custom-content-style';
});

また、カスタムフィールドの場合は、data-editor-props 属性でフィールド毎に設定を上書き可能です。ブロックエディターの編集領域に付与されるクラスをこのブロックエディターフィールドのみ上書きしています

<div
  class="js-block-editor"
  data-target=".js-target" 
  data-html=".js-html"
  data-editor-props='\{"attributes":\{"class":"custom-content-style"\}\}'
>
 ...
</div>

上記の例では、テンプレートエンジンに変数として解決されないようにするため、波括弧をエスケープしています。@verbatimブロックを利用することでも同様の回避が可能です。

設定したクラスはエディターの編集領域に付与されます。

クラス名を変えたら、include/edit/custom.js 等のラッパークラスカスタマイズ処理を記述したJavaScriptと本文領域のCSS をテーマ直下 admin.html で読み込むようテーマ側をカスタマイズします。

/* 例: css/editor-style.css */
.custom-content-style {
  /* 本文領域のスタイル定義を書く */
}
<!-- /themes/ご利用テーマ/admin.html -->
@section("editor-css")
<link rel="stylesheet" href="/css/editor-style.css">
@endsection

@section("admin-js")
@parent
<!-- 編集画面用カスタムJSを読み込み -->
<script src="/include/edit/custom.js"></script>
@endsection

管理画面でのみ調整したい差分

レイアウト上、編集画面と閲覧画面で完全に同一にはできない部分(操作 UI のための余白など)は、管理画面のラッパー .acms-admin-block-editor を起点にしたセレクタで個別に上書きできます。標準テーマでも、カラムの間隔を管理画面だけ固定値にしている例があります。

/* 閲覧画面側 */
.acms-entry [data-type='columns'] {
  gap: var(--unit-gap-x);
}

/* 管理画面側(操作しやすいよう余白を固定) */
.acms-admin-block-editor [data-type='columns'] {
  gap: 1rem !important;
}

主なクラス名・設定キー

名前

種別

役割

acms-entry

CSS クラス

エントリー本文/編集領域の共通ラッパー(デフォルト値)。

acms-admin-block-editor

CSS クラス

編集画面のエディター領域(管理画面専用の上書き起点)

acms-admin-block-editor-content

CSS クラス

編集領域の本文部分。内側に acms-entry が入る

ACMS.Config.blockEditorConfig.editorProps.editorProps.attributes.class

JavaScript 設定

編集領域に付与するラッパークラス。テーマで上書き可能

@section("editor-css")

セクション

管理画面で読み込む本文用 CSS を上書きするための差し込み領域。テーマで上書き可能

@section("admin-js")

セクション

管理画面で読み込む JavaScript を上書きするための差し込み領域。テーマで上書き可能

カスタムフィールドのブロックエディター設定をフィールド毎に上書きする


ブロックエディターのHTML(.js-block-editor)の data-settings 属性に JSON 形式で個別で設定を上書きすることが可能です。

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

上記の例では、テンプレートエンジンに変数として解決されないようにするため、波括弧をエスケープしています。@verbatimブロックを利用することでも同様の回避が可能です。

ブロックエディターの基本的な使い方は、ブロックエディターの基本を参照してください。

設定可能なオプション

キー

マージ方式

概要

features

Partial<FeaturesSetting>

浅いマージ

テキスト装飾・カスタムクラスなど機能 ON/OFF

blockMenus

BlockMenuOverride

専用スキーマ

「ブロックを追加」メニューの allow / deny / 完全置換

fontSize

FontSizeItem[]

配列差し替え

フォントサイズ選択肢

fontFamily

FontFamilyItem[]

配列差し替え

フォントファミリー選択肢

customClass

CustomClassItem[]

配列差し替え

テキストに当てるカスタムクラス選択肢

imageSizes

ImageSizesItem[]

配列差し替え

画像サイズ選択肢

colorPalette

string[]

配列差し替え

カラーピッカーのパレット

マージ方式の意味:

  • 浅いマージ — 指定したキーだけベース値を上書き、未指定キーはベース値を維持

  • 配列差し替え — ベース値を破棄し、指定した配列で完全に置き換え

  • 専用スキーマ — キー固有の解釈ロジック

未指定のキーはベース値が維持されます。null を渡したキーは「指定なし」と同じ扱いです。


features

テキストメニューに表示する装飾機能や、カスタムクラス選択 UI の表示有無を切り替えます。

: Partial<FeaturesSetting> マージ方式: 浅いマージ

キー

内容

textItalic

boolean

斜体

textUnderline

boolean

下線

textStrike

boolean

取り消し線

textCode

boolean

インラインコード

textMarker

boolean

マーカー(ハイライト)

textColor

boolean

文字色

fontSize

boolean

フォントサイズ選択 UI

fontFamily

boolean

フォントファミリー選択 UI

textSubscript

boolean

下付き文字

textSuperscript

boolean

上付き文字

customClass

boolean

カスタムクラス選択 UI

tableBgColor

boolean

テーブルセル背景色

imageDefaultLightbox

boolean

画像挿入時にデフォルトで拡大表示(Lightbox)を有効にするか

:

{
  "features": {
    "textItalic": true,
    "textColor": true,
    "fontSize": false
  }
}

指定したキーだけベース値を上書きします。例の場合、textItalic textColor fontSize 以外は編集画面設定が利用されます。


blockMenus

「ブロックを追加」メニュー(スラッシュコマンドおよびブロックメニュー)を上書きします。

解釈順序:

blocks が配列 ?
  ├─ Yes → blocks の内容だけがメニューになる(base / allow / deny は無視)
  └─ No  → base メニューを取得
            └─ allow があれば identifier が含まれるものだけ残す
            └─ deny があれば identifier が含まれるものを除外

blockMenus.allow

: string[](識別子の配列。識別子の形式は 識別子 を参照)

ベースメニューから「リストに含まれる識別子だけ」を残します。

{ "blockMenus": { "allow": ["paragraph", "heading2", "heading3", "bulletList"] } }

blockMenus.deny

: string[](識別子の配列)

ベースメニューから「リストに含まれる識別子」を除外します。

{ "blockMenus": { "deny": ["heading1", "image", "linkButton"] } }

allowdeny を併用した場合は、まず allow でフィルタしてから deny で除外します。

blockMenus.blocks

: BlockMenuEntry[]

指定した場合、ベース・allowdeny を完全に無視し、この配列だけがメニューになります(完全置換)。

キー

必須

内容

type

ブロックタイプ名。存在しない type のエントリは無視される

label

メニューに表示するラベル。省略時は type のデフォルトラベル

icon

Material Symbols のアイコン名。省略時は type のデフォルトアイコン

class

このエントリを選んだとき、生成されるブロックに当てる class

group

メニューのグループ見出し

配列順序と group の挙動:

  • 配列順がそのままメニューの並び順になる

  • group を省略すると直前エントリの group を引き継ぐ。最初のエントリで省略すると その他 グループに入る

  • 同じ identifier(type + class)を複数書いた場合は後勝ち(最後のエントリの内容で上書きされ、配置順も最後の位置に揃う)

  • 同じ typeclass 違いで複数並べることが可能。メニューには別エントリとして並ぶ

  • type が空文字または非文字列のエントリは無視される

:

{
  "blockMenus": {
    "blocks": [
      { "type": "paragraph",  "label": "本文",      "group": "テキスト" },
      { "type": "heading2",   "label": "中見出し",  "group": "テキスト" },
      { "type": "heading3",   "label": "小見出し",  "group": "テキスト" },
      { "type": "paragraph",  "label": "リード文",  "class": "lead", "group": "テキスト" },
      { "type": "image",      "label": "画像",      "group": "メディア" },
      { "type": "linkButton", "label": "ボタン",    "group": "メディア" }
    ]
  }
}

fontSize

フォントサイズ選択 UI の選択肢を差し替えます。

: FontSizeItem[] マージ方式: 配列差し替え

:

{
  "fontSize": [
    { "label": "小",   "value": "0.875rem" },
    { "label": "標準", "value": "1rem" },
    { "label": "大",   "value": "1.25rem" }
  ]
}

機能の表示自体は features.fontSize で制御します。


fontFamily

フォントファミリー選択 UI の選択肢を差し替えます。

: FontFamilyItem[] マージ方式: 配列差し替え

:

{
  "fontFamily": [
    { "label": "ゴシック", "value": "sans-serif" },
    { "label": "明朝",     "value": "serif" }
  ]
}

機能の表示自体は features.fontFamily で制御します。


customClass

テキストに当てるカスタムクラス選択 UI の選択肢を差し替えます。

: CustomClassItem[] マージ方式: 配列差し替え

:

{
  "customClass": [
    { "label": "強調",       "value": "is-emphasis" },
    { "label": "注意書き",   "value": "is-caution" }
  ]
}

機能の表示自体は features.customClass で制御します。


imageSizes

画像ブロックのサイズ選択 UI の選択肢を差し替えます。

: ImageSizesItem[] マージ方式: 配列差し替え

:

{
  "imageSizes": [
    { "label": "幅いっぱい", "value": "100%" },
    { "label": "中",         "value": "50%" },
    { "label": "小",         "value": "25%" }
  ]
}

colorPalette

文字色/背景色などカラーピッカーで表示するパレットを差し替えます。

: string[](CSS の色値) マージ方式: 配列差し替え

:

{
  "colorPalette": ["#000000", "#ffffff", "#ef4444", "#3b82f6"]
}

識別子

blockMenus.allow および blockMenus.deny で指定する文字列は 識別子(identifier) です。識別子の形式は次のいずれか。

形式

マッチ対象

type

class なしの該当ブロック

paragraphheading2

type.class

指定 class が当たっているブロック

paragraph.leadheading2.section-title

識別子は厳密マッチです。heading2 は class なしの見出し2 にしかヒットしません。ベースに class="section-title" 付きで登録された見出し2 を制御したい場合は heading2.section-title のように完全な形で書きます。

ベースメニューに登録されているブロックの identifier は、管理画面の「ブロックエディター設定」で登録した内容と BLOCK_DEFINITIONS から決まります。

利用できる type 一覧

blockMenus.blocks[].type および識別子の type 部分で指定できる主なタイプの一覧は次の通りです。

type

内容

paragraph

段落

heading1heading6

見出し(レベル別)

bulletList

箇条書き

numberedList

順序付きリスト

blockquote

引用

codeBlock

コードブロック

image

画像

file

ファイル

linkButton

リンクボタン

table

テーブル

horizontalRule

水平線

columns1 / columns2 / columns3

カラム(1〜3 列)

存在しない type を指定した blocks エントリは無視されます。

注意事項

  • メニュー絞り込みは「入力候補」の制限であり、コンテンツ構造の保証ではありません。 メニューから除外したブロックタイプも、Markdown ショートカット(## で見出し、- で箇条書き、> で引用 など)や TipTap のキーボードショートカット(Cmd+Alt+16 での見出し化など)からは作成できる場合があります。

  • data-settings 属性に渡す JSON が JSON.parse できないと、上書きは適用されずベース設定で動作します。属性値の引用符の入れ子に注意してください

  • 識別子の判定は厳密マッチです。type のみで書いた識別子は class 付きブロックには当たりません

  • blocks で指定したエントリの type が存在しない場合、そのブロックは無視されます。スペルミス・対応 type 一覧との不整合に注意してください