純規の暇人趣味ブログ

首を突っ込んで足を洗う

WindowsにPHP開発環境をよりシンプルに構築する(XAMPPなし)

      2018/01/12    HimaJyun

「PHPの開発環境を構築するよ!」とか謳っている記事でXAMPP入れてApacheが……MySQLが……みたいなのが多くてもどかしいので書きます。

開発環境だったらもっとシンプル(簡単とは言っていない)に構築出来ると思います。(Windowsユーザーを想定していますが、考え方自体は*nixでも通用すると思います)

ちなみに私は凄いエンジニアとかではないのでご了承を。最近は専らJavaとかC#ばかり書いてる人です。

あと、「XAMPP」表現が一般的なので「XAMPP」と書きますけど、想定しているのは「XAMP」までです。(つまりPerlはこの記事では取り扱わない)

きょうびPerl CGIなんて使わねーしPerlで書くくらいならPHPで書いた方がマシだし、PHPで書くくらいならJavaかGoで書くわ

よりシンプルにPHPをインストール

XAMPPなんて使わずに公式からDLしてきたバイナリ(Windows用zip)をPATH通して終わりです。

それだけでphpが動くようになります。

はいちゃんちゃん。で、理解してもらえるほど会話が楽だったら世の中に争いなんてない。

PHPを使えるようにするまで

(バイナリ版が提供されるWindows大前提で書きますけど、自分でコンパイルするなりしてバイナリが用意出来れば他のOSでも同じ)

まずはPHPの公式ダウンロードページから使いたいバージョンのPHPを取得(WindowsならWindows用ダウンロードページからzipを取得)

「Thread Safe」と「Non Thread Safe」はどっちでも良い(開発環境にApacheを入れるつもりならThread Safeで)

zipを展開するとphp.exeが出て来るはずなので、それがコマンドで実行できるようにPATHを通す。

(「PATHを通す」の意味が分からない人は先にそっちを理解してきてね)

PATHを通したいけどPATHを通したくない

ナニイッテンダコイツ

つまり、PATHを通したいんだけど、PHPのためだけに環境変数に値を追加したくない。という事ですね。

良く分かりますよその気持ち、良い酒が飲めそうですね。(私お酒飲めませんけど)

そんなあなたは「%USERPROFILE%\bin(*nixでいう$HOME/bin)」にPATHを通しましょう。

そうしておけば「C:\Users\(ユーザー名)\bin」に追加したコマンドがそのまま実行できて便利!

で、肝心のPHPはどうするのかというと、単にフルパスでPHPを呼び出すラッパースクリプトを用意すれば良いだけ。

@echo off
"(PHPを展開したフォルダ)\php.exe" %*

みたいな内容のバッチファイルを用意して入れればいい。

捗るのでおススメだよ。

複数バージョンの共存

この方法でインストールすると複数のバージョンのPHPを並行して利用する事が可能です。

例えばphpで最新版のPHP/php7.1で7.1系の最新版が呼び出される……みたいにするのは簡単です。(流石に*envみたいにコマンドで入れ替えるのは無理だけど)

phpで最新のphpを呼び出すシェル(バッチ)を、php7.1でphp7.1を呼び出すシェルをPATHに通せばいいわけですから。

(この方法で最新版PHPと、サーバーで利用しているのと同じバージョンのPHPを共存させています)

設定の共通化

問題は共存する複数バージョンのphp.iniを共通化する事です。

これはPHP側の機能で可能。

PHPは「PHP_INI_SCAN_DIR」で指定したディレクトリにあるiniを自動でロードしてくれます。

環境変数(ラッパーならそのラッパー内で設定したので良い)に共通のiniを保存しているディレクトリを指定。

(「set PHP_INI_SCAN_DIR=C:\php\conf.d」みたいにする)

後はそのini側で共通の設定をすれば良い。

まとめると?

私はこんな感じにしている。

  • PATHには「%USERPROFILE%\bin」を追加
  • 「(任意の場所)\php\(バージョン)\php.exe」にPHPを解凍
  • 「(任意の場所)\php\conf.d\php.ini」に共通の設定を記載
  • 「%USERPROFILE%\bin」にPHPを呼び出すラッパー(php.bat)を作成

実際のphp.batはこんな感じ

@echo off

set php=C:\(省略)\php\7.2.0-nts
set PHP_INI_SCAN_DIR=C:\(省略)\php\conf.d
"%php%\php.exe" %*

