#Configration Managementとは
- D8のサイト構成を管理するための機能でCoreモジュールとして提供されている。
- configテーブルをはじめ、有効化されているモジュール一覧、コンテンツタイプ・タクソノミー、フィールドなどあらゆるサイト構成が対象。
- サイト構成はYAMLファイルで管理されており、Git管理下に置けば開発サイト→本番サイトへのデプロイも容易に行うことができる。
#環境設定
##YAMLファイルの同期ディレクトリを設定する
settings.php の $config_directories['sync'] にて保存パスを指定する。
$config_directories['sync'] = 'sites/default/config/sync';
デフォルトでは sites/default/files/config_xxxx だがこのパスはGit管理から外す場合が多いので変更したほうがいい。
##サイトのUUIDを一致させる
設定内容を同期するにはサイトのUUIDを一致させておく必要あり。
クローンしたDBならこの作業は不要。
その場合は、ターミナル上でdrushコマンドを使うことになりますが、
以下の手順でUUIDを一致させることができる。
###■操作手順
同期元サイトのUUIDを確認する。
$ drush config-get system.site
uuid: 86d5e75a-f927-4a9a-9739-9093888f4050
同期対象のサイトに同期元サイトのUUIDをセットする。
$ drush config-set system.site uuid 86d5e75a-f927-4a9a-9739-9093888f4050
#Configration Management 管理画面
/admin/config/development/configuration
#Configration Management 管理画面
同期・・・YAMLファイルとDBに保存されているサイト構成の差分を確認して、差分インポートを行う。
インポート・・・全体のサイト構成、または個別にサイト構成をインポート可能。
エクスポート・・・全体のサイト構成、または個別にサイト構成をエクスポート可能。
#Configuration Management with Drush
##エクスポート with Drush
Drushでサイト構成をエクスポートするには config-exportオプション(エイリアスはcex)を指定する。
$ drush cex sync
##インポート with Drush
Drushでサイト構成をインポートするには config-importオプション(エイリアスはcim)を指定する。
$ drush cim sync
#dev環境と本番環境の設定の違いを吸収する
Develなどの開発環境でのみ利用するモジュールは同期対象から外したい。
$ drush cim -y --skip-modules=devel,kint
$ drush cex -y --skip-modules=devel,kint
--skip-modulesパラメーターを利用すればエクスポートから除外したり、develモジュールが無効化された他の環境の影響を回避することができる。
drushrc.phpにあらかじめ--skip-modulesを追加しておくことも可能。
/**
* @file
* Drush configuration file drush/drushrc.php
*/
$command_specific['config-export']['skip-modules'] = array('devel', 'kint');
$command_specific['config-import']['skip-modules'] = array('devel', 'kint');
注意)モジュール周りの設定値は除外できても、関連するエンティティまでは除外されない。
develなどの開発モジュールはいいが、エンティティが絡むモジュールの場合はインポート時に依存エラーになる可能性がある。
#dev環境と本番環境の設定の違いを吸収する
ローカル環境のサイト構成の値を固定しておくことができる。
D7の $conf と同じように settings.php には $config という設定変数があり、これを使ってローカル設定を固定することができる。
$config['name-of.config']['nested']['key']
設定例)SMTPモジュール
$config['smtp.settings']['smtp_on'] = true;
$config['smtp.settings']['smtp_host'] = 'mail.dgcircus.com';
$config['smtp.settings']['smtp_port'] = '587';
$config['smtp.settings']['smtp_protocol'] = 'standard';
$config['smtp.settings']['smtp_username'] = 'sato@dgcircus.com';
$config['smtp.settings']['smtp_password'] = '*********';
$config['system.mail']['interface']['default'] = 'SMTPMailSystem';
このように記述しておけばYMLファイル、DBのどちらのサイト構成の値も無視される。
#サイト設定を編集する with Drush
config-editオプション(エイリアスはcedit)を指定するとサイト構成を編集することができます。
$ drush config-edit
Choose a configuration.
[0] : Cancel
[1] : action.settings
[2] : aes.settings
[3] : block.block.breadcrumbs
[4] : block.block.econocrea_admin
[5] : block.block.econocrea_branding
[6] : block.block.econocrea_local_actions
[7] : block.block.econocrea_local_tasks
[8] : block.block.econocrea_login
[9] : block.block.econocrea_messages
[10] : block.block.econocrea_page_title
・・・
番号を入力→Enterでviエディタによる編集画面が開く。
編集後、保存すれば即時にサイト構成へ反映される。
config-edit の後ろに設定名を直接指定することもできる。
#CMIのサブモジュール
Gitワークフローをサポートしてくれるサブモジュール群です。
-
Configuration Tools
https://github.com/previousnext/drush_cmi_tools -
Configuration Update Manager
https://www.drupal.org/project/config_update -
Configuration Development
https://www.drupal.org/project/config_devel -
Configuration Synchronizer
https://www.drupal.org/project/config_sync -
Configuration Extra
https://github.com/drush-ops/config-extra
##GitとCMIを連携する
####例)開発環境からステージングへ直接ソース展開することが出来てる。
$ drush @stage ssh git fetch
$ drush @stage ssh git checkout develop
$ drush @stage config-import
@stage の部分はあらかじめ drushrc.php にて定義しておく。
####例)ステージング環境からローカル環境へサイト構成をマージする。
$ drush @dev config-merge @stage --git --message="#28941 bug fix."
##Featureモジュールとどちらがいいの?
- D7のワークフローに馴染みがある場合はFeatureモジュールを選ぶのは悪くない。
- CMIはすでに決められた単位の構成を受け入れるしかないが、Featureなら構成単位は自由に決められるところは利点。
- Featureモジュールも管理画面での操作だけでなくDrushコマンドにも対応しており、構成ごとに同期したり、すべての構成を一括同期することもできる。
- 一方のCMIはGitとの親和性が高く、Gitと連携したワークフローを組みやすいのがメリット。
- CMIまたはFeatureのどちらを選ぶかはプロジェクトメンバー間で決めれば良い。
##ブロックやコンテンツのデブロイはどうするか?
D7ではfeatureモジュールとuuidモジュールを連携させてブロックやコンテンツもファイル化できていたが、D8ではuuid機能がCoreに取り込まれたのでuuidモジュールは開発が停止したために、D8版featureモジュールとuuidモジュールは連携できなくなっている。
D8でコンテンツをデブロイを可能にするモジュール「Deploy」または「Default Content for D8」がalpha版で公開されているので期待したい。
Deploy
https://www.drupal.org/project/deploy
Default Content for D8
https://www.drupal.org/project/default_content
##とりあえずの対応策
現状ではデータベース上のコンテンツに該当するテーブルを持って行くのがいい!?
その場合はダンプしたテーブルをGit管理すれば、デブロイが少し楽になるはず。