m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

WordPressをカスタマイズする前にやっておくべきこと

この記事の対象読者

  • WordPressのカスタマイズに初めて取り組む人たち。
  • PHPはちょっといじった程度。(簡易掲示板くらいは作りました、的な。)

f:id:m6u:20180912121819p:plain
まぁ、勢いで、後先考えずにとりあえずやってみようってことで始める人が多いのですが、その先に待ち構えているのは「画面が真っ白になって何もできなくなった!」と思考停止して、エンジニア向けQ&Aサイトなどに駆け込むようなことになりがちです。
思考停止に陥る前にできることがいくつかあります。しかしそのためには、いろいろ準備が必要なので、慌てず騒がず自力で解決できる力を身につけてほしいと願うのです。

WordPressのカスタマイズ前にバックアップを取ろう

まずは、今ちゃんと動いている状態をいつでも復元できるように、バックアップをしっかりとっておくのが大事です。
「ちょっとコードを足すだけなんだから、すぐ戻せるのではないか?」と考える人もいますが、WordPressの本体自体もPHPで動作しており、そのWordPressにコードを足すのをしくじってしまうと途端に動作しなくなって「画面が真っ白になって何もできなくなった!」になるのです。WordPressそのものの動作に障害が生じると作業中だったファイルの編集画面にすら戻れなくなります。

関係するファイルのバックアップ

WordPressでバックアップを取る4つの方法(初心者向け)によると、「wp-content/themes」「wp-content/images」「wp-content/plugins」とデータベースという4つをバックアップを取りましょうと説明があります。
saruwakakun.com
でも、念には念を入れて、WordPressのインストール先をサブディレクトリも含めて全部FTPソフトなどでダウンロードしておくと安心感が増すと思います。一度もやったことがなければ、今すぐやっておきましょう。

(ファイルになっていない)データベースのバックアップ

PHPとは別の、データを処理する専門のプログラムがデータベースであり、WordPressにおいて一般にはMySQLや派生のMariaDBが使われるようです。WordPressインストール先とは別の場所に独自のデータ管理をしており、ファイルとしてデータをすぐに引き出したりはできません。通常、データベース管理ソフトが別にあって、データベース管理ソフトを通じてデータを出し入れしたりします。MySQLにおけるphpMyAdminです。
データベースに関しては、レンタルサーバーごとに操作が違うと思いますが、例えばサーバーのコントロールパネル上でデータベース管理画面に入れて、そこでデータのエクスポートができたりすると思います。
例えばさくらインターネットのさくらのレンタルサーバーでは、コントロールパネル上に「データベースの設定」というメニューがあり、「管理ツール ログイン」のリンクをクリックすることでphpMyAdminが利用できます。
f:id:m6u:20180912113452p:plain
phpMyAdminではエクスポートのメニューがあり、ExcelやCSVなどでもエクスポートできるようです。
f:id:m6u:20180912114823p:plain
テーブル単位のエクスポートがあれば調べやすそうです。
もちろん、後々プラグインの追加などで管理データ構造が増えたときにも、もう一度やっておくとよいです。

WebサーバーやPHPをデバッグしやすい設定に変更する

通常、実行するプログラムのエラーはWebブラウザー向けに表示しないものです。なぜなら、エラー情報からサーバーにいたずらしたりちょっかい出したりするきっかけになりがちだからです。
ですが、問題が置きて白い画面しか表示しなくなっても困ってしまうので、一時的にwebブラウザーにエラー情報を表示するように変更します。
PHPのエラー表示設定について - Qiitaに丁寧に説明がありますが、phpの設定「display_errors」「error_reporting」をデバッグしやすい設定に変更します。
例えば、さくらのレンタルサーバーでは、コントロールパネル内に「PHP設定の編集」という項目があり、webブラウザー上から簡単に設定できます。
f:id:m6u:20180912120128p:plain
こういう便利な機能がない場合には、webサーバーのドキュメントルートにあたるところに、「.htaccess」というファイル名で

php_flag display_errors on
php_value "error_reporting" "E_ALL"

という内容でアップロードします。
「.htaccess」ファイルの作り方がわからない場合には、次の手として、WordPressの現在使用しているテーマにおける、function.phpに細工を施します。WordPress のテーマメニューから探せるはずです。
function.php の「<?php」の行のすぐあとに、

ini_set('display_errors', "On");
ini_set('error_reporting', E_ALL);

を書き加えます。そうすると、そのテーマを使っている限りwebブラウザー上にエラー情報が表示されるようになります。
ここで書き加え方にミスがあると、「画面が真っ白になって何もできなくなった!」第一号になるかもしれません。
書き加えるときに注意するべき点としては、日本語入力モードをオフにして半角英数字の入力に切り替えておくことでしょうか。全角空白など日本語や漢字やひらがな・カタカナなどが紛れ込むと確実にエラーになります。

