ローカルマシンの開発サーバとしてPHPビルトインサーバを使う

ローカルマシンに開発用のサーバを構築する際、MacであればMAMP、WindowsであればXAMPPを、最近はVagrantを採用することが多いと思います。今回も、Vagrantを採用しようと思っていろいろ試したのですが、最終的にWindowsで安定した環境を共有することが難しいと判断し、やめました。 (MacだけであればVagrantがいいなと思ってます)

ここでのローカルサーバはあくまでも簡易的なもの。求められる条件は次です。

  • ホストOSはWindows
  • ローカルサーバは、ほぼフロントエンドの開発・確認用で、システムのメイン開発は行わない(システムの開発はLinux環境で行う)
  • ブラウザでhttp:参照ができること。また他者とそれを共有できること

これだけでよければ、XAMPPは所帯が大きすぎるしVagrantはハイエンド過ぎて管理がしんどいということで、PHPのビルトインサーバを使うことにしました。

PHPマニュアル>PHPビルトインサーバ

PHPのインストールは通常のパッケージインストールと変わりませんが、PHPの操作、ここではビルトインサーバの起動や終了はすべて「黒い画面」(コマンドプロンプト)で行います。今後はちょいちょい黒い画面を触ることになるので「腰がひけるわ~」と言ってないで慣れましょう。 無骨ですが硬派でなかなかイイヤツです。

導入手順の説明の前に、ローカル開発環境のディレクトリ構造について共有します。

ローカル開発環境のディレクトリ構造

各自バラバラでも問題ないですが、話を共有しやすいよう、ローカルルールとして下記のとおり構造を統一することにします。

C:/var (ローカル開発に必要なファイルの格納庫として新規作成)
  ┗ /php (PHPのインストールディレクトリ)
  ┗ /setting
  ┗ /www (開発領域)
    ┗ /www.sample.com (プロジェクト用ディレクトリ)
      ┗ /src (ドキュメントルート・Gitローカルリポジトリ)

WindowsにPHPをインストールする

WindowsにPHPを入れます。「え。WindowsにPHP入るの?動くの?」と思うかもしれませんが、Windows用のPHPが存在するのです。 まずは下記URLに行ってインストールパッケージをダウンロードします。

インストールパッケージのダウンロード: PHP for Windows

適したパッケージのzipファイルをダウンロードします。 今回は、PHP5.6のVC11 x64 Thread Safeのzipを選びました(2015-8-16時点)

Windows用PHPのダウンロード

ダウンロードしたファイルを、PHPのインストール先ディレクトリ(C:varphp)に解凍。 これでインストールは完了。ただしこれだけでは起動しないので、設定を行います。

PHPの設定(php.iniの編集)

インストールディレクトリ内にある「php.ini-development」ファイルをコピーし、「php.ini」というファイル名で同じところに保存。「php.ini」の次の箇所を変更。(バージョンによって行番号が異なるため、下記は参考まで)

1:736行目のコメントアウト(先頭の;)を削除して、拡張ディレクトリを有効にする。

; On windows:
extension_dir = "ext"

2:888行目のコメントアウトを削除して、mbstringを有効にする。

extension=php_mbstring.dll

3:926行目のコメントアウトを削除してタイムゾーンを指定する。

date.timezone = "Asia/Tokyo"

※上はあくまでも最低限の指定なので、必要に応じて適宜設定変更してください。

環境変数にパスを登録する

Windowsのコマンドライン(コマンドプロンプト)からPHPを操作するためには、Windowsのシステム環境変数にPHP実行ファイルへのパスを登録する必要があります。(これを「パスを通す」と言う。)

パスの通し方については次が詳しいです。 PHP入門>PHPの設定と動作確認 – Windows編
※パスは自身の環境に合わせて変更。(例:C:varphp)

パスを登録し終えたら、確認します。コマンドプロンプトを起動し、次のコマンドを実行。

> php -v

バージョン情報が返って来たら無事設定完了。コマンドプロンプトからPHPの操作ができるようになりました。 (これらは初回に設定すれば良く、次回からは不要です。)

