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

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

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に書き出して動作を事前に確認してから組み込むとかでしょうか。