いきなりサーバーでいじらず、ローカルでテストしよう

そもそも論ですが、誰もまだ見ていないだろうと考えてインターネット上のレンタルサーバー上で気軽にWordPressのカスタマイズを始めてしまう人もいるようですが、大いに間違いです。レンタルサーバーに少なからず負担をかけます。
やはり、レンタルサーバーは本番環境として、その前に自分のパソコンの中にほぼ同じ状況を再現した上でテストしてから本番に移したほうが良いです。

【余談】エンジニア向けQ&Aサイトに駆け込む前に考えてほしい点

WordPressに関する質問を見ていると、たいてい「画面が真っ白になって何もできなくなった!」に遭遇してそこで思考停止してしまっています。
実に残念です。
そして、「自分のやっていることに間違いはないはずで思い当たるフシがない」かのような雰囲気を感じます。

Q&Aサイトへの投稿するかしないか、まずはそこを考えよう

質問として投稿する前に、考えていただきたい点がいくつかあります。

「問題解決を急ぎますか?」

→ 「画面が真っ白になって何もできなくなった!」状況は残念で腹立たしく、どうにか解消したいという気持ちも理解できますが、納期やリミットが決まっている仕事としての案件なのか、それとも個人の趣味で立ち上げようとしているだけで後回しできるような案件なのかをしっかり考えてほしいです。後回しにできるならQ&Aサイトへの投稿は待ってください

「対応するのに十分な時間を確保できますか?」

→ Q&Aサイト越しに対応してくれる人たちは現役エンジニアであり、仕事を抱えながら貴重な時間を割いて協力してくれているのです。回答してくれる人たちの消費リソース(時間や行動)を最小限にして無駄を省けるよう、回答者側からの質問があったらすぐにコメントを返せる状況でいてください。コメントを返しにくい多忙な状況であるならば、Q&Aサイトへの投稿は待ってください

「自分で問題解決に必要な情報を調べることができますか?」

→ 回答者の意見を踏まえて、最終的に手を下すのは自分自身です。何をどう変更して、どういう結果になって、問題解決したのかしないのか報告するところまで質問者としての責任です。情報が不足して適切な回答を寄せられない場合もあり、そのとき例えば「エラーログになんと出ていますか?」などと言われたときに迅速にエラーログの提出ができるとか、例えば「functions.phpの改変部分はどこですか」などと言われてすぐ該当箇所を提出できるとか、そういうキャッチボールができないならば、Q&Aサイトへの投稿は待ってください

面倒でも、まっさらな状態に戻して再インストールした方が早く解決する(こともある)

正直なところ、WordPress上に大したコンテンツもない状況で「画面が真っ白になって何もできなくなった!」に遭遇したら、バックアップから元に戻すのを最初にやってください。バックアップを取っていない場合には、WordPressのインストールからやり直してください。
壊れても構わないとか、納期やリミットまで時間に余裕があるなら、Q&Aサイトに頼らず自力で最初からやり直してください。データベースを削除する、インストール先WordPressをまるごと削除するなど。
または、(ネット越しでなくリアルに)駆けつけてくれて相談に乗ってくれる人を確保を優先して、(恥を忍んで)助けてもらいましょう。職場の同僚や先輩で忙しそうにしていても話を聞いてくれる人はいるはずです。
最初からやり直しても同じ場面で引っかかり問題が生じてしまい、自己解決が困難で頼れる人もいないなのであれば、そのときやっとエンジニア向けQ&Aサイトのお世話になるべきです。

Q&Aサイトに掲載するべき情報をまとめておこう

WordPressの動作に関わる情報を整理しておきます。(思いついたものを書き出しているので、不足などありましたらTwitterなどでご指摘ください。)
【必須】

  • WordPressのバージョン情報。
  • 使用中のテーマは既存のものか、ネットで入手したものか、それに手を加えたかどうか。
  • 使用中のプラグイン、一度でも組み込んだプラグインの情報。
  • PHPのバージョン情報。
  • データベース(MySQL/MariaDBなど)のバージョン情報。
  • 実行しているサーバーの情報(レンタルサーバー業者、プランやサーバーの種類)。
  • webブラウザー上に表示されたエラーメッセージ。
  • webサーバーが出力したエラーログ。

【場合によっては必要】

  • phpinfo() によって把握可能な情報。
  • phpに組み込まれているmbstring拡張の設定情報。

