Craft CMS 4 でカテゴリをエントリに変換する手順

Craft CMSは「カテゴリ」などの廃止を予定です。今後に備え、エントリへの変換手順を解説します。

Craft CMS Logo

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 をリビルドする

エントリ用の新しいセクションなどが作成されているので、Project Config を再構築しておきます。

php craft project-config/rebuild

Git で管理している場合は、config/project/ 配下の差分も確認してコミットしましょう。

本番環境への適用手順

開発環境での作業が完了したら、本番環境にも反映していきます。以下で紹介している順番に進める必要がありますので、注意してください。

データベースのバックアップをとる

まずは php craft db/backup で必ずデータベースのバックアップをとりましょう。

Project Config をアップロードする

config/project/ 配下を本番環境にアップロードします。

既存の config/project/config/project.old/ のようにリネームしておくと、問題が発生した時にロールバックしやすいです。

Project Config を適用する

本番環境で以下を実行し、設定変更を反映させます。

php craft project-config/apply

カテゴリをエントリに変換するコマンドを実行

開発環境で entrify/categories を実行したときに表示されたコマンドを、本番環境でも同じように実行します。

# 以下のコマンドは例なのでそのまま実行しないでくださいね
php craft entrify/categories products --section=products --entry-type=default --author=tinybeans

テンプレートの変更を反映

最後にテンプレートファイル(templates/ 配下)の変更を反映します。

まとめ

Pixel & Tonic が掲げる "すべてをエントリに" という方向性に沿って、カテゴリやグローバル、タグからの脱却は避けて通れないでしょう。

entrify のようなCLIツールを活用すれば、その移行は思ったよりもスムーズに進みます。上記の内容を参考に徐々に進めていきましょう。

Published 2025-05-02
Updated 2025-05-02

⚡️ 話題の一冊 ⚡️