Configuration Split
サイト設定を別々のセットに分割し、異なるディレクトリにエクスポートしたり、インポート時にマージしたり、環境ごとに有効化・無効化したりすることができます。
config_split
インストール
composer require 'drupal/config_split:^2.0'
概要
Configuration Splitは、Drupalの設定管理システムを拡張し、エクスポート時に別々のストレージ(ディレクトリ、コレクション、またはデータベース)にエクスポートされ、インポート時にマージされる設定のセットを定義できるようにします。これにより、Develのような開発用モジュールをローカル環境では有効にしつつ、本番デプロイでは除外するような環境固有の設定管理が可能になります。
このモジュールは2種類の分割を提供します:完全分割では設定が完全にsplitストレージに移動され、syncディレクトリから削除されます。部分分割では設定はsyncに残りますが、差分がパッチとしてsplitストレージに保存されます。分割はsettings.phpのオーバーライドまたはDrupal stateで有効化・無効化でき、エクスポートした設定を変更することなく柔軟な環境固有の動作が可能です。
Configuration SplitはDrushコマンドとシームレスに統合されており、コマンドライン操作が可能です。また、Drupalの設定インポート・エクスポートイベントにフックして、標準的なconfig sync操作時に透過的に分割とマージを処理します。
Features
- 完全分割:設定を完全にsplitストレージに移動し、エクスポート時にメインのsyncディレクトリから削除
- 部分分割:設定をsyncディレクトリに残しつつ、差分のみをパッチとしてsplitストレージに保存
- 複数のストレージバックエンド:splitした設定をファイルシステムフォルダ、configコレクション、またはデータベーステーブルに保存
- 環境固有の有効化:settings.phpのオーバーライドまたはDrupal stateで分割を有効化・無効化し、環境ごとの制御が可能
- モジュールフィルタリング:指定したモジュールに関連するすべての設定を依存設定も含めて自動的に分割
- テーマフィルタリング:テーマ固有の設定を分割(現在は限定的なサポート)
- ワイルドカードサポート:ワイルドカード(例:views.view.*)を使用して複数の設定項目をマッチングして分割
- スタック可能な分割:高いweightの分割が低いweightの分割からの設定を変更できる、レイヤー化された分割を作成
- 設定パッチ:モジュールが分割された際に依存設定を自動的に更新
- Drush統合:エクスポート、インポート、有効化、無効化、ステータスオーバーライド操作の完全なコマンドラインサポート
- UIベースの管理:プレビュー機能付きで分割の作成、編集、管理ができるWebインターフェース
- 差分表示:インポート前にアクティブな設定と分割設定の差分を表示
- config_readonlyとの統合:config_readonlyモジュール用にデータベース分割エントリを自動的にホワイトリストに追加
Use Cases
開発モジュールの管理
Devel、Kint、Stage File Proxyのような開発モジュールをローカルでは有効にしつつ、本番からは除外します。「development」分割を作成し、これらのモジュールを完全分割に追加し、開発環境のsettings.phpで分割を有効化します:$config['config_split.config_split.development']['status'] = TRUE;
本番環境専用の設定
CDN統合、キャッシュポリシー、分析設定などの本番環境固有の設定を開発環境から分離して管理します。本番専用の設定を完全分割に含む「production」分割を作成し、デフォルトで無効にして、本番サーバーでのみ有効化します。
マルチサイト設定の共有
複数のサイト間で共通の設定ベースを共有しつつ、サイト固有のオーバーライドを可能にします。メイン設定と一緒に配布されるべき分割にはコレクションストレージを使用し、環境固有のバリエーションを持つ同じ設定パッケージを異なるサイトに簡単にデプロイできます。
フィーチャーブランチの設定
フィーチャー開発中の設定変更を管理するために部分分割を使用します。ベース設定はsyncに残り、フィーチャー固有の変更はパッチとして保存され、簡単にレビュー、マージ、または破棄できます。
異なる環境用の設定
開発、ステージング、本番環境用に別々の分割を作成します。weightを使用して処理順序を制御し、stackable分割を使用して共有設定の上に環境固有の変更をレイヤー化します。フォルダ構造の例:../config/sync、../config/dev、../config/staging、../config/production
ローカル開発のオーバーライド
「ローカルのみ有効化」機能を使用して、ステータス変更をコミットせずに個々の開発マシンで分割を有効化します。これはconfigではなくDrupal stateを使用するため、各開発者が独自のアクティブな分割を持つことができます。
Tips
- 常にsyncディレクトリの外部のフォルダパスを使用してください。ネストされたディレクトリはconfig sync時にコンフリクトを引き起こします。
- 分割をconfigエクスポート・アーカイブに含める場合(例:配布用)は、コレクションストレージを使用してください。
- 環境間で共有されるべきでないローカル専用の設定には、データベースストレージを使用してください。
- 予測可能な順序付けのために、settings.phpで分割の優先度を設定してください:$settings['config_split_priorities'] = ['production' => 100, 'development' => -100];
- complete/partial listでワイルドカードを使用して柔軟なマッチングを行ってください:views.view.*、system.*、block.block.bartik_*
- 「ローカルのみ有効化」オプションは、共有設定に影響を与えずに分割をテストするのに便利です。
- stackable分割を使用する場合、高いweightの分割が低いweightの分割のエクスポート内容を変更できることを覚えておいてください。
- 各分割のビューページを確認して、プレビュー(エクスポートされる内容)とエクスポート済み(現在保存されている内容)を確認してください。
- CI/CDパイプラインでは、drush cexの後にdrush config-split:exportを使用するか、自動的に実行されるpost-commandフックに依存してください。
- 部分分割は、syncに存在すべきだが環境固有の値(APIエンドポイントなど)が必要な設定に最適です。
Technical Details
Admin Pages 8
/admin/config/development/configuration/config-split
現在のステータス、デフォルトステータス、利用可能な操作とともにすべての設定分割をリスト表示します。ステータスがsettings.phpまたはstateでオーバーライドされているかどうかを表示します。
/admin/config/development/configuration/config-split/add
ストレージの場所、分割するモジュール・テーマ、特定の設定項目を指定して新しい設定分割の定義を作成します。
/admin/config/development/configuration/config-split/{config_split}
エクスポートされる内容のプレビューと現在splitストレージにある内容を含む、分割設定を表示します。
/admin/config/development/configuration/config-split/{config_split}/edit
既存の分割設定を変更。追加ページと同じフォームで現在の値が入力されています。
/admin/config/development/configuration/config-split/{config_split}/activate
アクティブストレージから設定をインポートして無効な分割を有効化します。適用される変更の差分を表示します。
/admin/config/development/configuration/config-split/{config_split}/deactivate
アクティブストレージから設定を削除して有効な分割を無効化します。変更の差分を表示します。
/admin/config/development/configuration/config-split/{config_split}/import
splitストレージからアクティブな設定に設定をインポートします。無効な分割の場合、オプションで有効化します。
/admin/config/development/configuration/config-split/{config_split}/export
現在の設定をsplitストレージにエクスポートします。現在のプレビューと既存のストレージの差分を表示します。
権限 1
Hooks 1
hook_config_readonly_whitelist_patterns
config_readonlyモジュール用のホワイトリストパターンを提供します。Configuration Splitは有効なデータベース分割からのエントリを自動的にホワイトリストに追加します。
Drush Commands 5
drush config-split:export <split>
指定した分割設定のみをそのストレージにエクスポートします。分割が有効である必要があります。
drush config-split:import <split>
分割のストレージからアクティブな設定に設定をインポートします。
drush config-split:activate <split>
アクティブストレージから設定をインポートし、有効として設定することで分割を有効化します。
drush config-split:deactivate <split>
アクティブストレージから設定を削除することで分割を無効化します。
drush config-split:status-override <split> [status]
Drupal stateで分割のステータスオーバーライドを取得または設定します。設定変更なしでランタイム有効化に便利です。
Troubleshooting 7
適切なパーミッションでディレクトリを手動で作成してください。パスがsyncディレクトリの外部であることを確認してください。../config/syncと../config/devのような兄弟ディレクトリ構造を使用してください。
分割が有効であることを確認してください(リストページで現在のステータスを確認)。settings.phpでオーバーライドされている場合、オーバーライドがステータスをTRUEに設定していることを確認してください。settings.phpを変更した後はキャッシュをクリアしてください。
settings.phpのオーバーライドを変更した後、drush crですべてのキャッシュをクリアしてください。configオーバーライドシステムは効果を発揮するためにキャッシュクリアが必要です。
異なるDrupalインストールから設定をインポートしようとした場合に発生します。syncおよび分割ディレクトリに同じサイトインストールからの設定が含まれていることを確認してください。
分割ページの「エクスポート済み」ビューを確認して、splitストレージの内容を確認してください。インポート・エクスポートフォームの差分ビューを使用して、適用前にすべての変更をプレビューしてください。
部分分割では、差分はsyncストレージ(またはstackable分割の場合は合成ストレージ)に対して計算されます。syncのベース設定が期待どおりであることを確認してください。必要に応じて最初にsyncにエクスポートしてください。
分割のweight値を調整してください。低いweightはエクスポート時に最初に処理され、インポート時に最後に処理されます。明示的な制御のために、settings.phpで$settings['config_split_priorities']を設定してください。
Security Notes 5
- 「administer configuration split」パーミッションは「restrict access」としてマークされており、サイト設定の重要な変更を許可するため、信頼できる管理者にのみ付与する必要があります。
- データベースストレージの分割はデータベースダンプに含まれます。機密性の高い設定(APIキー、認証情報)をデータベース分割に保存することに注意してください。
- 分割フォルダは作成時に.htaccessファイル(Apache)で自動的に保護されます。Webサーバーが設定ディレクトリへのアクセスを適切に制限していることを確認してください。
- フォルダストレージを使用する場合、ディレクトリに適切なファイルシステムパーミッションがあり、Webからアクセスできないことを確認してください。
- settings.phpの設定オーバーライドはstateオーバーライドより優先され、本番環境で分割ステータスを強制する安全な方法を提供します。