そして、問題が生じるに至った経緯もしっかりまとめておく必要があります。例えば、どこのファイルを変更したとか、どこの設定を変更したとか、順を追って説明できるようカスタマイズ作業中はやったことをメモしておいてください

PHPで書いたものをどうやってテストしていくか、デバッグしていくか(Windowsユーザーの場合)

概略

phpでプログラミングできるようになるために、ひたすらサンプルコードを書き写して動かすことなく覚えたつもりになっちゃう人や、プログラミングと関係ないとテスト環境構築を避ける人もいるんじゃないでしょうか。
コードを書いたら、実際に動かしてみて動作を確認するのが大事で、仕事で動作がおかしいコードを納品したら信用をなくしちゃいますから、ちゃんと動くことをテストする方法を知っておくことが大事です。
そんなわけで、テスト環境をどうやって構築するかって話を、さわりだけ紹介します。

Windows上で直接動かす系

まず、XAMPP

XAMPP Installers and Downloads for Apache Friends
f:id:m6u:20180803105856p:plain
昔も今も、Windows向けXAMPPはweb開発者には重宝されています。
これ一つで、webサーバープログラムApache httpd、リレーショナル・データベースMariaDB、FTPサーバープログラムFileZilla、サーバー側プログラミング言語PHPPerl、webからMariaDBを管理できるphpMyAdmin、サーバー側Java実行環境Apache Tomcatなどを含んでいて、好きなように組み合わせてwebシステム開発を立ち上げやすいパッケージです。 直接Windows上でそれらのプログラムを動かしてwebシステム開発を行います。
個別にダウンロードして組み合わせていく構築の仕方も楽しいのですが、こと環境構築にさほど興味がない人や、面倒事をなるべく避けたい人にはXAMPPはおすすめです。
構成している各プログラムが(セキュリティパッチなどが適用されてマイナー)バージョンアップされるごとにXAMPPもパッケージし直されて、主にPHPのバージョンに依存したリリースがなされています。 PHPプログラミングの習得目的であれば、公式サイトから最新版をダウンロードすれば問題ありませんし、既製のシステムのメンテナンス目的では過去のバージョンをさかのぼってダウンロードすればいいです。
各プログラムを個別にダウンロードすることなく立ち上げやすいというのが最大のメリットであり、テスト専用環境というわけではないことに注意が必要です。 構築するときにデバッグ向けにいくつか設定変更を加えるべきでしょう。
一つ注意しなければならないのは、XAMPPのWindows版は32bitのみになってます。 64bitにこだわる方は、PHPなど個別にダウンロードして組み合わせる必要が生じます。

XAMPPのApache+PHPにXDebugモジュールを組み合わせる

XDebugをApache+PHPな実行環境に組み合わせることで、対応するエディタや統合開発環境と連携してリモートデバッグができます。
要するに、一行ずつphpのコードを実行してみたり、変数の内容を確認しながら実行してみたり、処理の分岐先でブレークポイントを張って狙った箇所の動作を念入りにチェックできたりします。
XDebug公式サイトにある、Xdebug: Support — Tailored Installation Instructionsに対して、

<?php
phpinfo();

とだけ書いたファイルを、ドキュメントルート(例えば C:\xampp\htdocs フォルダ)に、例えば「phpinfo.php」などとしたファイルを作って、webブラウザから例えば「http://localhost/phpinfo.php」などとしてphp実行環境の情報を表示させて、そのページ内で右クリックメニューから「すべて選択」→「コピー」としてから、先程のページのテキスト入力枠に貼り付けて「Analyse my phpinfo() output」ボタンをクリックすると、具体的なXDebugモジュールのダウンロード方法と組み込み方が説明されます。

f:id:m6u:20191112185501p:plain
XDebugモジュールの組み込み方の指示の事例
たまたまウチの環境を解析させると、2.6.1のXDebugモジュールが組み込まれているけど、2.8.0を組み込むことができるとわかります。

MAMPというのもあります

MAMP & MAMP PRO
f:id:m6u:20180803111210p:plain
後発のMAMPは含んでいるパッケージがバリエーションに富んでいます。 元はmac向けですがWindows向けパッケージもあります。
例えばwebサーバーをApache, Nginxから選べたり、プログラミング言語もPHP, Python, Perl, Rubyから選べたりします。
MAMP Proというバージョンも有り、ProバージョンだとPHPでXdebugモジュールが使えます。 デバッグ強化するならProバージョンでしょうね。
(あまり詳しくないので、ボロが出る前に説明を打ち切ります。)

Windows上に仮想パソコンを立ち上げて行う方法

