LoginSignup
13
14

More than 5 years have passed since last update.

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

Posted at

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が実行できなかったりするので、そこ注意。

13
14
0

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
13
14