1. まず押さえる:Active config と sync(YAML)の関係
Drupalは、サイトが実際に参照している設定(Active config)を DB側 に持っています。
一方で、環境間で設定を揃えるために、設定をYAMLとして書き出し/取り込む仕組みがあります。
ここで重要なのが export の性質です。
drush cex(config:export)は、DBに入っているActive configを正として、syncディレクトリのYAMLを作り直します。
その際、syncディレクトリの既存内容は削除されます。
この挙動がある以上、sync配下のYAMLを手作業で編集して維持する運用は、消し込み・上書きが起きやすく、ミスの温床になります。
運用は 「管理画面で設定変更 → export → Git差分」 に寄せるのが一番ブレません。つまり、sync配下のYAMLは exportで生成されるファイル として扱います。
2. Gitで管理する範囲と、ディレクトリの考え方
Gitで管理する対象は、syncディレクトリにexportされるYAML(exportで生成されるファイル群) です。
設定変更をYAMLの差分として残すことで、いつ・何を・どう変えたかが追えるようになります。また、設定変更をレビューに乗せられます。
3. よく使うDrushコマンド(最低限+調査用)
3-1. export(開発環境でやる)
開発環境で設定を変えたら、YAMLに落とします。
drush cex -y
これは syncディレクトリへエクスポートします。前述の通り、syncディレクトリの既存内容は削除されます。
3-2. import(反映先でやる:ステージング/本番)
反映先で、YAMLをActive configへ取り込みます。
drush cim -y
実行すると、Drushが変更点を表示して確認を促します。想定外の変更がないかを見て進められます。
3-3. いま入ってる設定を確認する(調査用)
設定値の確認用です。
drush cget system.sitedrush cget system.site uuid
4. 実務フロー(開発→Git→反映先)を「型」にする
4-1. 開発環境:変更を作る場所
- 管理画面で設定変更(Views、権限、ブロック、フィールドなど)
drush cex -ygit diffで差分を見るgit addgit commit
コミットメッセージ例:Update Views configurationAdjust editor role permissionsUpdate block placement
※重要:1コミットに詰め込みすぎない。
Views調整と権限変更を同じコミットに入れると、あとで原因の切り分けが重くなります。
4-2. 反映先(ステージング/本番):適用だけする場所
反映先は「変更を作らない」前提で揃えると事故が減ります。
やることはシンプルで、Git更新→importです。
git pullなどで最新化(コード+sync YAML)drush cim -y
5. チーム運用:ブランチとレビューに乗せる
- featureブランチを切る
- 開発環境で設定変更 →
cex→ commit - PR/MRで差分レビュー
- mainへマージ
- 反映先で main を取り込んで
cim
設定変更が口伝にならず、差分・レビュー・履歴が残ります。
6. 事故りやすいポイントと対策
6-1. sync配下のYAMLは手作業で編集・維持しない
cex がsyncディレクトリを作り直す以上、sync配下を手で編集して維持する運用はしんどくなります。
変更の起点は管理画面、sync配下は exportで生成されるファイル、差分はGitで管理、という役割分担に寄せるのが安定です。
6-2. デプロイ前にDBバックアップを取る
同期前にDBダンプを取ることが強く推奨されています。戻す必要が出たときの保険になります。
6-3. 環境差は「方針」を持って吸収する
環境差(開発だけ有効にしたいモジュール等)は必ず出ます。
ここをYAMLで無理に吸収すると壊れやすいので、方針としてこうします。
- Config Ignore は
core.extensionを ignore しない - 環境別モジュールの差は Configuration Split を使う
この方針は Config Ignore 側で明記されています。
Config Split は、export時に分割ディレクトリへ出し、import時にマージされます。
最後に
Config Import/Export を Git と Drush の手順に落として回すと、設定変更が「その場の作業」ではなく「再現できる手順」になります。
管理画面で変更して cex で固め、Gitの差分でレビューして、反映先は cim で揃える。これだけで、環境差や手戻りの筋が減ります。
さらに、core.extension を ignore しない前提で Config Ignore を使い、環境別モジュールの差は Configuration Split で受ける方針にしておくと、設定の安全性と再現性が上がり、環境間のズレが減って、デプロイの信頼性も上がります。
どうでしたでしょうか、手順を固定することで設定まわりの事故はかなり減ります。
ぜひDrupalプロジェクトの際は参考にしていただけると幸いです!