本番で試さずに済むよう、手元に同じ環境を作った
公開しているサイトで試すと、壊れたときに表に出ます。手元で試せる状態を作った話です。

この記事の結論
- 公開中のサイトで試すと、壊れたときに人に見られる
- 手元に同じ構成を作れば、何度でも壊せる
- 準備に半日かかるが、以後ずっと効く
- 公開中のサイトで試すと、壊れたときに人に見られる
- 手元に同じ構成を作れば、何度でも壊せる
- 準備に半日かかるが、以後ずっと効く
公開しているサイトで直接試していたので、壊れるたびに焦っていた。手元に試す場所を作ってから、作業が落ち着いた。
本番で試す問題
公開中のサイトを直接触ると、こうなる。
- 壊れた状態が、訪問者に見える
- 焦るので、判断が雑になる
- 大胆な変更を試せない
3つ目が地味に効く。壊せないと思うと、確実に動く範囲でしか試せない。
手元に作るもの
本番と同じ構成を、パソコンの中に作った。
- 同じWordPressの版
- 同じテーマとプラグイン
- 記事のデータは、一部だけ写す
3つ目は全部でなくてよい。表示を確認できる程度に、数本あれば足りる。
準備にかかった時間
最初の構築に半日ほどかかった。
- 動かすための道具を入れる
- WordPressを入れる
- テーマとプラグインを揃える
- 記事を少し入れる
一度やれば、以後は使い回せる。壊れたら作り直せばよいので、心理的な負担も小さい。
どこまで同じにするか
完全に同じにしようとすると大変なので、線を引いた。
- テーマとプラグインは同じにする。表示に直結する
- PHPの版は合わせる。動かないことがある
- サーバーの設定までは揃えない
3つ目を諦めたことで、準備が現実的な時間に収まった。違いがあることを分かったうえで使う。
手元で確認できないこと
同じにしていないので、確認できないこともある。
- 表示の速度
- サーバーの設定に依存する動き
- キャッシュの挙動
3つ目は本番でしか確認できない。手元で動いたのに本番で変わらない原因は、たいていこれだ。
作るのを諦めた部分
完全な複製を目指すのをやめたことで、準備が進んだ。
- SSLの設定は再現しない。手元では不要
- メールの送信は動かない。試すときは別の方法で確認する
- アクセス解析は入れない。数字が混ざると困る
3つ目は最初に失敗した。手元の環境から解析に数字が送られ、本番の記録が汚れた。手元で動かすものは、外部と通信する設定を外すという方針にしてから、この種の混入が無くなった。
作業の流れ
いまは、この順で進めている。
- 手元で試す。何度でも壊す
- 動いたら、変更箇所を記録する
- 本番に、同じ変更だけを入れる
- 本番で確認する
2つ目を飛ばすと、何を変えたか分からなくなる。試行錯誤の過程で、余計な変更が混ざっていることがある。
記録の取り方
変更箇所は、こう控えている。
- どのファイルの、どこを変えたか
- 変更前と変更後の両方
- なぜ変えたか
3つ目を書くのは、後から見たときのためだ。自分で書いたコードでも、理由は忘れる。
本番に入れる順番
まとめて入れず、1つずつにしている。
- 1つ入れて、確認する
- 問題なければ、次を入れる
- 問題が出たら、その1つを戻す
手間に見えるが、壊れたときに原因が1つに絞られる。まとめて入れて壊れると、切り分けに時間がかかる。
手元の環境でできること
作ってから、想定していなかった使い方も出てきた。
- プラグインを入れる前に、影響を確かめる
- WordPressの更新を、先に試す
- テーマの大きな変更を、落ち着いて作れる
2つ目が特に効いた。更新で壊れることがあるので、手元で先に当ててから本番を更新するという順番にできる。以前は本番で更新して、壊れてから慌てていた。更新を先延ばしにする理由も無くなり、放置された古い版が減った。
控えは別に取る
手元に環境があっても、本番の控えは別に必要だ。
- ファイルの控え
- データベースの控え
- いつ取ったか分かる名前を付ける
手元の環境は試す場所であって、控えではない。データは本番と違う。
まとめ
- 本番で試すと、壊れた状態が訪問者に見える
- 手元に同じテーマとプラグインの環境を作る
- 記事のデータは、数本あれば足りる
- 速度とキャッシュの挙動は、手元では確認できない
- 本番には1つずつ入れる。まとめて入れない
関連記事
RELATED
コメントに何を書くかで、後から読むときの楽さが変わる
処理の内容を書いても役に立ちませんでした。書くべきことを整理します。
大きく作り替えるより、少しずつ変えるほうが速かった
一度に作り直して失敗しました。段階を踏む形に変えた話です。
読めないコードを書かせないために、頼み方を変えた
短く書かれると読めません。自分が読める範囲で書いてもらう話です。