一見すると遠回りでかえってめんどくさそうだけど、やってもらえれば分かる。XAMPPなんかよりずっとシンプルだから。

これはどうするの?

「XAMPP要らねぇ!」と唱えると「じゃあアレどうするんだよ!」的なのが来そうなので書いておきます。

Apacheないと確認できなくね?

PHPにはテスト用のビルトインウェブサーバーがある。

PHP本体に組み込まれているので追加インストールは不要。

普通はこれで事足りるし、事足りない=Webサーバーの力を借りなければならない=Webサーバーの機能に依存したプログラムを書いている。だと考えた方が良い。

「Webサーバーの機能に依存する」という事はすなわち「特定のWebサーバーでしか正しく動かない」という事(延いては他のWebサーバーに乗り換えたい時に困るという事)

Webサーバーの機能に依存する物(例えばX-Sendfileとか)はオプションであるべき(なくても動くべき)、であって、必須であってはいけないと思う。

とはいえ、所詮は私の考え方の一つでしかないわけで、必要だと思うならApacheだけ別途インストールすれば良い。

MySQL(MariaDB)は?

これもApacheと同じ「依存するな」話になっちゃうんだけど。

データベースを使う時はmysqliではなくPDOを使うべきだと考えている。

一度mysqliで書いてしまうと、それは「MySQL専用のプログラム」になってしまう。すなわち書いたプログラムをMySQLのために捧げるという事。

PDOを使って、SQLiteで開発すればMySQLなんて要らない。必要な時だけMySQLを使ってテストすれば良い。

とはいえ、現実的な話をするとデータベースは構文の違いからコード側で複数の製品に対応しなきゃならない(Webサーバーのように設定でどうこう出来ない)事もある

(一応標準規格はあるので、それだけを使うように努めるとそんな手間は不要なのだが)

なのでMySQLの機能/構文に依存するのは構わないと思う(依存しても「良い」という意味ではなく「問題はない」くらいのニュアンス)、特定のWebサーバーに依存する事よりはマシ。

言っておきたいのは「MySQLに依存するのは構わないがPDOを使え」という事。そうすればどこかの物好きがPostgreSQLやSQLiteに対応させるパッチを送ってくれるかも知れないし、何かの拍子にMySQLが嫌いになっても乗り換えが比較的簡単。

(逆に考えて欲しい。何かの素晴らしいソフトウェアがPostgreSQL専用だったとして、MySQL対応パッチを書きたいと思った。コードの至る所にpg_なんて名前で始まるメソッドが散りばめられてたらうんざりしちゃうでしょう?)

何はともあれ、MySQLが必要だと思うなら別途インストールすればいい。仮想環境にインストールしたMySQLを使う方が開発環境を汚さないかもね。

XAMPP要らなくない?

インストールを謳った記事なのに「依存が~」の方が長いね、すまない。

「別途インストールすれば良い」をやたら連呼したので分かると思いますが、「XAMPP」という一つのソフトで複数のソフトがバージョン固定で入るのが個人的に好ましくない。

例えば、「普段はPHP7で開発するけど、訳あってPHP5が必要」となった時にPHP5のXAMPPを入れるの?となる。

好きな時に好きなバージョンを使えないのは嫌な話で、現時点(2017/12/21)で最新のPHPは7.2.0ですが、XAMPPの最新版はPHP 7.1.12です。

XAMPPでまとめる必要などないんです。使いたいバージョンで個別に用意すれば良いんです。(個別にインストールしても大した手間じゃないです)

XAMPPは「簡単に全部入る」がウリですが、私はそれにメリットを見出せません。

まぁ好きなようにすればいい

最後の最後で記事の趣旨をちゃぶ台返しするのはGoをインストールした時にもやった気がするのですが……

私にはzipを展開してPATHを通す方が「簡単」なのですが、技術力次第ではXAMPPをインストールする事を「簡単」だと思う人も居るでしょう。

(PATHを通す方が簡単なのは「%USERPROFILE%\bin」をPATHに入れてるから、ってものある)

色々書きましたけど、結局のところは「自分が良いと思った方のやり方でやってね」です。動けばいいんですよ動けば。

ただ、XAMPPは簡単だけど複雑で個人的には好きではない。それだけの話です。

(感覚的にはWordPressが近いかな、(使うのは)簡単だけど、(使いこなすのは)複雑で難しい)

 - プログラミング ,