Pharアーカイブとは
PharアーカイブとはJAVAでいうjarです。
参照:Phar アーカイブの使用法: 導入
Pharアーカイブであれば、1ファイルで管理できるというメリットがあります。もちろんパフォーマンス面などのデメリットもあります。
たとえば、PHPUnitをインストールする方法としても、composer でがんばらなくても PHPUnitのPharアーカイブでインストールする方法があります。1ファイルだけあれば良いのでインストールも1ファイルのダウンロードだけで手っ取り早いですし、管理も簡単です。
自分のプロジェクトである Dbup でも dbup.phar でライブラリを提供しています。
Phar を作るのは辛いので Box を利用する
便利な Phar なんですが、自前で Phar を作ろうとするとビルドのためのスクリプトなど色々準備が必要で大変です。
コマンド1つで出来たらなぁと思っていたところ、Box というライブラリがあることを発見。簡単にいうと、Pharアーカイブのビルドを json ファイルに定義書くだけでよしなにビルドしてくれます。
実績でいうと、PHP Cording Standards Fixer の Phar ファイルはこの Box でビルドされています。
Silex の Phar ファイルを作成するための手順
Silex はいわゆるマイクロフレームワークな書き方ができる Webアプリケーションフレームワークです。
では、さっそく Box を使って silex.phar ファイルを作ってみましょう
ちなみに、簡単に作成するためにsilex-phar を用意したのでとりあえず silex.phar を作りたい人はこちらのリポジトリからどうぞ。
Silex をインストールする
Phar を作るために Silexのコード一式を composer で取得します
$ php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
$ php composer.phar require silex/silex "~1.2"
これで vendor
以下にコードがインストールされます
box.phar をインストール
$ curl -LSs https://box-project.github.io/box2/installer.php | php
これで box.phar
が作成されます。
box.json を用意する
だいたい何してるかは見ればわかると思います。
{
"finder": [
{
"name": ["*.php"],
"exclude": ["Tests", "tests"],
"in": ["vendor"]
}
],
"output": "silex.phar",
"stub": false
}
silex.phar を作成する
$ php box.phar build
Building...
終われば無事 silex.phar
ができているはずです。
silex.phar を使ったアプリケーションコードサンプル
あとは作成した silex.phar
の autoload.php
を利用すればOKです。
本家にあるサンプルコードだと、requireすべきファイルがpharの中になるので、パスが変わります。こんな感じ。
<?php
require_once 'phar://silex.phar/vendor/autoload.php';
$app = new Silex\Application();
$app->get('/hello/{name}', function($name) use($app) {
return 'Hello '.$app->escape($name);
});
$app->run();
動作確認するためだけなら、組込みサーバーでさくっと動かせば
$ php -S localhost:8888 -t ./
ブラウザから http://localhost:8888/hello/brtriver
みたいな感じで確認できるはず。
まとめ
たったこれだけの手順で silex の Pharアーカイブ ができました。
composerで頑張ってインストールしなければならないものは、それでいいですし、もっと楽できるところは Phar を使って楽できるといいんじゃないでしょうか
おまけ
Slimのpharを作りたい場合は、wikiにあるサンプル でできるみたい