Bulblub

WP-CFMではじめるWordPress構成管理

February 19, 2019

Wordpressでのバージョン管理

この記事を書く前に少し調べましたが、「Wordpress バージョン管理」で検索した場合gitで本体や作成したテーマなどの管理について触れるものはありましたが、設定の管理についてはなかったように思います。

この記事ではもう一歩踏み込んだ内容について書きます。

WordPressのデプロイつらい

Wordpressと言うかDBを利用するCMSは同じ問題を抱えてますが、デプロイ時にはサイト一時更新停止とかデータベース同期・各環境での設定の調整など、そのサービス・プロジェクトが良くなる事と直接関係ない面倒な作業が待っていて、かつ正しくできて当たり前、さらに作業時間帯は寝静まってからだったりしますよね。これらは当たり前すぎて見えないコストになってます。

構成管理は決して銀の弾丸ではありませんが、それでもソフトウェア開発における重要なプラクティスのひとつです。

構成管理って何?

ソフトウェア構成管理 - Wikipedia ソフトウェア開発プロジェクトをその成果物を通して制御・管理する方法論である。ソースコードや文書などの成果物の変更履歴を管理し、製品のバージョンやリビジョンに個々の成果物のどのバージョンが対応しているかを識別し、任意のバージョンの製品を再現可能とする。

事らしいです。

インフラで言えば、Chef, Puppet, Ansible, Dockerとかサーバの構成を管理する、これは本当に当たり前になってきましたね。PHPフレームワークはそもそも全てコード(ですよね?)上記のインフラコードと合わせてリポジトリで管理してると思います。

また、Drupalは7時代からできます。Drupal 8からは本体(コア)で対応し始めていて、開発会社なら使ってる(はず)。現状かなりこなれて来ていて、僕自身も開発・ステージング・本番環境で利用していますが特に問題なく運用してます。

本題:WordPressでもできるよ!

他のCMSはどうなんだろう?と調べていたらWP-CFMと言うのを見つけたので、調査してみた。と言うのがこの記事のきっかけです。

Description

WP-CFM lets you copy database configuration to / from the filesystem. Easily deploy configuration changes without needing to copy the entire database. WP-CFM is similar to Drupal’s Features module.

とあるように、Drupal7時代に主流だったFeaturesモジュールに似ています。

こんなことで困ったりしませんか?

  • 稼働中のサイトへのデプロイ
  • 機能のロールバック

デプロイ出来ない!

こんなケースはどうでしょう?本番環境は日々更新されているとします。開発環境のコンテンツのデータは本番環境からコピーした最初の時点のまま、テンプレートの作成やプラグインの追加、設定変更などが行われます。

さて、いぜ本番環境へデプロイとなった時に問題があります。テンプレートや追加したプラグインはgitで管理されていますが、問題は設定です。本番環境では新しいコンテンツが追加されていますが、開発環境のコンテンツは古いまま。つまり、開発環境のDBで本番環境のDBを単純に上書きはできません。

WP-CFMではじめるWordPress構成管理

一般的な解決方法(?)

しばらく僕自身はWordPressでの開発を行っていないのですが、昔は以下のようなフローで行ってました。

WP-CFMではじめるWordPress構成管理

何が問題なのか?:ビジネス・プロジェクトとして

  • 本番環境のサービス・コンテンツ更新の停止(機会損失)
  • 人為的ミスによる障害発生(本番環境で再設定が必要)

何が問題なのか?:開発者として

  • デプロイ自体は何も生み出さない
  • 正しく出来て当然と思われてる

    • でも、結構大変
  • 夜間対応とかしんどい

なぜそうなるのか?

コンテンツと設定の両方がDB内あり一体化してるから。

構成管理しよう

WP-CFMで設定をDBからテキストベースのJSONファイルに取り出して、テンプレートやカスタムプラグイン同様にバージョン管理を行います。

そうすることによって、本番へのコードデプロイと同時にJSONに記述された設定を本番DBに復元することでコンテンツを上書きすることなく、またダウンタイムを最小化することが簡単にできます。

WP-CFMではじめるWordPress構成管理

つまり、ミスなく一瞬で完了するのでビジネス的にも開発者的にも嬉しいわけです。

WP-CFM デモ用リポジトリ

https://github.com/snize/wp-cfm_demo

今後の課題

とはいえ、デモでも触れていないサードパーティの設定を管理することに問題があります。現時点では、プラグインまで全て管理するには自分で実装する必要があります。ただ、希望はあって、これはいずれWP-CFMがスタンダードになって各プラグイン作者が対応したら解決するかもしれません。

モダンなWordPress開発の第一歩として

  • Composerで依存性管理
  • WP-CFMで構成管理
  • Dockerでローカル開発環境構築
  • 上記をGitなどでまとめてソースコード管理
  • DBは別途バックアップ
  • ファイル類はS3などで世代管理

今回の記事では触れていないけど、デモでは利用しているBedrock(直訳で岩盤!その名の通り安定感ある)は良かったです。WordPressの本体やプラグインを全てgitで管理するとか、見通し悪くなって生産性が下がりますもんね。

また、デモの開発環境は手を抜いてLANDOを利用しました。Docker Composeをラップしたもので、プリセットのレシピが用意されていて簡単に始められます。WordPressのレシピには最初からWP-CLIが入っていました。またどの設定が変更可能かも書いてあるので見てみてください。

まとめ

今回調査結果のアウトプットとしてWordPressの構成管理について調べてみました。まだお世辞にも使いやすいとは言い難いですが、そこはOSSなので利用者がコントリビュートすればいいですね。今後に期待したいです。

ちなみに本文中にも書きましたが、Drupalの方が断然、構成管理は利用しやすいのであわせてオススメしておきます。

過去の発表スライド

この記事のスライド版

Tags:

Tomotsugu Kaneko

Webのフロントエンドからバックエンド、プロトタイピングからプロダクションまで。定額の開発サービスも。詳しくはAboutページで。