PHPでコマンドラインツールを作成するときにPharにして配布した方が、1ファイルに納まっているので使いやすいですよね。
Box ってなに?
BoxはPharの構築を非常にシンプルにしてくれるツール
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が実行できなかったりするので、そこ注意。