Config Ignore
設定のインポートおよびエクスポート操作時に、特定のDrupal設定を無視できるようにするモジュールです。
config_ignore
インストール
composer require 'drupal/config_ignore:8.x-3.3'
概要
Config Ignoreは、設定同期操作中に特定の設定項目が上書きされるのを防ぐ強力な機能を提供します。これは、サイト名、メールアドレス、開発モジュールの設定など、サイト固有の設定を異なる環境間で変更せずに維持したい場合に特に便利です。
このモジュールは、イベントサブスクライバーを通じてDrupalの設定管理システムと統合され、ストレージ変換イベントをインターセプトして無視対象の設定をフィルタリングします。基本的な無視リストからインポート/エクスポートや作成/更新/削除操作のきめ細かな制御まで、様々な複雑さのニーズに対応するため、3つの操作モード(Simple、Intermediate、Advanced)をサポートしています。
Config Ignoreは、複数の設定に一致するワイルドカードパターン、部分的な無視のための特定の設定キーのターゲティング、チルダ(~)プレフィックスを使用した強制インポート構文、多言語サイト向けの言語コレクションフィルタリングをサポートしています。
Features
- インポート/エクスポート時に設定オブジェクト全体または設定内の特定のキーを無視
- 3つの操作モード:Simple(すべての操作に同じルール)、Intermediate(インポートとエクスポートで別々のルール)、Advanced(インポートとエクスポートの両方で作成/更新/削除を細かく制御)
- アスタリスク(*)を使用したワイルドカードパターンマッチングで複数の設定名に一致(例:'webform.webform.*'はすべてのWebformを無視)
- チルダプレフィックス(~)による強制インポート構文で、ワイルドカードに一致する設定を明示的にインポート可能に
- コロン構文を使用した部分的な設定無視で特定のキーのみを無視(例:'system.site:name'はサイト名のみを無視)
- 翻訳された設定を無視するための言語コレクションサポート(例:'language.fr|system.site:name')
- settings.phpによる非アクティブ化とイベントサブスクライバーの優先度設定のオーバーライド
- 無視する設定をプログラムで変更するための2つのalterフック
- 設定変更を即座に反映するためのキャッシュタグの無効化
Use Cases
環境間でサイト固有の設定を保持
開発環境から本番環境に設定をデプロイする際、サイト名、メールアドレス、スローガンなどのサイト固有の設定は異なる値を維持する必要があることがよくあります。無視リストに'system.site'を追加すると、設定インポート時にこれらの値が上書きされるのを防ぎます。これにより、本番サイトはブランディングを維持しながら、他の設定更新を受け取ることができます。
開発モジュールの設定を無視
Develなどの開発モジュールには、本番環境に転送すべきでない設定があります。'devel.*'のようなワイルドカードパターンを使用して、すべてのDevel関連の設定を無視します。これにより、開発設定が誤って本番環境にデプロイされるのを防ぎます。
メールテンプレートの部分的な設定無視
メールテンプレートが環境によって異なる必要がある場合(例:異なる送信者アドレス)、'user.mail:register_no_approval_required.body'のようなキー固有のパターンを使用して、メール本文のみを無視し、他のユーザーメール設定は通常どおり同期できます。
特定のWebformを除くすべてのWebformを無視
ワイルドカードと強制インポートパターンの組み合わせを使用します:'webform.webform.*'ですべてのWebformを無視し、'~webform.webform.contact'でコンタクトフォームを明示的に強制インポートします。これは、ほとんどのWebformがサイト固有だが、特定のものはコードで管理する必要がある場合に便利です。
翻訳固有の設定の管理
翻訳を上書きすべきでない多言語サイトでは、'language.fr|*'のような言語コレクションパターンを使用してすべてのフランス語翻訳を無視するか、'language.*|system.site:name'を使用してすべての言語のサイト名翻訳を無視しながら他の翻訳は同期できます。
コンテンツタイプの誤削除を防止
Advancedモードで、インポート時の削除操作で'node.type.*'を無視するように設定します。これにより、サイトに存在するがsyncディレクトリから削除されたコンテンツタイプが削除されるのを防ぎ、誤ったコンテンツタイプの削除に対するセーフティネットを提供します。
環境固有のAPIキーと認証情報
環境ごとに異なるAPIキーや認証情報を含む設定は、'mymodule.settings:api_key'のようなパターンを使用して無視できます。これにより、デプロイ時に機密または環境固有の値が上書きされないことを保証します。
Tips
- Simpleモードから始め、インポート/エクスポートの個別ルールや作成/更新/削除の細かい制御が必要な特定のユースケースがある場合にのみIntermediateまたはAdvancedモードに切り替えてください
- 本番環境にデプロイする前に、必ず開発環境で設定無視パターンをテストしてください
- 強制インポートプレフィックス(~)は慎重に使用してください - ワイルドカードマッチを上書きするため、適切に順序付けないと予期しないインポートにつながる可能性があります
- 設定無視パターンは順番に処理され、除外パターン(~)は一致した場合に優先されます
- デバッグ時には、config_ignore.settings設定を直接チェックして、パターンが正しく保存されていることを確認してください
- サイトの状態や環境に依存する動的な無視ルールにはhook_config_ignore_ignored_alterの使用を検討してください
- このモジュールはdrush config:import/exportとUI��ースの設定同期の両方で動作します
Technical Details
Admin Pages 1
/admin/config/development/configuration/ignore
インポートおよびエクスポート操作中に無視する設定を構成します。このページでは、管理者が通常の設定同期プロセスから除外する設定パターンを指定できます。
権限 1
Hooks 2
hook_config_ignore_settings_alter
モジュールがプログラムで設定パターンを無視リストに追加できるようにします。このフックはhook_config_ignore_ignored_alterの導入により非推奨となっています。
hook_config_ignore_ignored_alter
モジュールがすべての無視リストを完全に制御してConfigIgnoreConfigオブジェクトを変更できるようにします。特定の方向(インポート/エクスポート)と操作(作成/更新/削除)のパターンを変更するためのアクセスを提供します。
Troubleshooting 6
パターン構文が正しいことを確認してください。ワイルドカードは%ではなく*を使用します。余分なスペースがないことを確認してください。強制インポート(~)パターンが誤って無視ルールを上書きしていないかチェックしてください。また、正しいモードを使用しており、パターンが操作に対して正しいフィールドにあることを確認してください。
'core.extension'設定は有効なモジュールを制御するため、絶対に無視しないでください。環境固有のモジュールにはConfig Splitモジュールを代わりに使用してください。
settings.phpでConfig Ignoreが非アクティブ化されていないか確認してください($settings['config_ignore_deactivate'] = TRUE)。また、モジュールが有効になっており、キャッシュがクリアされていることを確認してください。
/admin/config/development/configuration/single/importの単一インポート機能を使用して、Config Ignoreルールを適用せずに個別の設定をインポートできます。
settings.phpで優先度を調整してください:$settings['config_ignore_import_priority'] = -100; および $settings['config_ignore_export_priority'] = 100; 優先度が高いほど、無視が早く行われます。
パイプ区切りの言語コレクション構文を使用してください:'language.LANGCODE|config.name'(例:'language.fr|system.site'はsystem.siteのフランス語翻訳用)。
Security Notes 4
- すべての環境で一貫している必要があるセキュリティ上重要な設定の管理にConfig Ignoreを使用しないでください
- パーミッション関連の設定を無視する場合は注意してください。環境間でセキュリティの不整合が生じる可能性があります
- user.role.*設定を無視すると、重要なパーミッション更新のデプロイが妨げられる可能性があります
- セキュリティ監査時には常に無視された設定を確認し、重要なセキュリティ更新がブロックされていないことを確認してください