ブロックエディターで任意のHTMLを書けるようになりました(HTMLブロック)


Ver. 3.2.36から、ブロックエディターにHTMLブロックが加わり、本文の途中に任意のHTMLを書けるようになりました。

よく使うのは、外部サービスが発行する埋め込みコードを貼る場面です。会社案内のページにGoogleマップの地図を置く、イベントの告知記事にGoogleフォームの申し込み欄を付ける、といったことが、本文をまるごとHTMLで書き直さずにできます。前後の文章は、これまでどおり段落や見出しのブロックで書けます。

次の画像は、HTMLブロックにGoogleマップの埋め込みコードを貼り、公開側で表示したところです。

公開側のページに、ベースキャンプ名古屋の場所を示すGoogleマップが表示されている
完成形

Googleマップの地図を貼る

  1. Googleマップで場所を開き、「共有」から「地図を埋め込む」を選びます。「HTML をコピー」を押すと、<iframe>で始まる埋め込みコードがコピーされます。

  2. a-blog cmsのエントリー編集画面で、本文の空の行にカーソルを置き、行の左に出る「+」を押します。メニューの「挿入」にある「HTML」を選ぶと、HTMLブロックが入ります。本文で「/html」と入力して、出てきた「HTML」を選んでも同じです。

本文に入ったHTMLブロック。「HTMLを編集」ボタンがある
追加した直後のHTMLブロック
  1. 「HTMLを編集」を押すと、編集画面が開きます。左の欄に、コピーした埋め込みコードを貼ると、右のプレビューに地図が出ます。「行を折り返す」のチェックを外すと長い行を折り返さずに表示し、プレビューは「拡大」で広げられます。

HTMLを編集する画面。左に地図の埋め込みコード、右に地図のプレビューが並ぶ
HTMLを編集する画面
  1. 「更新」を押すと、ブロックの中に地図のプレビューが表示されます。書き直すときは、もう一度「HTMLを編集」を押します。ブロックをダブルクリックしても編集画面が開きます。

地図のプレビューが表示されたHTMLブロック
更新後のHTMLブロック
  1. エントリーを保存し、公開側のページで地図が出ることを確かめます。

この例では、ベースキャンプ名古屋の地図の埋め込みコードを、Googleマップが出力したまま貼りました。

<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3261.3525740238033!2d136.887427!3d35.172764!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x600376dc919b8655%3A0x5bbf0168ec8292bb!2z44OZ44O844K544Kt44Oj44Oz44OX5ZCN5Y-k5bGL!5e0!3m2!1sja!2sjp!4v1791337181488!5m2!1sja!2sjp" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>

公開側の出力は、widthやstyleなどの属性も含めて、貼ったコードのままです。検証に使ったblogテーマでは、スマートフォンの幅(375px)で開くと、地図は画面の幅に合わせて縮みました。縮むかどうかはテーマのCSSによります。

Googleフォームを貼る

Googleフォームも同じ手順で貼れます。埋め込みコードが出てくるのは、フォームの編集画面の右上にある「その他」(縦に3つ並んだ点)から「HTML を埋め込む」を選んだときです。幅と高さを指定して「コピー」を押します。

フォームは、編集画面の右上の「公開」を押して公開しておきます。検証では、公開するときの回答者を「リンクを知っている全員」にしました。

次のコードは検証用に作ったフォームの埋め込みコードで、Googleフォームが出力したままのものです。

<iframe src="https://docs.google.com/forms/d/e/1FAIpQLSd1FrIrpn1G8JnMJMMNVfVzbHjHzbqV_FcJcve2UPJk29JSMw/viewform?embedded=true" width="640" height="476" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
公開側のページに、検証用のGoogleフォームが表示されている。連絡方法を選ぶ質問と「送信」ボタンがある
公開側に表示したGoogleフォーム

Googleにログインしていないブラウザで公開側のページを開くと、フォームが表示されました。そのページの中で選択肢を選んで「送信」を押すと「回答を記録しました」と表示され、Googleフォームの回答にも1件として届きました。

公開側の出力を見ると、srcはそのままで、frameborderなどの属性はstyle="border:0;"に置き換わっています。<iframe>の中の「読み込んでいます…」の文字は消えますが、フォームの表示には影響しません。

スマートフォンの幅(375px)で開くと、フォームの幅は画面に合わせて縮みましたが、高さは指定した476pxのままでした。フォームの中身は枠の中でスクロールして読むことになるので、質問が多いフォームは「HTML を埋め込む」で高さを大きめにしておきます。

貼れるサービスと貼れないサービス

公開側のページは、出力するときにHTMLPurifierで危険なタグを取り除きます(コンフィグのstrip_dangerous_tagがonのとき)。<iframe>は、許可したホストのものだけが残る仕組みです。

Ver. 3.2.36で最初から許可されているのは、たとえば次のサービスです。一覧はconfig.system.default.yamlのhtml_purifier_iframe_allowed_hostsにあります。

種類

サービス

地図

