Drupalのレシピ機能(Recipes)でサイトの設定や機能を追加する方法
モチヤスタッフ本記事はDrupal Advent Calendar 2024の17日目の記事です。
Drupal 11の特徴的な機能の1つに「レシピ機能(Recipes)」があります。
必要な設定が定義されているレシピを指定することで、レシピに沿ったサイトや機能を簡単に構築できるというものです。
今回は、そんなレシピ機能を実際に試してみます。
レシピ機能(Recipes)とは?
レシピは10.3と同タイミングでDrupal 11から実験的に追加された機能です。
サイトの基本設定、ユーザー設定、コンテンツタイプなどが定義されたYAMLファイルで、Drupal側でレシピに沿ったサイトや機能を構築してくれます。
レシピ以外にもDrupal 11ではさまざまな機能が追加されています。
その他の機能については、下記の記事でまとめているので、気になる方はそちらもご覧ください。
適用したいレシピの確認
Drupalの「Recipes Cookbook」ページにはレシピの一覧があるので、ここからレシピを探せます。
レシピにはサイト全体に影響しそうな大がかりなものから、特定の機能だけを追加するものなどさまざまです。
ただ、レシピによっては対応Drupalのバージョンが厳格に決められているものもあり、その場合は適したDrupalバージョンにしておかないとレシピの適用時にエラーになる場合があります(Recipes Cookbookにあるレシピの中には、まだDrupal 10.3にしか対応していないものも多いです)。
今回は試しに簡単なレシピを適用してみたいので、Drupal 11に最初から入っているデフォルトのレシピで試してみます。
Drupal 11をインストールすると、「/core/recipes」にデフォルトのレシピが用意されています。
この中から今回はワークフローを自動設定してくれる「editorial_workflow」を適用してみましょう。
開発環境構築
今回、開発環境の構築にはLandoを利用しました。
Landoを使ったローカル開発環境の構築方法は過去に記事にしています。
記事ではDrupal 9の構築になっていますが、Drupal 11でも手順はほとんど同じです。
参考:M1/M2にも対応!Landoを利用してDrupalのローカル開発環境を構築!初期設定方法を詳しく解説します(Mac版)
唯一違うのは、「lando init」で初期設定をするときに「What recipe do you want to use(利用したいサービスを選択)」で「drupal11」を選択する必要がある部分です。
もし選択肢に「drupal11」が無い場合は、Lando自体のアップデートが必要になります。
下記コマンドを実行してアップデートしましょう(Docker Desktopのバージョンアップも必要になる場合があります)。
lando update
コマンド実行後に「DO YOU STILL WISH TO CONTINUE?(続行しますか?)」と聞かれた場合は「yes」と入力してenterで続行できます。
レシピの適用方法
レシピを適用するときには、Drupalで提供されているCLIコマンドを使用するか、Drushを使って適用します。
Drushとは、Drupalのさまざまな操作をコマンドラインから実行できるようにするツールです。
詳しい解説は過去に記事にしているので、そちらも合わせてご覧ください。
参考:ターミナルからDrupalを操作する「Drush」コマンドのインストール方法や基本的な使い方
今回はDrushを使う方法でレシピの適用をします。
Drushのインストール
まだDrushをインストールしていない場合は、下記コマンドでインストールしましょう。
composer require drush/drush
Drushをインストールすると、通常「drush」コマンドが使えますが、Landoを使っている場合は「lando drush」のように先頭にlandoを付ける必要があるので注意が必要です。
lando drush ○○
Drushコマンドで適用
Drushのインストールができたら、「drush recipe 適用したいレシピのパス」コマンドでレシピを適用できます。
今回は「editorial_workflow」を試したいので、パスは「core/recipes/editorial_workflow」になります。
Landoの場合は下記のコマンドで適用できます。
lando drush recipe core/recipes/editorial_workflow
「 [OK] Editorial workflow applied successfully 」と表示されれば成功です。
適用結果の確認
今回適用した「editorial_workflow」は、ワークフローが設定されるレシピです。
そのため、Workflowsモジュールを使うことになるのですが、Drupalの管理画面メニューの[管理]→[機能拡張]を確認してみると、ちゃんと有効になっています。
Workflowsモジュールが有効になっているため、[管理]→[環境設定]に移動すると「ワークフロー」の項目が追加されています。
「ワークフロー」を選択して一覧を確認すると、「Editorial」ワークフローが追加されています。
このようにレシピを適用するだけで、あらかじめ用意されていたYAMLファイルの設定を反映してワークフローの設定ができました。
レシピの内容を修正して適用してみる
先ほどはそのままデフォルトのレシピを適用しましたが、今度はレシピの内容を少し修正してから適用してみましょう。
修正ファイルの用意
「core」フォルダの中は変更したくないので、「core」フォルダと同じ階層に、新たに「recipes」フォルダを作成し、「editorial_workflow」をコピーして「my_workflow」に名前を変更します。
「my_workflow」の中には現在3つのファイルがある状態です。
- config/workflows.workflow.editorial.yml
- /tests/src/Functional/GenericTest.php
- recipe.yml
「/config/workflows.workflow.editorial.yml」に細かいワークフローの設定が書かれているので、それを下記のように修正しましょう。
- ファイル名を「workflows.workflow.editorial.yml」から「workflows.workflow.custom_editorial.yml」に変更
- 「id」の「editorial」は既に作成済みのため、「custom_editorial」に変更
- 「langcode」を「en」から「ja」の日本語に修正
- 「label」をそれぞれ日本語に修正
修正後のYAMLは下記の通りです。
langcode: ja
status: true
dependencies:
module:
- content_moderation
id: custom_editorial
label: 編集ワークフロー
type: content_moderation
type_settings:
states:
archived:
label: アーカイブ済み
weight: 5
published: false
default_revision: true
draft:
label: 下書き
weight: -5
published: false
default_revision: false
published:
label: 公開済み
weight: 0
published: true
default_revision: true
transitions:
archive:
label: アーカイブ
from:
- published
to: archived
weight: 2
archived_draft:
label: '下書きに戻す'
from:
- archived
to: draft
weight: 3
archived_published:
label: 復元
from:
- archived
to: published
weight: 4
create_new_draft:
label: '新しい下書きを作成'
from:
- draft
- published
to: draft
weight: 0
publish:
label: 公開
from:
- draft
- published
to: published
weight: 1
entity_types: { }
default_moderation_state: draft
修正ファイルの適用
修正ファイルの準備ができたら、Drushコマンドで適用します。
先ほどとは別フォルダになるので、パスを間違えないように注意しましょう。
lando drush recipe recipes/my_workflow
これも「 [OK] Editorial workflow applied successfully 」と表示されれば成功です。
適用結果の確認
Drupalの管理画面を確認してみると、YAMLファイルの変更通り、「編集ワークフロー」という日本語のワークフローが追加されています。
このように、既存のレシピファイルを少し修正してから適用することもできます。
レシピを1から作成したい場合は「Recipe Author Guide(レシピ作成者ガイド)」が公開されているので、そちらを参考にすると良さそうです。
Composerでレシピをインストールして適用する場合
デフォルトのレシピやそこから修正したレシピの場合は先ほどの方法で適用できますが、「Recipes Cookbook」ページにあるレシピを適用したい場合などは、レシピをComposerでインストールして適用する必要があります。
そのためには、Composer側で必要になるツールのインストールや「composer.json」ファイルの修正などの事前準備が必要になります。
少しややこしいのですが、大規模なレシピが多いため、気になる方は各レシピのREADMEなどのドキュメントを確認の上、そちらも試してみてください。
まとめ
今回のようにデフォルトのレシピを少し修正して使ってみるだけでも、最初の環境構築後の設定がラクになることが分かったのではないでしょうか。
これがワークフローの設定だけでなく、Drupal上のさまざまな設定を一括でできるような大規模なレシピだと、サイト構築がかなり効率的になりそうです。
現在はComposerでレシピファイルをインストールする場合に必要な設定が多く、レシピに適したDrupalバージョンなどを確認するためにはYAMLファイルを開いて確認する必要があります。
また、公開されているレシピの数もまだ少ないため、気軽に活用とはいかないかもしれません。
今後レシピの数が増えてきたり、Composer経由のレシピファイルのインストールから適用までがもう少しラクにできるようになると、もっと便利になりそうです。
モチヤスタッフ
Drupalなど技術に関する投稿をモチヤのスタッフが行っています。