Craft CMSは「カテゴリ」などの廃止を予定です。今後に備え、エントリへの変換手順を解説します。
Craft CMS を開発する Pixel & Tonic は、将来的に「カテゴリ」や「タグ」といった専用のエレメントタイプを廃止し、すべてをエントリで統一する方向に舵を切っています。これは Craft 5 に向けた方針としてアナウンスされており、公式ブログの記事「Entrification」でも詳しく紹介されています。これにより、開発者は一貫したデータ構造でサイトを構築できるようになります。
その方針に沿って、既存のカテゴリをエントリに置き換える作業が今後ますます重要になります。今回は、entrify/categories
コマンドを使ってカテゴリをエントリに変換し、本番環境に適用するまでの手順をご紹介します。
まずはローカルやステージングなど、開発環境で作業を行います。以下のコマンドを実行して、カテゴリをエントリに変換します。products
部分にはエントリに変換したいカテゴリブルーぷのハンドル名を入れます。
php craft entrify/categories products
対話形式で、変換先のセクションの設定情報を指定できます。基本的には現在のカテゴリグループの内容をそのまま引き継ぐ形で進められます。
完了後、変換されたセクションが生成され、カテゴリと同じ内容を持つエントリが作成されます。
また、カテゴリを関連付けるフィールドがあれば、エントリと関連付けるフィールドに変換されます。
そして、コマンドの最後に以下のような再実行用のコマンドが表示されます。このコマンドは後で本番環境など別の環境に反映する時に使いますので、コピーして保存しておきましょう。
💡 Run this command on other environments immediately after deploying these changes:
php craft entrify/categories products --section=products --entry-type=default --author=tinybeans
カテゴリを参照していたテンプレートを、エントリに置き換えるよう修正します。
たとえば、以下のようなものです。
{# 変更前 #}
{% set categories = craft.categories.group('products').all() %}
{# 変更後 #}
{% set entries = craft.entries.section('products').all() %}
他にもあると思いますので、products
のような旧カテゴリグループハンドル(新セクションハンドル)でテンプレート内を検索したり、一通りページを表示してエラーが出た時のデバッグ情報を確認したりして修正していきましょう。
エントリ用の新しいセクションなどが作成されているので、Project Config
を再構築しておきます。
php craft project-config/rebuild
Git で管理している場合は、config/project/
配下の差分も確認してコミットしましょう。
開発環境での作業が完了したら、本番環境にも反映していきます。以下で紹介している順番に進める必要がありますので、注意してください。
まずは php craft db/backup
で必ずデータベースのバックアップをとりましょう。
config/project/
配下を本番環境にアップロードします。
既存の config/project/
を config/project.old/
のようにリネームしておくと、問題が発生した時にロールバックしやすいです。
本番環境で以下を実行し、設定変更を反映させます。
php craft project-config/apply
開発環境で entrify/categories
を実行したときに表示されたコマンドを、本番環境でも同じように実行します。
# 以下のコマンドは例なのでそのまま実行しないでくださいね
php craft entrify/categories products --section=products --entry-type=default --author=tinybeans
最後にテンプレートファイル(templates/
配下)の変更を反映します。
Pixel & Tonic が掲げる "すべてをエントリに" という方向性に沿って、カテゴリやグローバル、タグからの脱却は避けて通れないでしょう。
entrify
のようなCLIツールを活用すれば、その移行は思ったよりもスムーズに進みます。上記の内容を参考に徐々に進めていきましょう。