Gutenberg でブロックを作る際に登場する attribute とは、一言で言うとブロック内で保持される『データ』のことです。段落ブロックであれば段落内の文章、画像ブロックであれば画像のURLやリンク先URLなどをさします。
そしてブロックを開発する際に attributes オブジェクトと言うものを作る必要があります。名前からも分かる通り上述の attribute に関連するものです。これは一体なんでしょうか? この記事では attributes オブジェクトについて見ていきたいと思います。
まず知っておかなくてはならないのは、Gutenberg のブロックは最終的にはHTMLとして保存されるということです。当たり前といえば当たり前ですが、これはとても重要です。例えば以下は画像ブロックの例です。
- <!-- wp:image -->
- <figure class="wp-block-image">
- <a href="https://hysryt.com/linkurl">
- <img src="https://hysryt.com/ebi.jpg" alt=""/>
- </a>
- </figure>
- <!-- /wp:image -->
これを Gutenberg エディタで開いた場面を想像してください。この画面では保存されたHTMLがブロックとして表示される必要があります。これはHTMLをそのまま表示すればいいというわけではありません。閲覧者がブラウザで表示するのとは違い、投稿者として修正できる状態でなければならないからです。
エディタ画面でのブロックの出力は edit 関数が担っています。であれば保存されたHTMLをそのまま edit 関数に渡せば修正可能なブロックを出力してくれるかというと、そうはいきません。edit 関数はデータを加工してブロックを出力するという処理のみ行うからです。
ここでいうデータとは、上の例でいう画像のURLや、画像をクリックした時のリンク先URLなどことです。
つまり edit 関数を呼び出すには、HTMLからそういったデータを抽出するという処理を行う必要があります。この抽出処理に必要になるのが attributes オブジェクトです。
以下は画像ブロックの attributes の中の、画像URLについての部分です。
- url: {
- type: 'string',
- source: 'attribute',
- selector: 'img',
- attribute: 'src',
- },
type は抽出データのデータ型、source はデータの抽出場所の分類、selector と attribute はデータの抽出場所を示しています。つまり言い換えると、「データは属性値から取得する。取得場所は <img> の src 属性で、string 型として取得し、urlと言う attribute に格納する」ということになります。
このように attributes オブジェクトは、データ(attribute)の取得方法を定義するためのオブジェクトです。Gutenberg のブロックを動かす上でとても重要な役割を持っています。