LoginSignup
33
34

More than 5 years have passed since last update.

Composerの依存パッケージをオールインワンのpharにまとめるツール作った

Last updated at Posted at 2015-08-24

はじめに

こんな経験ありませんか?

あなた 「パッケージをcomposerで公開しました!よかったら使ってください!」
初心者 「composerって何?requireするだけの方法はないの?」
あなた 「えーそんなこと言われても…」

composerのインストール方法および使い方を教えるのもいいと思いますが、別の手段として単一ファイルをrequireするだけで済む方法も用意しておくと便利な場合もあるんじゃないかと思います。その際のPharパッケージ生成をちょっとだけ楽にするためのツールです。

インストール方法も上記に英語で記載してあるのですが、一応こちらにも日本語で書いておきます。

インストール

1. Composerのグローバルインストールを実行

Packagistから落としてきます。

example@localhost:~$ composer global require mpyw/comphar:@dev
Changed current directory to /Users/mpyw/.composer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing mpyw/comphar (dev-master XXXXXXX)
    Cloning XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Writing lock file
Generating autoload files
example@localhost:~$

2. $PATHを更新

まだの場合は~/.composer/vendor/binにパスを通しておいてください。

~/.bashrc ~/.zshrc など
export PATH="~/.composer/vendor/bin:$PATH"

使い方

Usageを日本語訳しておきます。

example@localhost:~$ comphar -h
使い方: ./comphar [オプション]
オプション:
  -h, --help          このヘルプを表示する。
  -v, --verbose       冗長出力する。
  -o, --out <値>      アーカイブ名。デフォルトは "vendor.phar"。
  -d, --dir <値>      プロジェクトルートディレクトリ。デフォルトはカレントディレクトリ。
      --yes           実行時のインタラクティブな確認を省く。
example@localhost:~$

使用例

1. リポジトリを用意

あらかじめオートロードのためのcomposer.jsonを書いておきます。

composer.json
{
    "name": "mpyw/my-new-package",
    "description": "This is a stupid example",
    "require": {
        "mpyw/my-dependency-1": "@dev",
        "mpyw/my-dependency-2": "1.0.0",
    },
    "autoload": {
        "psr-4": {
            "mpyw\\MyNewPackage\\": "src/"
        }
    }
}

2. vendor.phar の生成

プロジェクトルートディレクトリでcompharコマンドを実行すると同一階層にvendor.pharというファイルが作られます。

example@localhost:~/my-new-package$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
example@localhost:~/my-new-package$ comphar -v
Project directory: ~/my-new-package
Output filename: ~/my-new-package/vendor.phar
Continue? [y/n]: y
Added: ...
Added: ...
Added: ...
Added: ...
Added: ...
example@localhost:~/my-new-package$

注意点

  • 変更がある場合はあらかじめcomposer updateしておいてください。
  • 依存パッケージが何も無い場合でもcomposer installまたはcomposer updateは必要です。自分自身をオートロードに対応させるためです。

3. 使う・配る

作成した vendor.pharvendor/autoload.php と全く同じように使えます。

最も基本的な使い方
<?php
use mpyw\MyNewPackage\Foo;
require 'vendor.phar';
$foo = new Foo();
後から自分用のオートローディングを追加
<?php
use mpyw\MyNewPackage\Foo;
use mpyw\MyOtherPackage\Bar;
$loader = require 'vendor.phar';
$loader->addPsr4('mpyw\\MyOtherPackage\\', '~/my-other-package/src');
$foo = new Foo();
$bar = new Bar();
33
34
4

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
33
34