PHP

Boxを使ってPharファイルを簡単に作成

More than 3 years have passed since last update.

PHPでコマンドラインツールを作成するときにPharにして配布した方が、1ファイルに納まっているので使いやすいですよね。


Box ってなに?

BoxはPharの構築を非常にシンプルにしてくれるツール

http://box-project.org/


Box をインストール

$ curl -LSs https://box-project.github.io/box2/installer.php | php

box.phar を、/usr/local/bin とかに box として移動しておくと便利です


Phar を作成するための設定 box.json を作成

説明の参考例として yaml を json に変換するためのコマンドツールを作成したので、これを例に説明します。

Box以外の部分の詳細などはGithubのリポジトリを参照してください

https://github.com/iwai/yaml2json

とりあえず設定ファイルは以下の感じです。

{

"alias": "yaml2json.phar",
"chmod": "0755",
"files": [
"LICENSE",
"vendor/autoload.php"
],
"finder": [
{
"name": "*.php",
"exclude": [ "tests" ],
"in": [
"vendor/nategood",
"vendor/mustangostang",
"vendor/kevinlebrun",
"vendor/composer"
]
}
],
"main": "bin/yaml2json",
"output": "yaml2json.phar",
"stub": true
}


alias

Phar::mapPhar の第一引数に指定されるaliasです。コマンドラインツールの場合は必要ない気がするので指定しなくても問題ないです。未指定の場合は、Boxのデフォルトで default.phar の指定になります。


chmod

作成されるPharファイルのパーミッションの設定、実行権限付けておくと便利。


files

Pharファイルに含めるファイルの指定、後ほど説明する finder でも出来るんだけど、finderだと指定しづらいものは、こっちで指定しておく


finder

Pharファイルに含めるファイルの指定、今回は、composerでインストールした依存ライブラリを含めるように指定。Box内での処理的にはSymfony\Component\Finder\Finderが使われているらしいので、それに準じた指定ができるっぽい。


main

コマンドラインからPharが実行された場合に実行されるファイルの指定、コマンドラインツールなので、ここ重要。


output

作成されるPharファイルのパス、今回は box 実行した直下に作成したけど、bin/yaml2json.phar とかでもOKと思う、ファイル名まで指定しないと、default.phar で作成される。


stub

作成したstubファイルのパスか、booleanで指定する、trueにしておけば、デフォルトのstubファイルで作成してくれる。falseとかにすると、Phar拡張とかが有効になってないphpの環境とかで動かなくなるので、コマンドラインツールとしては、true にしておいた方が吉。


box で build する

ビルドするとoutputで指定したところに、pharファイルできてます。

$ box build -c box.json

Pharファイルにするとポータブルになって導入とか非常に楽になるのでオススメです。


気をつけたいこと

box で build するときは、composer install --no-dev で不要なライブラリが入っていない状態にしないと、composerのautoload系のファイルに、boxで含めてないファイルに関連する設定が入って、pharが実行できなかったりするので、そこ注意。