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

PHPの開発環境をゆるっとまとめる

主旨

teratailっていうエンジニア同士の助け合いサイトでPHPの質問をウォッチしています。
質問を見ていて思うのは、ちゃんとした開発環境を構築できさえすれば、こんなつまらない質問を起こさなくて済むんじゃないかなっていう、素朴な疑問です。
例えば、全角空白を記入しているのに気づかず文法エラーなどを起こしているとか。
例えば、変数名のタイプミスでデータの引き回しに失敗しているとか。
その手のしょーもない質問を起こさなくても自己解決するためには、開発支援が充実している統合開発環境(IDE: Integrated Development Environment)の導入が大事なんじゃないかと思えてくるのです。
なので、ネットで見聞きしている開発環境を、さっくり簡単にまとめておこうかと思います。

メジャーどころ3種

PhpStorm

PhpStorm: Lightning-Smart IDE for PHP Programming by JetBrains
f:id:m6u:20180801164537p:plain
JetBrains って会社が作っている開発環境が PhpStorm というもので、執筆当時本来年間89.0USD今なら年間44.5USDでフル機能を使うことができますし、Java開発のIntelliJ IDEAというのも超有名です。
日本の代理店はサムライズムさんがやっておられて、英語のページで購入手続きせずとも日本語で対応していただけます。

PhpStormの強力なエディタはコード補完、リファクタリング、コード分析、ナビゲーション、デバッガ、ユニットテストなど豊富な機能を備えています。またSQLや様々なバージョン管理システムと連携できるだけでなく、HTML、CSS、JavaScript、XMLなどの編集において優れたユーザーエクスペリエンスをもたらすプロ用のPHP IDEです。

NetBeans IDE

NetBeans NetBeans 日本語サイト
f:id:m6u:20180801202333p:plain
オープンソースの統合開発環境 (IDE) として有名。 JavaもPHPもwebページもこいつ一つで開発できる。 Javaで開発されている。
NetBeans IDE - PHP開発の面では、有名所のPHPフレームワークもサポートしており、XDebugを使用したリモートデバッグも可能。

Eclipse

Enabling Open Innovation & Collaboration | The Eclipse Foundation
f:id:m6u:20180801203449p:plain
Pleiades - 日本語化プラグイン Eclipse, IntelliJ, PhpStorm...
f:id:m6u:20180801203713p:plain
Pleiadesにもお世話になりました。 NetBeansよりも先にある、こちらもオープンソースの統合開発環境 (IDE)。 JavaもC++もPHPもPythonもいける開発環境。
PHP開発面では、Windows向けにはXAMPPというweb開発に必要なもの(webサーバapache httpdやデータベースmysqlなど)が一通りパッケージ化されたものも含んでいて、これ一本ですぐに始められる(ってほど生易しいものではないけどね)のも特徴。 もちろんXDebugを使用したリモートデバッグも可能。 PHPフレームワークへの対応もできる。

この中では、なんとなくNetBeans IDEを使ってきたかもだ

PhpStormが有償のソフトなので体験すらしてない。 なので、NetBeans v.s. Eclipseってなっちゃう。 どっちも使った。 ほんの少しの差だけどNetBeansの方が反応が良かった気がして、仕事パソコンにはNetBeansを入れている。 FuelPHPを組むときはNetBeansでやってる。
Pleiadesで配布している「全部入り日本語化Eclipse」はとっつきやすそうだけど、あまりにあれこれ入りすぎていて、含まれるソフトのどれかをバージョンアップするときに困りそう。 そうそうソフトウェアを入れ換えるなんてことはしないと思うけど、開発環境を立ち上げましょう的な記事でPleiades推ししてるのをあまり観たことがないのもあり。 PHP開発しましょ、っていう前に先にWebサーバーをローカルで立てましょうってのがあって、phpのコードを書き出すときにエディタや開発環境のことに触れている記事が少ない気がするし。
どちらも、プラグインなどが更新されると自動で探してきてインストールする流れになるので扱いやすいのだけど、XAMPPのことまでは面倒見ないのでそっちはそっちで別途管理するなら含まなくていいじゃんって気もする。 なのでXAMPPを先に立ち上げておく(もしくは別途apache httpdとphpを集めてきて自分で組み込むとか)方がいい気がする。

プログラミング向きなエディタ各種

Atom

Atom
f:id:m6u:20180801205536p:plain
オープンソースでカスタマイズ次第でいろいろ化けるエディタ。 使ってないからよくわからない。
PHPプログラマーのためのAtomパッケージ5選 | IT CARETのようにphp開発に特化したパッケージを追加していけば、Javaで開発されたIDEらよりも小気味よく使えるかもしれない。
atomでPHPのデバッグ - QiitaのようにAtomからリモートデバッグもできちゃう。

Brackets

Brackets - Web デザインを認識する最新のオープンソースコードエディター
f:id:m6u:20180801210053p:plain
こちらも方向性としてAtomと似てるかも。 使ってないからよくわからない。
Brackets おすすめエクステンション集・解説 - Qiitaによると、PHP開発向けエクステンションもいくつかある模様。
BracketsでPHPデバッグがサクサク捗る!PHP debuggerの設定方法 | Arrownによるとリモートデバッグもできちゃう。

Sublime Text

Sublime Text - A sophisticated text editor for code, markup and prose
f:id:m6u:20180801210454p:plain
PythonベースのプラグインAPIを備えたエディタ。 使ってないからよくわからない。
PHPerが使うSublime Text 3のパッケージ | Go-NextブログのようにPHP開発向けパッケージもあります。
【SublimeText3】Apache+PHP+Xdebugでデバッグ - Qiitaのようにリモートデバッグもできちゃう。

何を使ってもいいんだけどね

文法に沿ったカラー表示をしてくれるかどうか、文法エラーを検出して指摘してくれるかどうか、一度も使用していない変数名を指摘してくれるかどうか、今入力しようとしているコードを類推して提案してくれるかどうか、コードをステップ実行できるかどうか、みたいなところを担保している開発環境を作らないと、いつまで経っても初心者の域から出られないと思うんだよね。
つまらないミスは往々にして発生しがちで、睡眠不足など体調不良があったり、あるいは何かの片手間に取り組んでいたりすると注意力不足集中力不足でミスを発見できずにドハマリしてしまいかねない。
そういうときに直すべきところを指摘してくれる開発環境は非常にありがたい存在で頼れる存在になる。
いちいち teratail とかでこっ恥ずかしい質問を起こさなくて済むし。 こっ恥ずかしい質問は周りにも迷惑をかけるということを意識してほしいと思うわけで、他人を巻き込んでつまらないミスで振り回すと時間がもったいない。 ここまでやった、やりきった、けどわからない、助けてほしいっていうのであれば、話だけでも聞くよと。

その他

XDebugって何?って人は、phpコードをステップ実行して変数の中身を確認しながらデバッグするために昔から重宝されているものなので、テスト環境で使えるように設定変更を最優先でやっとくよいいよ。 参考記事:PHP開発者がいまさら聞けない、Xdebugの基礎の基礎 - WPJ
phpの文法チェックができるwebサービスが「PHPコードの構文チェック」にありますけど、開発環境で一発でできるようにしておいたほうが良いですよ。
phpをコマンドラインから使えるようであれば、「php -l ~~~.php」(小文字のエル)とすることで文法チェックができるよね。詳しくは:「PHP: オプション - Manual