🧩 Gutenbergとカスタムブロックとは

Gutenbergとは、WordPress 5.0から導入されたブロックエディタです。段落・画像・見出しなどの「ブロック」を組み合わせて記事を作成します。プラグインで独自のカスタムブロックを追加することで、ユーザーが簡単に複雑なレイアウトを作れるようになります。

💡 カスタムブロックでできること

  • アラートボックス、料金表、タイムラインなど独自UIを提供
  • 管理画面での見た目をフロントエンドに近づけられる
  • ショートコードより直感的に使えるコンテンツ部品を作れる

🛠️ 開発環境の準備

Gutenbergブロックの開発にはNode.jsとnpmが必要です。@wordpress/create-blockを使うと、ひな型を自動生成できます。

# Node.js(v16以上)とnpmをインストール後 # ブロックのひな型を生成(プラグインフォルダで実行) npx @wordpress/create-block my-alert-block # 生成されたフォルダに移動 cd my-alert-block # 開発サーバーを起動(ファイル変更を自動ビルド) npm start # 本番用ビルド npm run build

💡 生成されるファイル構成

src/edit.js(編集画面)、src/save.js(保存HTML)、src/block.json(ブロック設定)の3ファイルが中心です。

📄 ブロックの基本構成

block.json — ブロックの設定ファイル

{ "apiVersion": 2, "name": "mfp/alert-block", "title": "アラートボックス", "category": "text", "icon": "warning", "description": "目立つアラートボックスを挿入します", "textdomain": "my-alert-block", "attributes": { "message": { "type": "string", "default": "ここにメッセージを入力してください" }, "alertType": { "type": "string", "default": "info" } }, "editorScript": "file:./index.js", "style": "file:./style-index.css" }

edit.js — 編集画面の実装

import { useBlockProps, RichText, InspectorControls } from '@wordpress/block-editor'; import { PanelBody, SelectControl } from '@wordpress/components'; export default function Edit( { attributes, setAttributes } ) { const { message, alertType } = attributes; const blockProps = useBlockProps(); return ( <> {/* サイドバーのコントロール */} <InspectorControls> <PanelBody title="アラート設定"> <SelectControl label="種類" value={ alertType } options={[ { label: '情報', value: 'info' }, { label: '警告', value: 'warning' }, { label: 'エラー', value: 'error' }, ]} onChange={ val => setAttributes({ alertType: val }) } /> </PanelBody> </InspectorControls> {/* 編集画面のプレビュー */} <div { ...blockProps } className={ `alert-box alert-${ alertType }` }> <RichText tagName="p" value={ message } onChange={ val => setAttributes({ message: val }) } placeholder="メッセージを入力..." /> </div> </> ); }

save.js — 保存HTMLの実装

import { useBlockProps, RichText } from '@wordpress/block-editor'; export default function Save( { attributes } ) { const { message, alertType } = attributes; const blockProps = useBlockProps.save(); return ( <div { ...blockProps } className={ `alert-box alert-${ alertType }` }> <RichText.Content tagName="p" value={ message } /> </div> ); }

🎨 ブロックパターンの登録

複数のブロックを組み合わせたレイアウトを「パターン」として登録しておくと、ユーザーがワンクリックで挿入できます。

add_action( 'init', function() { register_block_pattern( 'mfp/hero-section', array( 'title' => 'ヒーローセクション', 'description' => '大きな見出しとボタンのセット', 'categories' => array( 'featured' ), 'content' => '<!-- wp:heading {"level":1} --><h1>タイトル</h1><!-- /wp:heading --><!-- wp:buttons --><div class="wp-block-buttons"><!-- wp:button --><div class="wp-block-button"><a class="wp-block-button__link">詳しく見る</a></div><!-- /wp:button --></div><!-- /wp:buttons -->', ) ); } );

✏️ 演習:シンプルなカスタムブロックを作ろう

📝 課題

  1. @wordpress/create-block でブロックのひな型を生成する
  2. テキストと背景色を設定できる「カラーカード」ブロックを作成する
  3. InspectorControlsに色選択コントロールを追加する
  4. npm run buildでビルドし、実際のエディタで動作確認する

✅ この章のチェックリスト

  • create-blockでひな型を生成できた
  • block.jsonの役割を理解した
  • edit.jsとsave.jsの違いを理解した
  • InspectorControlsでサイドバーコントロールを追加できた
  • ブロックパターンを登録できた

🔗 関連ページ・次のステップ

📘 前提知識

🚀 あわせて学ぶ

📚 補足