現状のwordpressデプロイの問題提起
wordpressのデプロイにはwordmoveや以前に自分が紹介していたwp-deploy、他にもbash-wp-deployなどがありますが、どれもwordpressのコアファイルも全て取り扱うのを主軸に考えて使われているツールになります。
(紹介時の記事はこちら WordPressのデプロイをwp-deployで設定する - Qiita)
ですが、実際にwordpressでの開発をするときにはテーマファイルのみを編集する事が推奨されています。テーマファイル以外の編集をしてしまうとwordpressのバージョンアップが出来なくなるため、通常であればテーマファイルのみの編集で開発をしていきます。
前述の通りのデプロイツール群のようにwordpressのコアファイルを取り扱ったり、コアを丸ごとバージョン管理をしたい気持ちも分からないでも無いですが、そのままだとwordpressが持っている自動アップデート機能を本番環境で実行してしまうと手元のバージョンとの不一致が出て自動更新が出来なくなります。本来持っている自動アップデート機能を存分に発揮させるためにはテーマ単体でのバージョン管理を行い、テーマ単体でのデプロイが本来必要な機能なのかなと考えます。もっとカジュアルに開発していきたいですしね。
提案
テーマファイルのデプロイだとテーマの更新機能が既にあるので、それを公式のwordpressテーマに載っていないもの=野良テーマ(開発を行うテーマ)でも更新機能の恩恵が受けられないかと調べてみると、案外簡単にできるようだったので、この設定をgithubのリポジトリから更新検知されるように設定しました。テーマの更新を検知してしまえばAdvanced Automatic Updatesのプラグインなんかを使えば自動アップデートを行うことも簡単かと思います。
それと、テーマとコアを分離することが出来れば、テーマのテストをバージョン毎で実行する事が簡単に出来るようになるので、自動アップデートをしたくなく、手動でアップデートをする際にもあらかじめテスト実行で問題が無いかが確認出来るのでメリットがあるかなと思います。
以下、設定方法。
設定方法
- ライブラリの設置
- jsonファイルの設置
- functions.phpにコードを記述
Automatic Updates For Private And Commercial Themes | W-Shadow.com
の「Client library」からphpファイルのダウンロード、テーマディレクトリに設置
jsonファイルupdate-info.json
の設置
{
"version" : "1.0",
"details_url" : "https://github.com/soramugi/react-wp-sample",
"download_url" : "https://github.com/soramugi/react-wp-sample/archive/master.zip"
}
functions.phpに以下を記述
<?php
require 'theme-update-checker.php';
$example_update_checker = new ThemeUpdateChecker(
'react-sample',
'https://raw.githubusercontent.com/soramugi/react-wp-sample/master/update-info.json'
);
この状態でコミット、で実際のコミットログは以下
https://github.com/soramugi/react-wp-sample/commit/cda3bbb508041de89671ba4e0b91201b108fdd40
このテーマリポジトリをzipでダウンロード、wordpressにテーマインストール、jsonファイルのバージョンアップデートしてコミット&プッシュ
https://github.com/soramugi/react-wp-sample/commit/767960a81d9aac390f744793e236a28ecc1be4da
で画面のように更新検知が出来ました
あとは前述の通り、Advanced Automatic Updates等の設定を行えば自動アップロードが可能かと思います。
この方法だとパブリックなgithubの環境に置いておくものだと、jsonファイルの情報やテーマファイルが閲覧出来ているので簡単に設定できるのですが、ソースコードを公開したくないテーマの開発を行う際にはjsonファイルやテーマのzipファイルを非公開環境に設置して、wordpressでのサーバーからのみ閲覧可能にしておく対応が必要になります。