Features

Drupalの設定をモジュールとしてパッケージ化し、エクスポート・インポートするための開発者向けツールです。

features
88,345 sites
123
drupal.org

インストール

Drupal 11, 10 v8.x-3.16
composer require 'drupal/features:8.x-3.16'
Drupal 9 v8.x-3.14
composer require 'drupal/features:8.x-3.14'
Drupal 8 v8.x-3.12
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
Features /admin/config/development/features

設定をFeatureモジュールとしてパッケージ化・エクスポートするためのメイン画面です。既存のFeature一覧の表示、新規Feature作成、選択したFeatureのエクスポートが可能です。

バンドル設定 /admin/config/development/features/bundle/{bundle_name}

バンドルの作成・編集・削除を行う画面です。バンドルは複数のFeatureをグループ化し、共通の名前空間を提供します。

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
設定のエクスポート

Features画面でのエクスポート操作とダウンロードを許可します。Drupalコアのパーミッションです。

サイト設定の管理

バンドル設定、Feature編集、差分表示、インポート操作を許可します。Drupalコアのパーミッションです。

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
エクスポートしたFeatureをインストールしても設定が反映されない

設定がconfig/installではなくconfig/optionalに配置されている可能性があります。config/optionalの設定は依存関係が満たされた場合にのみインストールされます。バンドルのoptional割り当て設定を確認してください。また、キャッシュクリア(drush cr)を実行してください。

「Changed」状態のFeatureがあるが、差分画面で何も表示されない

UUIDやその他のサイト固有の値が原因で差分が検出されている可能性があります。バンドル設定の「alter」メソッドでUUID削除オプションを有効にしてから再エクスポートしてください。

Writeボタンでエクスポートするとパーミッションエラーが発生する

Webサーバーがmodulesディレクトリに書き込み権限を持っていない可能性があります。modules/customディレクトリを作成し、適切な書き込み権限を設定するか、Download Archiveボタンを使用してローカルにダウンロードした後、手動で配置してください。

設定が意図しないパッケージに割り当てられる

割り当てメソッドの優先順位(Weight)と設定を確認してください。各メソッドはWeight順に実行され、先に割り当てられた設定は後のメソッドでは変更されません。excludeメソッドで特定の設定を除外するか、Feature編集画面で手動で割り当てを変更できます。

インポート時に「依存関係が見つからない」エラーが発生する

Featureが依存するモジュールがインストールされていない可能性があります。Feature内のconfig/*.ymlファイルの依存関係を確認し、必要なモジュールを先にインストールしてください。または、設定を正しい順序でインポートするため、drush fim --forceを使用してください。

Drushコマンドが認識されない

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を使用し、手動でデプロイすることを推奨します。