テスト環境なしの開発はさすがにない
WordPressに移行したこのブログも大分システム・データが安定してきたので、そろそろフロントを調整していくフェーズに入ろうと思います。
ところでWordPressって「外観 > テーマ編集」から直接テーマのphpファイルエディットで来たりするんですが、さすがに怖いっすww
バグったら画面真っ白ですし、下手なセキュリティホール仕込んでしまうかもしれない。当然開発は別の環境でやって、テスト済みのモジュールを本番に反映するっていうのがソフトウェア工学上の基本セオリーです。
そのために自前のMacにもWordPressインストールして、開発環境作ってもいいんですが、それって古いっす!今どきFTPとか情けない。今日パソコンってのはシンクライアントであるべきです。明日このMacが壊れてWindowsに買い替えたとしても、すぐに開発が始められるのが理想です。
概念図
ということで、下記のような環境を作りました。
データ保全上は完璧ではありませんが、僕がミスっても大丈夫にするためなんで費用対効果からこんな感じにしました。
簡単な解説
Ephemeral DiskとPermenet Disk
Google Compute Engineでサーバを作ると標準で割り当てられるEphemeral Diskは揮発性が高いディスクで、インスタンスがダウンすると消えてしまいます。そこで、データなどは、データ保全性が高いPermanent Diskを追加しこちらに格納することがセオリーです。それぞれ
/
/mnt/pd0
にマウントし、Ephemeral Diskにnginx, hhvm, maria-dbなどのシステムを入れ、pd0にwordpressやmysqlのデータを配置しました。
あとの、細かい説明は割愛w
テーマの編集手順
新しいテーマを作成しようとした場合はこのようにする想定です。
まず、/mnt/pd0/themes/に新しいテーマディレクトリを作成します。おそらく元となるテーマがあるのでコピーして作成します。
$ cp -r twentytwelve susumuis-1
次に、/mnt/pd0/wp-content/themesにシンボリックリンクを作成します
$ ln -s /mnt/pd0/themes/susumuis-1 /mnt/pd0/wp-content/themes/testing
これで準備完了です。ちなみに、/mnt/pd0/wp-content/themes/には実際にテーマディレクトリは配置せず、必ず/mnt/pd0/themes/に実ファイルがあり、/mnt/pd0/wp-content/themes/は常に次のシンボリックリンクを配置します。
production
testing
あとは、productionやtestingの向き先を変えることで、現在のバージョンのテーマを切り替えていくこととします。
テスト環境へのアクセス
標準状態のWordPressでは、テーマは一度に一つしか選択できないので、このままでは本番をproductionにしつつ、testingテーマへアクセスすることができません。
そこで、不本意ですが、プラグインの力を借ります。
というプラグインを使います。このプラグインをインストールすれば、ログイン中の管理者だけ、あるいはURLに?theme=xxx
(xxxはテーマ名)を付与したときだけ、別のテーマで表示することができます。
ここで、theme=xxx
という指定はプラグインのオリジナルのままでは、一般ユーザーも指定できてしまいます。これでは、開発中の画面を一般ユーザーに晒してしまい、運悪くバグがあると、データを壊すなどの危険があります。
そこで、プラグインを一箇所書き換えました。
theme-test-drive/themedrive.php
@@ -192,6 +192,9 @@
function themedrive_determine_theme()
{
+ if (!current_user_can(themedrive_get_level())) {
+ return false;
+ }
if (!isset($_GET['theme'])) {
if (!current_user_can(themedrive_get_level())) {
// not admin
(patchコマンドでパッチできるかはテストしていません)
これで、管理者としてログイン中の時だけ、testingのテーマを試すことができ、一般ユーザーは?theme=xxxと指定しても、テーマを変更することができなくなりました。
テーマの編集をバージョン管理
cd susumuis-1
git init
git add .
git commit -m 'first commit'
これでとりあえず、バージョン管理できるようにしました。間違えてしまった時はresetで戻ることができます。ある程度できたらcommitしてテストをすることで、「あれ、さっきまではできてたのに」というのを防ぐことができます。必要に応じてリモートリポジトリを作成したりブランチを切ったりしていきたいと思います。
公開
テーマが完成して本番に公開するときはシンボリックリンクを貼り直すだけです。