Day3:ブロックは“見た目”より“設計”|データの流れを理解する|WordPressブロック自作

最小構成のブロックが動くようになった今、Day3 ではさらに一歩踏み込んで、Gutenbergブロックの設計の本質を理解します。見た目ではなく、状態(attributes)と表示(render)の分離という概念がブロック設計の核です。

なぜ「設計」から考えるのか

ブロックをただ作るだけであれば、コードを書いてしまえば動きます。しかし、本当に強いブロックを作るには、どうデータが動いているかを理解する必要があります。これは将来、OGP取得や外部API連携、パフォーマンス改善などを行うときに不可欠な思考です。

ブロックはどのように保存されるか?

WordPressの投稿本文に保存されるのは、HTMLではありません。dynamic ブロックの場合、投稿内に保存されるのは JSON 形式で、attributes のデータです。

wordpress
<!-- wp:foblocks/test-block {"message":"こんにちは"} /-->

この JSON は WordPress が内部的に解釈して、編集画面や表示画面に反映します。HTML をそのまま保存しているわけではなく、設計データとして保存

edit.js の役割:UI と 状態の関係

edit.js は、編集画面でユーザーとやり取りする部分です。ここでは ユーザーの入力を受け取り、attributes に保存するという役割を担います。

  • 編集用フォームを表示
  • ユーザー入力を受け取る
  • setAttributes を使って状態を更新

ここで更新された attributes は、投稿に保存され、“状態”として保持されます。UI は見た目ですが、attributes はその UI の背後で動いている 状態データなのです。

attributes とは「ブロックの状態」

attributes は、ブロックが“覚えておく必要のある値”を定義する場所です。URL のようなユーザー入力や、取得したデータなどを保存します。

例えば、リンクカードブロックでは次のような設計になります:

  • url:リンク先URL
  • title:OGPタイトル(取得して保存)
  • image:OGP画像URL(取得して保存)
  • label:カードに表示するラベル

属性ごとに“性質”が異なるため、それぞれの扱い方を設計で決めておきます。

render.php の役割:表示の制御

render.php はフロントエンド出力を担当します。保存された attributes を受け取り、HTML を生成する役割です。ここではデータを見て、「どう見せるか」「どの要素を出すか」を決定します。

状態 (attributes) は render.php に渡されるため、render.php 側でデータの存在チェックや fallback 処理をすることで、表示の安定性を担保できます。

fallback (フォールバック)とは、本来表示したいデータが取得できなかった場合に、代わりに表示する代替手段のことです。

edit と render を分離する設計のメリット

edit と render を分離することで、次のようなメリットがあります:

  • 表示する時の負荷が減る
  • 保存された値を使い回せる
  • 表示ロジックを変更してもデータに影響がない
  • 将来の拡張(OGP取得など)をしやすい

この設計思想が理解できれば、ブロック開発の“地平が一段変わる”はずです。

データの流れを図で整理

ブロックでデータがどう動いているかを、処理順で示すと以下のようになります。

ユーザーが入力(UI)
↓
edit.js が setAttributes で状態更新
↓
attributes に保存(JSON)
↓
render.php で HTML 生成
↓
フロント画面に表示

この流れがわかっていると、「どこで何をすべきか」が一目で理解できます。

まとめ

Day3では、「見た目」ではなく「設計」からブロック開発を整理しました。attributes はブロックの状態を保存する場所であり、render.php はその状態をもとに HTML を出力します。

edit と render の分離、データ設計の意図を理解することで、今後の拡張やパフォーマンス改善にも対応できるブロック設計ができるようになります。

次回はこの設計をベースに、より実用的な入力と取得処理に挑戦していきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です