「MSVCR110.dllがないため、プログラムが開始できません」というエラーが表示された場合の対処方法:参考サイト)
「MSVCR110.dllがないため、プログラムが開始できません」と表示された場合
※64bit OSの場合も「VSU4vcredist_x86.exe」をインストールすること(PHPは32bit用のライブラリを一部必要とするため)

ビルトインサーバの起動と終了

PHPの設定ができたので、これからはいつでも簡易サーバを起動できます。

このビルトインサーバの素敵なところは好きなディレクトリをドキュメントルートにしてサーバを起動できることです。起動の基本操作は次のとおり。

  1. コマンドプロンプトを起動
  2. コマンド上でサーバを立ち上げたいプロジェクトのディレクトリに移動cd
  3. サーバを起動するコマンドを実行php -S <ホスト名>:<ポート番号>

実際のコマンドラインはこんな風です。

>cd C:varwwwwww.sample.comsrc  ←サーバを立ち上げたい場所に移動
>php -S localhost:8000  ←サーバを起動

実行後、ブラウザでhttp://localhost:8000にアクセス。指定したプロジェクトのトップページが表示されていれば無事サーバ起動完了。 なんともお手軽です。

他者とURLを共有するためにIPアドレスを指定する

上の例のようにlocalhostを指定するとURLはhttp://localhost:8000となります。 これだと、ちょっと席が離れた人に状況をみてほしいな、という時に共有できないので、IPアドレスを指定して自分専用のURLにします。(IPアドレス部分はそれぞれのローカルIPに読み替え)

>php -S 192.168.11.35:8000

これで、参照URLがhttp://192.168.11.35:8000になり、隣の人にskypeとかでURLを投げることができます。

サーバを終了する

コマンドプロンプトにウインドウのフォーカスを当てた状態でCtrl+Cするとサーバが停止・終了します。なんともお手軽。

バッチファイルを作って起動を効率化

これでもお手軽ではあるのですが、サーバを起動するたびにコマンドプロンプトを操作しないといけないのがやっぱり面倒。 なので、バッチファイルを作ってダブルクリックでサーバが起動するようにします。

次を記述したテキストファイルを「server.bat」として各プロジェクトのドキュメントルート直下に設置します。(IPアドレスは自身のものに変更)
※一番上の::で始まる行はコメントなのでなくてもOK

:: server.bat
pushd %~dp0
php -S 192.168.11.35:8000
popd

状態としては次のようなイメージ。ファイルの中身はプロジェクトに依存しないので、作業するプロジェクトすべてに設置しておけばいいでしょう。

C:/var
  ┗ /www
    ┗ /www.sample.com
      ┗ /src
        ┗ server.bat
        ┗ index.php
    ┗ /www.sample2.com
      ┗ /src
        ┗ server.bat
        ┗ index.html

これで、作業するプロジェクトの「server.bat」をダブルクリックするだけでサーバを起動することができます。素敵。

ビルトインサーバの注意点

便利なビルトインサーバですが、作業上および仕様上の注意点があります。

  1. 複数同時に起動できない。1回で起動できるサーバは1つ。プロジェクトAの作業が終わりBの作業を開始する際は、必ずAのサーバを終了してからでないとBで起動できない点が注意です。
  2. .htaccessが使えない。当然Apacheが入っているわけではないので、Webサーバの設定ファイルは無効。PHPで一部機能が代用できる「ルータースクリプト」と言われる機能がありますが、すべてに対応はできないのでここは注意。ちょっと不便なので、なんらか対応方法を考えないとなーと思っています。
2019年5月28日:訂正
「注意点」として「複数同時に起動できない」と記載していましたが、これは誤りです。
ポート番号(例では:8000の部分)を変更することで複数同時に起動することができます。
匿名でご指摘をいただきました方、ありがとうございました。

まとめ

PHPビルトインサーバであれば、共有にあたって気にしておくのはPHPのバージョンとphp.iniの設定内容くらいなので、まずはこの環境でしばらく実践しようと思います。 ただ、.htaccessの問題や、バーチャルホストが設定できない点は、今後問題になってくるかも。引き続き検討していきたいと思います。