Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CONFIGURATION MANAGEMENT WITH DRUPAL

223 views

Published on

Web版(最新):https://snize.github.io/demo-config-split/
Drupal Configuration Splitを利用しての構成管理について&デモ
2017/06/23 Drupal Meetup Tokyo #12 での発表資料
デモリポジトリ https://github.com/snize/demo-config-split

Published in: Software
  • Be the first to comment

  • Be the first to like this

CONFIGURATION MANAGEMENT WITH DRUPAL

  1. 1. CONFIGURATION MANAGEMENT WITH DRUPAL Tomotsugu Kaneko kaneko@zerobase.jp @snize
  2. 2. 本日の流れ 1. Configuration Managementとは 2. Drupalの良いところ 3. DrupalでのConfiguration Management 4. Demo
  3. 3. CONFIGURATION MANAGEMENTとは ソフトウェア構成管理 - Wikipedia ソフトウェア開発プロジェクトをその成果物を通して制御・管 理する方法論である。 ソースコードや文書などの成果物の変更履歴を管理し、製品の バージョンやリビジョンに個々の成果物のどのバージョンが対 応しているかを識別し、任意のバージョンの製品を再現可能と する。
  4. 4. [質問]CONFIGURATION MANAGEMENTしてますか? (。・ω・。)ノ ハイッ
  5. 5. なぜCONFIGURATION MANAGEMENT が重要か それは... この本に書いてあります!
  6. 6. ざっくり解説 の最初の条文の 「我々が最も価値を置くのは、価値のあるソフトウェアを早いうち から継続的にデリバリーすることを通じて顧客を満足させることで ある」 この継続的デリバリーを実現するためのソフトウェアデリバリーの 原則の中のひとつ「すべてバージョン管理にいれよ」 と、言っている 注:アジャイルの話はしません アジャイルマニフェスト
  7. 7. 要するに、 CONFIGURATION MANAGEMENTは 顧客に価値を提供する重要なパーツの ひとつ と理解しています
  8. 8. DRUPALで CONFIGURATION MANAGEMENT する理由
  9. 9. 複雑なフローをシンプルにする 複数人・複数拠点での環境再現 複数機能の平行開発 デプロイとロールバック いつでもリリース デプロイを自動化 誰でもデプロイ
  10. 10. DRUPALでCONFIGURATION MANAGEMENTしない場合 $ drush sql-dump --result-file=../20170618_add_jsonapi.sql
  11. 11. 増え続ける謎のSQLダンプ どれをインポートすれば良いのかわからない 順序があったりコンフリクトしてたり 結果として蘇る・消える設定 バグだと思ったら設定変わってただけ orz 設定のデプロイはどうする? ...手作業そして属人化
  12. 12. DBの同期での作業は コンテンツ側が日々更新されている場合や 平行開発では現実的ではない 手作業ではミスが起こる可能性が高い つらい
  13. 13. つらくない仕事をして よろこばれたい!
  14. 14. CONFIGURATION MANAGEMENT 成果物の変更履歴を管理し任意のバージョンの製品を 再現可能とする Drupalの様なOSSのCMSでの開発に持ち込めることが画期的 つらさを取り除き、本質的な作業に集中できる
  15. 15. DRUPALの良いところ3 つ
  16. 16. 1.コーディングレスで WEBサイトやAPIサーバが構築できる 自分のコードでバグや脆弱性が生まれにくい Drupalコアやモジュール自体の脆弱性などは別の話 コーディングレスをサポートするモジュールたち Views (core) Blocks (core) CKEditor (core) (contrib) (contrib) ... Paragraphs JSON API
  17. 17. 2.モジュール間の連携がしやすい 依存関係が明示的 車輪の再発明が少ない モノリシックになりにくい(もちろんそうでないものもある) なので モジュールのサブモジュールが多い 多くの人に再利用されるから品質が上がりやすい モジュールが豊富 コミュニティのコミュニケーションが活発(個人の感想)
  18. 18. 3.アプリケーションレベルでの CONFIGURATION MANAGEMENTが GITなどでできる インフラ系のConfiguration Managementではないです や など最近のウェブアプリケーションフレームワーク では 普通 Rails Laravel
  19. 19. DRUPALでの CONFIGURATION MANAGEMENT
  20. 20. DRUPAL 7 でのCONFIGURATION MANAGEMENT (contrib) (contrib) Features Strongarm
  21. 21. DRUPAL 8 でのCONFIGURATION MANAGEMENT (contrib) (core) (contrib) Features Configuration management Configuration Split
  22. 22. DRUPAL 8 CORE CONFIGURATION MANAGEMENT 基本的に サイト丸ごと import/export だけ 特定の環境のためだけのモジュールや設定の管理はできない 特定の環境のためだけのモジュール Syslog/Database Logging (core) Views UI (core) (contrib) (contrib) Devel Twig Xdebug
  23. 23. DRUPAL 8 CONFIGURATION SPLIT MODULE 環境ごとに分割 必要に応じて設定を読み込む 例えば、Local, Dev, Test, Prod 共通の設定はDefaultに格納
  24. 24. DEMO
  25. 25. CONFIGURATION SPLIT DEMO(時短VER.)
  26. 26. GITリポジトリについて コミットログにあるコマンドは各コミットに対応 タグは以降のプレゼンの見出しに対応 実際に手元で試すとUUIDが一致しない https://github.com/snize/demo-config-split
  27. 27. STEP 00 プロジェクトの準備
  28. 28. STEP_00A BLTプロジェクトの新規作成 $ composer clear-cache $ export COMPOSER_PROCESS_TIMEOUT=2000 $ composer create-project --no-interaction acquia/blt-project demo-config-split
  29. 29. STEP_00B BLTプロジェクトの設定変更 今回はデモのためにコミットメッセージの バリデーションを無効化 以下のコマンドで.git/hooks/commit-msgを削除 # blt/project.yml ... git: default_branch: master remotes: { } hooks: commit-msg: false ... $ blt setup:git-hooks
  30. 30. STEP_00C DRUPAL VMの初期化 VMの設定を変更するので、bootはしない 後からvagrant reload --provisionでもOK $ blt vm Drupal VM is not currently installed. Install it now? (y/n) y Do you want to boot Drupal VM? (y/n) n
  31. 31. STEP_00D VMの設定変更と起動 Tips:phpのメモリ上限を増やしておく # box/config.yml # Increasing the Memory Limit php_memory_limit: "512M"
  32. 32. 初回はVMのプロビジョニングが実行されるため、 このステップは20分程度時間がかかる(環境による) $ vagrant up
  33. 33. STEP_00E DRUPAL 8のインストール $ blt setup # Install dependencies, builds docroot, installs Drupal. # see ./vendor/acquia/blt/phing/tasks/setup.xml
  34. 34. STEP 01 初期設定のエクスポート
  35. 35. STEP_01A インストール直後の状態で 設定をエクスポート config/defaultへYAMLファイルが書き出される これはCore CMの標準機能で管理画面からも可能 $ drush @demo-config-split.local config-export -y
  36. 36. STEP 02 モジュールとライブラリの依存解決
  37. 37. STEP_02A COMPOSERでプロジェクトに追加 Configuration Split 以下はオプション jQueryライブラリの のDrupalモジュール Chosen Chosen
  38. 38. packagistに無いリポジトリのためにcomposer.jsonへ追記 今回の場合Chosenのライブラリをgithubから追加 ... "geerlingguy/drupal-vm": "~4.3" }, "repositories": [ { "type": "package", "package": { "name": "harvesthq/chosen", "version": "1.7.0", "type": "drupal-library", "dist": { "url": "https://github.com/harvesthq/chosen/releases/download/v1.7.0/chos "type": "zip" } } } ], "extra": { "enable-patching": true, ...
  39. 39. COMPOSERでパッケージを追加 $ composer require drupal/config_split drupal/chosen harvesthq/chosen
  40. 40. STEP 03 設定の保存先の準備
  41. 41. STEP_03A 環境ごとの設定を保存する準備 BLTにデフォルトで用意されているdefaultとciに加え、 localとprodを作成 $ mkdir ./config/local ./config/prod $ cp ./config/default/.htaccess ./config/local $ cp ./config/default/.htaccess ./config/prod
  42. 42. STEP 04 DRUPALへモジュールのインストール と設定のエクスポート
  43. 43. STEP_04A Drupalへモジュールのインストール 今モジュールをインストールした状態をエクスポート $ drush @demo-config-split.local en config_split chosen -y $ drush @demo-config-split.local config-export -y
  44. 44. DEMOはここから 手を動かします
  45. 45. STEP 05 CONFIG_SPLITからそれぞれの環境に 設定を追加
  46. 46. STEP_05A 管理画面へログイン drush @demo-config-split.local uli 1 admin/config
  47. 47. LOCAL,PRODの設定を追加 ポイント Activeのチェックを外す 再び設定をエクスポート 環境ごとの出力先の設定は完了 drush @demo-config-split.local config-export -y
  48. 48. STEP 06 SETTINGS.PHPの変更
  49. 49. STEP_06A SETTINGS.PHPへそれぞれの 環境用にフラグを設定
  50. 50. 通常は環境変数などを利用するのが良い。以下はデモ用 もしsettings.phpが編集できなかったらファイルの書き込み権限を 確認または以下を実行して権限を修正 // Set TRUE to make config active for specific environment. $config['config_split.config_split.local']['status'] = TRUE; $config['config_split.config_split.prod']['status'] = FALSE; $ blt setup:settings
  51. 51. STEP 07 ローカル用の構成管理
  52. 52. STEP_07A CONFIG_SPLITでブラックリストの設定 管理画面からlocal用にDevelとViews UIを ブラックリストとして追加
  53. 53. ブラックリストに追加した設定をエクスポート 先ほど設定した ../config/localへ設定が書き出され、共通設定の ../config/defaultから削除された drush @demo-config-split.local config-export -y
  54. 54. STEP 08 本番環境での設定
  55. 55. STEP_08A 設定を切り替えとインポート
  56. 56. 本番環境用に設定を切り替え(以下はデモ用) // Set TRUE to make config active for specific environment. $config['config_split.config_split.local']['status'] = FALSE; $config['config_split.config_split.prod']['status'] = TRUE;
  57. 57. 設定をインポート 設定が切り替わっているか確認 $ blt setup:config-import
  58. 58. STEP_08B 本番環境へモジュールのインストールと 構成のエクスポート
  59. 59. 本番環境へモジュールのインストール ban big_pipe dynamic_page_cache syslog インストールされたか確認 $ drush @demo-config-split.local en ban big_pipe dynamic_page_cache syslog -y
  60. 60. 本番環境のブラックリストへ登録 ban big_pipe dynamic_page_cache syslog syslog.settings
  61. 61. 構成のエクスポート $ drush @demo-config-split.local config-export -y
  62. 62. STEP 09 再びLOCALへ
  63. 63. STEP_09A SETTINGS.PHP // Set TRUE to make config active for specific environment. $config['config_split.config_split.local']['status'] = TRUE; $config['config_split.config_split.prod']['status'] = FALSE;
  64. 64. 設定をインポート 設定が切り替わっているか確認 $ blt setup:config-import
  65. 65. まとめ local, prod それぞれの設定 をエクスポートした 環境変数などを利用して、 任意の設定 をインポートした CoreのCMで扱えるもは管理可能 モジュール以外にも, Views, Taxonomy, Menuなど テキストや画像などは スコープ外 Slack, Twitterなどでフィードバックお待ちしてます!
  66. 66. おわり! Tomotsugu Kaneko kaneko@zerobase.jp @snize

×