【Craft 5 の新機能】Matrix in Matrix について

Craft 5 から、Matrix フィールドを入れ子にすることができるようになりました。
従来であれば Super Table プラグインなどで実現していた機能ですが、Craft 5 では標準機能として利用できます。

役割を終えた Super Table フィールドは、Craft 5 アップグレードの際に Matrix フィールドへ自動変換され、任意のタイミングでフィールドタイプ自体を切り替えられるようになっています。

So long Super Table! | Verbb
https://verbb.io/blog/so-long-super-table

そこで、今回は「Matrix in Matrix(Matrix のネスト)」について見ていきましょう。
これは Craft CMS Advent Calendar 2024 16日目の記事です。

「エントリタイプ」の変更点について

はじめに、Craft 5 での「エントリタイプ」の変更点を確認しておきましょう。

管理画面の「設定」一覧

これまでセクションに紐づく設定項目だった「エントリタイプ」は、Craft 5 からグローバルリソースとして 設定 > エントリタイプ で管理できるようになりました。

エントリタイプの一覧

エントリタイプは「セクション」と「一部のフィールド(執筆時点では、CKEditor と Matrix)」に紐づけることができます。

Craft 4 まではフィールドレイアウトの構成が全く同じ場合でも、セクションごとにエントリタイプを作成する必要がありました。Craft 5 からはエントリタイプの再利用が可能となり、使用者 列で「どのセクション・フィールドから利用されているか(または、未使用か)」も判断できるようになっています。

「Matrix フィールド」の変更点について

次に、Matrix フィールドの変更点を確認しておきましょう。

Craft 4 の Matrix フィールド編集画面

Craft 4 までは、内包するブロックを Matrix フィールド編集画面で設定していました。

Project Config の仕組みを利用して効率化できるものの、似たようなブロックを持つ Matrix フィールドが複数必要な場合、それぞれの設定を調整するには手間がかかりました。

Craft 5 の Matrix フィールド編集画面

Craft 5 からは、Matrix フィールドの設定上はグローバルリソースの「エントリタイプ」を選択する形になっています。

そのため、Matrix フィールドを配置したエントリタイプを用意し、それを Matrix フィールドの エントリタイプ 欄に紐けるだけで Matrix in Matrix が実現できるようになりました。

エントリ編集画面のサンプル

このサンプルでは次の設定を行い、ニュース エントリの内容を Matrix in Matrix で構成しています。

  • 見出しテキスト など、Matrix ブロックにあたるエントリタイプを作成
  • Matrix フィールド コンテンツ の「エントリタイプ」欄に、ネストさせたいブロックをセット
  • エントリタイプ ラッパー の「フィールドレイアウト」に、Matrix フィールド コンテンツ を配置
  • Matrix フィールド Matrix in Matrix の「エントリタイプ」欄に、エントリタイプ ラッパー をセット
  • エントリタイプ ニュース の「フィールドレイアウト」に、Matrix フィールド Matrix in Matrix を配置

Craft 4 から大きく変わっている部分のため、慣れるのに少し時間がかかるかもしれませんが、Matrix in Matrix が標準機能として利用できるようになったことは、とても大きな進化だと感じます。

Craft 4 からのアップグレードは問題ない?

今年、稼働中の複数プロジェクトで Craft 5 にアップグレードする機会がありましたが、Super Table フィールドが Matrix フィールドに自動変換されることを含め、特に問題は発生していません。

ただし、アップグレード前にバックアップを取得の上、現行バージョンの最新版アップデートを適用しておくとよいでしょう。

Super Table プラグインのアンインストールのタイミングは?

Craft 5 にアップグレードする際、Super Table の登録データは Matrix フィールドに自動変換されます。ただし、フィールド自体は Super Table フィールドとして残るため、アンインストール前にフィールドをコンバートしておく必要があります。

そこで、任意のタイミングで次のコンソールコマンドを実行しておくとよいでしょう。

./craft super-table/migrate

設定 > フィールド の一覧で タイプ 列に Super Table フィールドが存在しないことを確認できたら、プラグインをアンインストールしても問題ありません。

まとめ

Craft 5 で可能になった Matrix in Matrix は、エントリタイプの仕様が大きく変わったことにより、より柔軟なフィールドレイアウトを実現できるようになった結果といえます。

似たような設定を複数の場所で調整する必要がなくなったことで、より使いやすい管理画面になったのも嬉しいですね。