Windowsとは別な実行環境をソフトウェアやハードウェアの支援を受けてソフトウェア的に仮想マシンを構築して、まるでパソコンの中にパソコンが有るような手軽さで取り組むことができます。 下敷きになるWindowsをホストOS、仮想的に動作する環境をゲストOSと呼び、ゲストOSにはWindowsはもちろん、サーバーを動かすのに使われるLinuxディストリビューション(CentOS, Ubuntu, Debianその他いろいろ)を動作させることもできます。
狙いは、webシステム開発後に運用する場合を想定して、レンタルサーバー上にホスティングすると思うのですが、ほぼ同じ動作環境を仮想マシン上に構築できれば、本番環境にデプロイする際に改変する事項が最も少なく済むというメリットがあります。
オープンソースとしてはOracle VirtualBoxが有名で、商用ソフトウェアではVMware Workstation/Playerというのがあります。
仮想パソコンを立ち上げるのは面倒そうだなって思うかもしれませんが、まったくカラの状況から試行錯誤して構築するということをせずとも、誰かが既に作ってくれているものを流用してすばやく環境構築できる支援ソフトェアも最近は充実しています。

Vagrant

Vagrant by HashiCorp
f:id:m6u:20180803113827p:plain
Vagrantを使えば、好きな仮想環境で必要な構築をすばやく立ち上げられます。
構築に必要な事柄が定義されている「Vagrantfile」を用意して、コンソールからコマンドを叩くだけで自動的に環境構築が進みます。 (GUIなんてないっ。)
Vagrantを使った環境構築のやり方が「VagrantコマンドとVagrantfileの設定メモ - Qiita」にまとまってます。 ありがたいです。
動かす実行環境(の塊)をboxと呼び、vagrantコマンドでboxの追加や削除などを管理します。 boxに追加できる実行環境は「Discover Vagrant Boxes - Vagrant Cloud」で探すことができます。 例えば「cakephp」とタイプすると、CakePHP構築に向いている(と思われる)boxの一覧が表示されます。 ローカルにboxをダウンロードしてから「vagrant box add」コマンドに与えてもいいし、ダウンロード先URLを直接「vagrant box add」コマンドに加えてもよいです。
Laravelだと、Laravel Homestead 5.6 Laravelっていう公式boxファイルもあるので、これからLaravelにチャレンジする方はご検討を。
vagrant経由で立ち上げるvirtualboxで最初に躓くのはホストOSとゲストOSとのネットワーク接続周りかもしれない。 vagrantfileで定義してもいいし、virtualbox上であとから設定をいじってもいい(かも)。

VMware Wordstation / Player

仮想化ギョーカイを牽引するVMwareの、システム開発者向けの仮想化環境です。
Workstationがあれば、新規にゲストOSを立ち上げるだけにとどまらず、既存パソコンを仮想化することもできます。 vCenter Converterっていうソフトウェアと組み合わせますけどね。
無償で利用できるPlayerと、有償ソフトのPlayer Plusは新規にゲストOSを立ち上げる機能が制限されていて、LinuxディストロのDVDイメージファイルを元に立ち上げることはできちゃったりします。 メジャーどころのディストロはわかっちゃうらしく、構築がすばやくできるよう支援が加わるのも簡単です。
ちなみに、macos向けにはVMware Fusionってのがあります。 mac上でWindowsを動かすのにも使えますし、もちろんLinuxディストロを動かしてもいいです。

特殊な例:paizacloudを使ってオンライン開発

クラウド開発環境 PaizaCloudクラウドIDE - クラウドIDEでWeb開発!
f:id:m6u:20180803121709p:plain
小難しい環境構築作業をすっ飛ばして、いきなり開発に取り掛かることができて、ホスティングまでできちゃう(という触れ込みの)サービス。
環境構築に挫折してプログラミングになかなか入れない人でもこれならできる、かも。

特殊な例:3v4l

Online PHP editor | Run code in 200+ PHP & HHVM versions
f:id:m6u:20180803132117p:plain
phpのテストコードをwebブラウザ越しに実行できて、phpのいろんなバージョンでの実行結果もまとめて表示できちゃうだけでなく、サンプルコードを他人と共有できるpermalinkも生成してくれるというエンジニアの強い味方です。
ちゃんと文法に則ってコードをカラー表示してくれますし、カッコや引用符などタイプすると閉じカッコも自動でついたり、メモ帳でコードを書くよりもわかりやすく見通しやすいです。
できないこととして、他のサイトからデータを引っ張ってくること、データベースを使えないこと、require/include系が使えないこと、などなど。
使い方としては、いきなり実装用のコードを書くのに自信がない箇所を3v4lに書き出して動作を事前に確認してから組み込むとかでしょうか。