Drupalのレシピ機能(Recipes)でサイトの設定や機能を追加する方法

モチヤスタッフ

本記事はDrupal Advent Calendar 2024の17日目の記事です。

Drupal 11の特徴的な機能の1つに「レシピ機能(Recipes)」があります。
必要な設定が定義されているレシピを指定することで、レシピに沿ったサイトや機能を簡単に構築できるというものです。

今回は、そんなレシピ機能を実際に試してみます。

レシピ機能(Recipes)とは?

レシピは10.3と同タイミングでDrupal 11から実験的に追加された機能です。
サイトの基本設定、ユーザー設定、コンテンツタイプなどが定義されたYAMLファイルで、Drupal側でレシピに沿ったサイトや機能を構築してくれます。

レシピ以外にもDrupal 11ではさまざまな機能が追加されています。
その他の機能については、下記の記事でまとめているので、気になる方はそちらもご覧ください。

参考:Drupal 11の新機能まとめ

適用したいレシピの確認

Drupalの「Recipes Cookbook」ページにはレシピの一覧があるので、ここからレシピを探せます。
レシピにはサイト全体に影響しそうな大がかりなものから、特定の機能だけを追加するものなどさまざまです。

ただ、レシピによっては対応Drupalのバージョンが厳格に決められているものもあり、その場合は適したDrupalバージョンにしておかないとレシピの適用時にエラーになる場合があります(Recipes Cookbookにあるレシピの中には、まだDrupal 10.3にしか対応していないものも多いです)。

今回は試しに簡単なレシピを適用してみたいので、Drupal 11に最初から入っているデフォルトのレシピで試してみます。

Drupal 11をインストールすると、「/core/recipes」にデフォルトのレシピが用意されています。
この中から今回はワークフローを自動設定してくれる「editorial_workflow」を適用してみましょう。

スクリーンショット ディレクトリ構成のcore/recipes/editorialworkflowディレクトリにフォーカスが当たっている

開発環境構築

今回、開発環境の構築には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 」と表示されれば成功です。

スクリーンショット レシピ適用前はworkflowモジュールが有効になっていないがレシピ適用後はworkflowモジュールが有効になっている

適用結果の確認

今回適用した「editorial_workflow」は、ワークフローが設定されるレシピです。

そのため、Workflowsモジュールを使うことになるのですが、Drupalの管理画面メニューの[管理]→[機能拡張]を確認してみると、ちゃんと有効になっています。

スクリーンショット lando drushでEditorial workflowレシピが正常にインストールされている

Workflowsモジュールが有効になっているため、[管理]→[環境設定]に移動すると「ワークフロー」の項目が追加されています。

スクリーンショット レシピ適用後にworkflowモジュールが標準で適用されている

「ワークフロー」を選択して一覧を確認すると、「Editorial」ワークフローが追加されています。

スクリーンショット ワークフローモジュールの設定画面でEditorialが追加されている

このようにレシピを適用するだけで、あらかじめ用意されていたYAMLファイルの設定を反映してワークフローの設定ができました。

レシピの内容を修正して適用してみる

先ほどはそのままデフォルトのレシピを適用しましたが、今度はレシピの内容を少し修正してから適用してみましょう。

修正ファイルの用意

「core」フォルダの中は変更したくないので、「core」フォルダと同じ階層に、新たに「recipes」フォルダを作成し、「editorial_workflow」をコピーして「my_workflow」に名前を変更します。

スクリーンショット カスタムレシピのディレクトリrecipes/my_workflow/config/workflows.workflow.editorial.ymlファイルが設置されている

「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 」と表示されれば成功です。

スクリーンショット カスタムレシピをdrushでインストールしている

適用結果の確認

Drupalの管理画面を確認してみると、YAMLファイルの変更通り、「編集ワークフロー」という日本語のワークフローが追加されています。

スクリーンショット ワークフローモジュールの設定画面で編集ワークフローが設定されている

このように、既存のレシピファイルを少し修正してから適用することもできます。

レシピを1から作成したい場合は「Recipe Author Guide(レシピ作成者ガイド)」が公開されているので、そちらを参考にすると良さそうです。

Composerでレシピをインストールして適用する場合

デフォルトのレシピやそこから修正したレシピの場合は先ほどの方法で適用できますが、「Recipes Cookbook」ページにあるレシピを適用したい場合などは、レシピをComposerでインストールして適用する必要があります。

そのためには、Composer側で必要になるツールのインストールや「composer.json」ファイルの修正などの事前準備が必要になります。

少しややこしいのですが、大規模なレシピが多いため、気になる方は各レシピのREADMEなどのドキュメントを確認の上、そちらも試してみてください。

まとめ

今回のようにデフォルトのレシピを少し修正して使ってみるだけでも、最初の環境構築後の設定がラクになることが分かったのではないでしょうか。

これがワークフローの設定だけでなく、Drupal上のさまざまな設定を一括でできるような大規模なレシピだと、サイト構築がかなり効率的になりそうです。

現在はComposerでレシピファイルをインストールする場合に必要な設定が多く、レシピに適したDrupalバージョンなどを確認するためにはYAMLファイルを開いて確認する必要があります。

また、公開されているレシピの数もまだ少ないため、気軽に活用とはいかないかもしれません。

今後レシピの数が増えてきたり、Composer経由のレシピファイルのインストールから適用までがもう少しラクにできるようになると、もっと便利になりそうです。

モチヤスタッフ

Drupalなど技術に関する投稿をモチヤのスタッフが行っています。

モチヤスタッフ の書いた記事一覧

最新の関連記事

Contact お問い合わせ

Drupalでの開発・運用、サーバー構築、Webサイト構築全般、制作費用などに関してお気軽にご相談ください。