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.site
  • drush cget system.site uuid

 

4. 実務フロー(開発→Git→反映先)を「型」にする

4-1. 開発環境:変更を作る場所

  1. 管理画面で設定変更(Views、権限、ブロック、フィールドなど)
  2. drush cex -y
  3. git diff で差分を見る
  4. git add
  5. git commit

コミットメッセージ例:
Update Views configuration
Adjust editor role permissions
Update block placement
※重要:1コミットに詰め込みすぎない。
Views調整と権限変更を同じコミットに入れると、あとで原因の切り分けが重くなります。

4-2. 反映先(ステージング/本番):適用だけする場所

反映先は「変更を作らない」前提で揃えると事故が減ります。
やることはシンプルで、Git更新→importです。

  1. git pull などで最新化(コード+sync YAML)
  2. 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プロジェクトの際は参考にしていただけると幸いです!