623
608

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPのモダンな開発環境を紹介する

Last updated at Posted at 2015-02-08

やあPHP! 最近なんだかまともだなぁ

PHP開発の上で実用的なツール群について、RubyやPythonほどには知名度がないので紹介したい。Windowsのことは知らないので、各自がんばってほしい。

筆者はもともとRubyの方から来たので、Rubyとの比較が多いのは留意されたい。


この記事の内容と直接関連はしないが、併せて読まれたい

準備

MacだとHomebrewがあると依存ライブラリを集めるのが楽でべんり。

これは個人の趣味の話なのだけれど、自分でインストールする実行ファイルは$HOME/local/binに置くのが好きだ。

.bash_profile
PATH=$HOME/local:$PATH

筆者はZ Shellユーザーなので https://github.com/zonuexe/dotfiles/blob/master/.zshenv#L1-L13 のようにしてる。

PHPBrew

Rubyでのrbenvruby-buildみたいな感じ。

PHPBrewをインストール/初期化したあとは phpbrew known で新しめのバージョンを調べて phpbrew install 5.6.5 +default のようにインストールすることになる。

+defaultのようにVariantsを指定することで、拡張ライブラリをインストールすることができる。これがないとライブラリがまったくない状態になるので、忘れないようにしておきたい。

インストール完了したら phpbrew switch 5.6.5 でシェルから当該のバージョンのPHPを利用できるようになる。php --versionなどで確認するとよい。

PHPBrewを利用するメリットのひとつに、PECLなどのC拡張の導入が楽になることが挙げられる。

# わざわざphp.iniを手で編集しなくても有効化できる
$ pecl install mongo
$ phpbrew ext enable mongo

# peclコマンドのことは忘れて、最初から phpbrew ext install した方がいい
$ phpbrew ext install mongo

phpbrew install時にインストールしわすれたライブラリを追加でインストールするときも phpbrew ext install でインストールできる。

Composer

RubyのgemコマンドとBundlerに相当するものだ。rubygems.orgやPyPIに相当するのはPackagistだ。

PHPのモダンなライブラリとかフレームワークと呼ばれてるものはだいたいComposer対応してるので、現在では避けて通ることができない。

Getting Startedに従ってインストールしてほしい。どうやらWindowsでも動くようだ。

PHPのライブラリ管理リポジトリとしてPEARとかPear2とかPyrusの名前を記憶してる方も居るかもしれないが、残念ながら全て死に体だ。 忘れてあげてくださいね。

既存のプロジェクトにComposerを導入する

拙作のzonuexe/http-accept-languageをインストールしたいとする。HTTP Accept-Languageヘッダをパースできるべんりなやつだよ。

はじめに、プロジェクトのルートディレクトリにvendorがあるかを確認してほしい。ここでは話の都合上、既存のvendorはないものとして進める。

composer require zonuexe/http-accept-language:"~0.4.1"

このコマンドを実行すると、vendorディレクトリの下にComposer環境とzonuexe/http-accept-languageライブラリがインストールされる。

忘れないうちに、プロジェクトをGit管理してる場合は.gitignore/vendorの行を追加しておこう。/vendor/.gitkeepファイルを作っておいてもいいが、そこは好みの問題だ。

vendor/autoload.phpといふファイルができてるはずなので、プロジェクトの実行ファイルやWebアプリケーションの起動ファイルのようなものからinclude/requireする。ライブラリの場合は、テストの起動時にvendor/autoload.phpが読み込まれるようにしておけば十分だろう。

残念なお知らせなのだが、「ライブラリとしてインストールしたプロジェクトから実行ファイルとして起動されるプログラム」の場合は、インストールの方法によってautoload.phpの場所が一意に定まらないので一工夫が必要になる。 https://github.com/zonuexe/php-php-checker/blob/master/bin/phpchecker を見て、お察しください。

Composerが導入されたプロジェクトをセットアップする

autoload.phpはインストール時に生成されるため、プロジェクトの開発メンバーの環境やデプロイされる環境にもcomposer.pharがあり、composer.phar installしなければ動作しない。

メンバー全員にComposerをインストールさせると管理が煩雑になるので、セットアップのラッパースクリプトのようなものを用意して、各自のプロジェクトディレクトリ以下にcomposer.pharを配置してもいいだろう。社内のクローズドなプロジェクトなら、いっそcomposer.pharをリポジトリの管理下に配置しておくのも一手ではある。

業務でComposerを運用するには

PHP - composer 導入をまじめに考える - Qiitaを読まないと話が始まらない。

PsySH

RubyのIRB(irb)みたいなやつ(REPL)。PHPにも一往は標準で php -a があるんだけど、かなり不便なのでこちらを入れた方が捗る。あと、デバッガーとして組み込むこともできる。

php -avar_dump(1 + 2); のように明示的に書かないと画面に表示されない(うっかり;を忘れると動かない)。しかし、psysh1 + 2 と書くだけでいい。(var_dump()echoをする必要がなく、行末の ; を省略できる)

TDD/BDD

乱暴にもこの記事では両者をまとめて紹介する。

PHPUnitは定番のxUnitテスティングフレームワークだ。筆者はこれなしにPHPを書こうといふ気にはならなかった。

phpspecはPHPUnitほどの知名度こそないが、注目を浴びつつある、かなり尖ったBDDフレームワークだ。

ビルトインWebサーバー

これはPHP 5.4からの標準機能だ。コマンドラインでphp -S localhost:3939を実行するとPHPが動くHTTPサーバーが起動する。開発環境を整備するためにローカルにApacheをインストールする、などといったことが不要になるので捗る。

(宣伝) 筆者が最近作った再発明車輪かんたんルーターzonuexe/php-simple-routingも動くよ!

おまけ: php-mode

宗教戦争がしたいわけじゃないんだよ! でもEmacsを使ってるのに最新版のphp-modeを使ってないのはもったいないから紹介したいだけなんだよ!

最近も絶え間なく開発が続けられて痒いところに手が届くようになってるから、最初にインストールしてから更新してないよって人も最新版を使ってみてね。

まとめ

ざっと書き上げてみたものの、実際のところモダンなPHPを書くにはPHP: The Right Wayを読むべきだ。

  • RubyやPythonで一般的な開発ツールはPHPにもある
    • ビルド管理ツール (PHPBrew)
    • プロジェクトローカルなパッケージマネージャ (Composer)
    • インタラクティブシェル/REPL (PsySH)
    • ビルトインWebサーバー php -S
  • こんなライブラリないかな? と思ったらPackagistを漁ってみる
  • Emacsを使ってるひとは最新版のphp-modeを入れると良い
  • PHP: The Right Wayを読もう

それでも仕事で使ってると、周囲からあれがつらいここがだめだと不満が噴出するのがPHPではある。

私からは以上です。

最後に

サーチライトのつもりかい。

623
608
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
623
608

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?