Googleマップ、Yahoo! MAP、NAVITIME

Google

Googleフォーム、Googleカレンダー、Looker Studio、ウェブに公開したGoogleドキュメント・スプレッドシート・スライド

動画

YouTube、Vimeo、ニコニコ動画 など

音声

Spotify、Voicy、stand.fm、SoundCloud、Apple Podcasts

資料

Speaker Deck、SlideShare、note など

ツール

Figma、Canva、CodePen、CodeSandbox、Miro など

一覧にないホストの<iframe>は、srcだけが外れて空の枠が残ります。次の画像は、developer.a-blogcms.jpのページを<iframe>で貼り、公開側で表示したものです。枠の大きさだけが残り、中には何も表示されません。

公開側では、iframeが中身のない白い枠として表示されている
許可されていないホストのiframe

一覧にないサービスを使いたいときは、private/config.system.yamlのextends_html_purifier_iframe_allowed_hostsにホストを足します。検証で次の2行を足したところ、上の空の枠だった<iframe>の出力にsrc="https://developer.a-blogcms.jp/"が残るようになりました。Googleマップの<iframe>も消えずに出ていたので、最初から許可されている一覧はそのまま使われています。

extends_html_purifier_iframe_allowed_hosts:
  - developer.a-blogcms.jp|

書式はホスト名/パス|allow属性に許可する値|sandbox属性に許可する値です。www.youtube.com/embedのようにパスまで書くと、そのパスで始まるURLだけを許可します。

html_purifier_iframe_allowed_hostsそのものをconfig.system.yamlに書くと、最初から許可されている一覧ごと置き換わります。足すだけのときに使うのは、extends_の付いたほうです。

iframe以外で表示が変わるもの

編集画面のプレビューと公開側で表示が変わるのは、<iframe>だけではありません。検証環境で確かめた結果が次の表です。

書いたもの

公開側の表示

<p>などの要素、class属性、style属性

そのまま出る

<style>要素

タグごと文字として表示される

<form>要素

<form>と</form>のタグが文字として表示される。中の<input>は残る

<script>の中にJavaScriptを書いたもの

<script>の中身が消える

いちばん気づきにくいのは<style>要素です。プレビューでは指定した色が付きますが、公開側では<style>から</style>までが、本文の中に文字のまま表示されます。

プレビューでは2行とも赤い文字で表示されている
編集画面のプレビュー
公開側では1行目に「<style> .notice { color: #c00; } </style>」がそのまま表示され、style属性を付けた行だけが赤い
公開側の表示

見た目を変えたいときは、style属性で書くか、テーマのCSSにクラスを用意してHTMLブロックからはクラス名だけを指定します。何度も使う見た目なら、テーマのCSSに書いておくほうが後で直すのが楽です。

編集画面にも「閲覧ページで確認してください」と注意書きが出ます。保存したら、サイトプレビューか公開側のページで表示を一度見ておきましょう。

strip_dangerous_tagがoffのサイト

strip_dangerous_tagは新しくインストールしたサイトではonですが、古いバージョンからアップデートしたサイトではoffのままのことがあります(変数の仕様変更についてのお知らせ)。offだと、HTMLブロックに書いたものは<script>も、許可していないホストの<iframe>も含めて公開側にそのまま出ます。エントリーを編集できる人なら誰でもJavaScriptを入れられる状態なので、HTMLブロックを使い始める前に設定を確かめてください。設定のしかたはHTMLPurifier による HTML サニタイズにあります。

メニューに「HTML」が出ないとき

ブロックのメニューに並ぶブロックは、管理画面の「編集画面」にある「ブロックエディター設定」の「ブロックメニュー」で決まります。新しくインストールしたサイトなら、「HTML」は最初から一覧の中です。

ブロックエディター設定のブロックメニュー。段落や見出しの行と並んで「HTML」の行がある
ブロックメニューの設定

アップデートする前にこのブロックメニューを保存していたサイトでは、保存した一覧がそのまま使われるため、「HTML」が入っていないことがあります。その場合は「追加」で行を増やし、ブロックに「HTML」を選んで保存します。アップデートしたサイトでのこの操作は、今回の検証では試していません。

他のブロックとの使い分け

YouTubeやXの投稿のように、URLを貼るだけで表示できるものは、同じVer. 3.2.36で入った埋め込みブロックが使えます。HTMLブロックを使うのは、Googleマップのように埋め込みコードを貼る必要があるときや、ほかのブロックにない要素を書きたいときです。

段落や見出しなど、ほかのブロックをHTMLブロックに変換することはできません。HTMLにしたいときは、HTMLブロックを新しく追加して書き直します。

HTMLブロックの中身は、HTMLを読める人しか直せません。表のように、ほかのブロックで作れるものはそちらで作っておくと、後から直す人が困りません。

参考

検証環境

Ver. 3.2.36で、2026-10-07に確認しました。管理画面の表示は、お使いのバージョンによって異なる場合があります。

同じタグ付けがされている記事