地味で便利なComposerプラグイン drupal/core-recipe-unpack
はじめに
Drupal Core10.3からレシピ機能が登場しました。
ブログ、SEO、サイト内検索などモジュールや管理画面の設定の仕方を知らなくても、レシピを適用するだけでお手軽に機能を追加することができます。
このレシピ機能、とても便利なんですが当初は保守の観点から少し困った点がありました。
それを解決したのが Composerプラグイン drupal/core-recipe-unpack です。Drupal Coreは10.4.0、11.2.0から、Drupal CMSは1.2.0 から標準搭載されています。
core-recipe-unpackプラグインの機能、解決したこと
一言で言うと、Drupal のRecipe パッケージ(type: drupal-recipe)を展開(unpack)して依存関係を整理してくれます。
まずレシピ機能は使い捨てで利用するという概念があります。
Drupal Core10.3でリリースされた当初は、レシピを追加する = Composerでレシピパッケージを追加すると、Composerの上でレシピパッケージの依存関係が残りました。使い捨てとして利用したいのにパッケージの依存関係が残るので、レシピを追加するということはDrupal Core バージョンアップ時の足枷となっていました。その時のIssueは以下です。
Dependencies should be 'unpacked' to the root composer.json and merged/resolved
core-recipe-unpackプラグインが有効な状態でレシピを追加する = composer require レシピパッケージ を実行するとレシピがもつ依存関係、今後Coreと一緒にアップデートする必要があるモジュール・テーマ等は適切にComposerの管理下に入り、レシピは物理的にファイルは残るもののComposerの依存関係には入らなくなります。
具体的には以下の挙動となります。
1. レシピの依存関係はルートのcomposer.jsonに追加される
レシピでインストール指示のあるモジュール・テーマ等がルートのcomposer.jsonに展開される
2. レシピパッケージ自体はcomposer.jsonに追加されない
3. composer.lockが自動更新される
4. レシピはプロジェクトのレシピフォルダに残り、適用することが可能
使い方
すでにcore-recipe-unpackプラグインが存在する場合は、何も気にしなくてOKです。
管理画面やdrushコマンドからレシピを適用したら、recipesディレクトリから適用済みのレシピを削除するだけです。
レシピが追加済みでまだプラグインがない場合は、プラグインを追加して composer drupal:recipe-unpack を実行するだけです。具体的な方法は公式ページを見てみてください。
New Recipe Unpack composer plugin
Getting Started: Configuring Drupal 11 to Apply Recipes
おしまいに
便利な機能として登場したレシピ機能ですが、この drupal/core-recipe-unpack の登場で依存関係を気にしなくて良くなったため誰が使っても良い機能 = Stable版となったと考えています。
Contribedレシピもぞくぞく登場しているので、気軽にレシピを使ってDrupalを構築していきましょう。