Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

Configration Management in Drupal8(勉強会用)

Last updated at Posted at 2017-01-22
1 / 16

#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
スクリーンショット 2017-01-21 18.44.19.png


#Configration Management 管理画面

同期・・・YAMLファイルとDBに保存されているサイト構成の差分を確認して、差分インポートを行う。
インポート・・・全体のサイト構成、または個別にサイト構成をインポート可能。
エクスポート・・・全体のサイト構成、または個別にサイト構成をエクスポート可能。

スクリーンショット 2017-01-21 20.40.20.png


#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ワークフローをサポートしてくれるサブモジュール群です。


##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管理すれば、デブロイが少し楽になるはず。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?