Craft CMS のエントリフィケーション計画について

2023年3月7日、Craft CMS の公式ブログにて、エントリフィケーション計画が発表されました。

The Entrification Plan | Craft CMS
https://craftcms.com/blog/entrification

これは「独立したエレメントタイプとして存在するカテゴリ・タグ・グローバルセットを将来的にエントリへ統合する」というもので、Craft 4.4 から自動変換するためのコンソールコマンドが用意されています。

最終的に Craft 6 で完了する計画ではあるものの、余裕があるうちに対応しておいた方が良さそうですね。

そこで、エントリフィケーション計画の概要と対応方法についてご紹介します。
これは Craft CMS Advent Calendar 2023 25日目の記事です。

エントリフィケーション計画とは

エントリフィケーション計画とは、カテゴリ・タグ・グローバルセットをエントリの対応するセクションに移行するもので、具体的には次のように統合されるそうです。

エレメントタイプ統合後のセクションタイプ
カテゴリグループストラクチャー
タググループチャンネル
グローバルセットシングル

こうして比較してみると、エントリに移行した場合でも違和感なく利用可能なことがわかります。

実際の案件でも「シングルにするか、グローバルセットにするか?」と悩むケースがあったため、理にかなっていると思います。

なお、この計画は Craft 6 に向けて進められ、次のような段階を踏む予定です。

Craft 4.4

コンソールコマンド entrify が追加され、カテゴリ、タグ、グローバルセットを自動変換できます。
あわせて、エントリとカテゴリのフィールド設定に 階層を維持 オプションが追加され、ストラクチャーのエントリ選択時もカテゴリと同様に階層構造を維持できるようになっています。

Craft 5

カテゴリ、タグ、グローバルセットが段階的に廃止され、新規作成できなくなります。
また、コントロールパネルの「エントリ」が「コンテンツ」に置き換わる予定です。

Craft 6

カテゴリ、タグ、グローバルセットのサポートが完全に削除されます。

さて、ローカル環境で確認したところ、Craft 5.0-alpha.3 時点ではカテゴリ、タグ、グローバルセットの新規作成が可能でした。

そのため、今すぐに対応すべきという話ではないものの、今後新規作成する場合はあらかじめエントリとして用意してもいいかもしれません。

コンソールコマンドで変換してみる

では、コンソールコマンドを実際に試してみましょう。
今回は、カテゴリグループ ブログ(blog) をセクションに変換してみます。

なお、実行前にデータベースのバックアップはお忘れなく。。。

./craft entrify/categories blog

セクション名など、順を追って入力していきます。

コマンド実行結果のサンプル

それぞれの項目については、ブロックごとに簡単に解説します。なお、Section handle などは実際の入力内容に応じて初期値が変化します。

セクションについて

移行先となる新しいセクションに関する設定項目です。

項目説明入力サンプル
Have you already created a section to replace the “ブログ” category group?既存の同名セクションを置き換えるか?no
Section nameセクション名Category Blog
Section handleセクションハンドルcategory_blog
Enable entry versioning for the section?エントリのバージョン管理を有効にするか?no
Initial entry type name入力タイプ名Default(初期値)
Initial entry type handle入力タイプハンドルdefault(初期値)

サンプルでは ブログ(blog) セクションが既に存在していたため、同名セクションを置き換えるかを確認しています。

投稿者について

エントリでは「投稿者」が必要となるため、ユーザー名、または、メールアドレスで指定します。

項目説明入力サンプル
Enter the username or email of the author that the entries should haveエントリの投稿者とするユーザー名、または、メールアドレスeditor

カテゴリグループについて

移行元のカテゴリグループを残すかどうかの設定です。

項目説明入力サンプル
Delete the “ブログ” category group?元のカテゴリグループを削除するか?yes

「投稿者」を指定した時点で、カテゴリグループに含まれるすべてのデータは移行先セクションのエントリに変換されているため、削除しても問題ありません。

登録データについて

リレーションフィールドのフィールドタイプを変換するかどうかの設定です。

項目説明入力サンプル
Found one Categories field relating to the “ブログ” category group.
Convert it to an Entries field?
カテゴリグループのリレーションフィールドをエントリのリレーションフィールドに変換するか?yes

既に紐づいているデータも移行後のエントリに置き換えてくれるので、yes としておくのが無難です。

ここまでの操作で、カテゴリグループ ブログ(blog) がセクション Category Blog(category_blog) に変換されました。

タグやグローバルセットも同様となりますので、必要に応じて変換しておきましょう。

テンプレートの調整

コンソールコマンドで変換を行った後は、テンプレートの調整が必要です。

例として、 ブログ(blog) グループのカテゴリを次のように取得していたとします。

{% set categories = craft.categories.group('blog').all() %}

これを変換後の Category Blog(category_blog) セクションのエントリの取得に置き換えます。

{% set categories = craft.entries.section('category_blog').all() %}

テンプレートの調整はこのレベルの軽微なもので済むと思われますが、カスタムプラグインでカテゴリグループを利用している場合は、そちらも修正が必要な点に注意してください。

まとめ

今回は、Craft CMS のエントリフィケーション計画と対応方法について、ご紹介しました。

将来的にカテゴリ、タグ、グローバルセットがなくなるというのは、とても大きな変化です。
ですが、用意されたコンソールコマンドを利用することで、必要なマイグレーション処理を自動で行ってくれるため、安心して対応できそうです。

この辺りの利便性も、Craft CMS の魅力の一つですね。