Features
Drupalの設定をモジュールとしてパッケージ化し、エクスポート・インポートするための開発者向けツールです。
features
インストール
composer require 'drupal/features:8.x-3.16'
composer require 'drupal/features:8.x-3.14'
composer require 'drupal/features:8.x-3.12'
概要
Featuresモジュールは、Drupalサイトの設定(Configuration)を再利用可能なモジュール(Feature)としてパッケージ化するための強力なツールです。サイトビルダーや開発者は、コンテンツタイプ、フィールド、ビュー、権限などの設定を選択し、それらをカスタムモジュールとしてエクスポートできます。
このモジュールは「バンドル」という概念を導入しており、複数のFeatureを論理的にグループ化し、名前空間を共有させることができます。これにより、特定のプロジェクトやディストリビューション向けの設定管理が容易になります。
Drupal 7時代のFeaturesモジュールとは異なり、Drupal 10/11版はコアのConfiguration Management(CMI)システムと統合されており、設定の変更検出、差分表示、インポート機能を提供します。開発環境と本番環境間での設定同期ワークフローを効率化するために設計されています。
Features
- 設定を再利用可能なモジュール(Feature)としてパッケージ化・エクスポート
- バンドル機能による複数Featureのグループ化と名前空間管理
- アクティブ設定とエクスポート済み設定の差分検出・表示
- 設定のインポート(リバート)によるFeatureからアクティブ設定への復元
- 自動設定割り当て(Assignment)プラグインシステムによる柔軟な設定分類
- インストールプロファイルへのパッケージング機能
- Drushコマンドによるコマンドライン操作のサポート
- config_updateモジュールとの統合による設定差分管理
Use Cases
設定のバージョン管理
サイトの設定をFeatureとしてエクスポートし、Gitなどのバージョン管理システムで管理できます。コンテンツタイプ、フィールド、ビュー、権限などの設定変更履歴を追跡し、必要に応じて以前の状態に戻すことが可能です。チーム開発において設定の競合を可視化し、マージを容易にします。
開発環境から本番環境への設定デプロイ
開発環境で作成した設定をFeatureとしてパッケージ化し、ステージング・本番環境にデプロイできます。Drushコマンド(drush fex、drush fim)を使用することで、CI/CDパイプラインに組み込むことも可能です。設定の差分表示機能により、デプロイ前に変更内容を確認できます。
再利用可能な機能モジュールの作成
ブログ機能、画像ギャラリー機能、イベント管理機能など、特定の機能に必要な設定をまとめてFeatureモジュールとして作成できます。これらのモジュールは他のプロジェクトでインストールするだけで同じ機能を再現でき、コードの再利用性が向上します。
Drupalディストリビューションの開発
特定の用途(ECサイト、企業サイト、コミュニティサイトなど)向けのDrupalディストリビューションを開発できます。バンドル機能を使用して関連するFeatureをグループ化し、インストールプロファイルとしてパッケージ化することで、完全なサイト構成を配布可能な形式で提供できます。
マルチサイト環境での設定共有
複数のDrupalサイトで共通の設定(共通のコンテンツタイプ、ブランディング設定など)をFeatureとして管理し、各サイトで共有できます。サイト固有の設定と共通設定を分離することで、メンテナンス効率が向上します。
設定の監査とドキュメント化
Featureにエクスポートされた設定を通じて、サイトの設定状態を文書化・監査できます。どの設定がどのFeatureに属しているか、設定がデフォルト状態から変更されているかを確認でき、サイトの状態を把握するのに役立ちます。
Tips
- Featureの名前には意味のある接頭辞を使用してください。例: mysite_blog、mysite_events。これによりFeatureの目的が明確になり、管理が容易になります。
- バンドルを使用する場合は、最初にバンドルを作成してから設定のエクスポートを開始してください。後からバンドルを変更すると、既存のFeatureとの整合性が崩れる可能性があります。
- 頻繁に変更される設定(ブロック配置など)とあまり変更されない設定(コンテンツタイプ定義など)は別々のFeatureに分離することを検討してください。
- 開発中は「Allow conflicts」オプションを活用すると便利ですが、本番デプロイ前には設定が重複していないことを確認してください。
- 大規模なサイトでは、割り当てメソッドの設定を慎重に行い、自動割り当ての結果を確認してから手動で調整してください。
- CI/CDパイプラインにdrush features:export && drush features:importを組み込むことで、設定の変更を自動化できます。
- 「Mark all config as required」オプションは、特定のFeatureから設定が他のパッケージに移動されないようにする場合に有用です。
Technical Details
Admin Pages 11
/admin/config/development/features
設定をFeatureモジュールとしてパッケージ化・エクスポートするためのメイン画面です。既存のFeature一覧の表示、新規Feature作成、選択したFeatureのエクスポートが可能です。
/admin/config/development/features/bundle/{bundle_name}
バンドルの作成・編集・削除を行う画面です。バンドルは複数のFeatureをグループ化し、共通の名前空間を提供します。
/admin/config/development/features/edit/{featurename}
個別のFeatureの設定内容を編集する画面です。名前、説明、バージョン、含める設定項目を選択・変更できます。
/admin/config/development/features/diff/{featurename}
アクティブ設定とFeatureにエクスポートされた設定との差分を表示します。変更された設定項目を視覚的に確認し、選択した項目をインポート(リバート)できます。
/admin/config/development/features/bundle/_exclude/{bundle_name}
パッケージから除外する設定タイプやモジュール提供設定を指定します。
/admin/config/development/features/bundle/_base/{bundle_name}
ベースとなる設定タイプを指定し、それらを含むFeatureを「ベースFeature」として扱います。
/admin/config/development/features/bundle/_core/{bundle_name}
サイト全体で共有されるコア設定タイプを指定します。これらは個別のFeatureではなく「Core」パッケージに割り当てられます。
/admin/config/development/features/bundle/_site/{bundle_name}
サイト固有の設定タイプを指定します。これらは「Site」パッケージに割り当てられます。
/admin/config/development/features/bundle/_optional/{bundle_name}
config/optional ディレクトリにエクスポートする設定タイプを指定します。これらの設定は依存関係が満たされた場合にのみインストールされます。
/admin/config/development/features/bundle/_alter/{bundle_name}
エクスポート時に設定から削除する要素を指定します。UUIDや権限などサイト固有の情報を除去できます。
/admin/config/development/features/bundle/_profile/{bundle_name}
インストールプロファイル用の設定を指定します。
権限 2
Hooks 2
hook_features_assignment_alter
設定がパッケージに割り当てられる際に処理を変更できます。割り当て結果をカスタマイズする場合に使用します。
hook_features_export_alter
Featureがエクスポートされる直前に、パッケージの内容を変更できます。
Drush Commands 8
drush features:status
現在のFeatures設定を表示します。現在のバンドル、エクスポートフォルダ、有効な割り当てメソッドを確認できます。
drush features:list:packages
生成可能な既存のFeatureとパッケージの一覧を表示します。パッケージ名を指定すると、そのパッケージに割り当てられた設定を一覧表示します。
drush features:export
設定をカスタムモジュールとしてエクスポートします。パッケージを指定しない場合、すべてのパッケージがエクスポートされます。
drush features:import
モジュール設定をサイトにインポートします。Feature名またはFeature:設定名の形式で指定できます。
drush features:import:all
すべてのインストール済みFeatureからモジュール設定をインポートします。変更のあるFeatureのみが対象となります。
drush features:diff
アクティブ設定とFeature設定の差分を表示します。変更された設定を色分けで表示します。
drush features:add
設定項目をFeatureパッケージに追加します。
drush features:components
Feature用の設定コンポーネントを一覧表示します。タイプを指定すると、そのタイプのコンポーネントのみ表示されます。
Troubleshooting 6
設定がconfig/installではなくconfig/optionalに配置されている可能性があります。config/optionalの設定は依存関係が満たされた場合にのみインストールされます。バンドルのoptional割り当て設定を確認してください。また、キャッシュクリア(drush cr)を実行してください。
UUIDやその他のサイト固有の値が原因で差分が検出されている可能性があります。バンドル設定の「alter」メソッドでUUID削除オプションを有効にしてから再エクスポートしてください。
Webサーバーがmodulesディレクトリに書き込み権限を持っていない可能性があります。modules/customディレクトリを作成し、適切な書き込み権限を設定するか、Download Archiveボタンを使用してローカルにダウンロードした後、手動で配置してください。
割り当てメソッドの優先順位(Weight)と設定を確認してください。各メソッドはWeight順に実行され、先に割り当てられた設定は後のメソッドでは変更されません。excludeメソッドで特定の設定を除外するか、Feature編集画面で手動で割り当てを変更できます。
Featureが依存するモジュールがインストールされていない可能性があります。Feature内のconfig/*.ymlファイルの依存関係を確認し、必要なモジュールを先にインストールしてください。または、設定を正しい順序でインポートするため、drush fim --forceを使用してください。
Drush 12以上が必要です。drush.services.ymlがモジュールディレクトリに存在し、適切に読み込まれていることを確認してください。drush crでキャッシュをクリアし、drush list | grep featuresでコマンドが登録されているか確認してください。
Security Notes 4
- 「export configuration」パーミッションは信頼できる管理者にのみ付与してください。設定エクスポートにはサイトの構造情報が含まれる可能性があります。
- エクスポートされたFeatureには機密情報(APIキー、データベース認証情報など)が含まれていないことを確認してください。これらは通常settings.phpで管理されるべきです。
- バージョン管理システムにFeatureをコミットする前に、機密データが含まれていないことをレビューしてください。
- Writeアクションはファイルシステムに直接書き込むため、Webサーバーの書き込み権限設定には注意が必要です。本番環境ではDownload Archiveを使用し、手動でデプロイすることを推奨します。