元々はSymfonyのパッケージ管理で使われていたcomporserですが最近ではphpのパッケージ管理で使われるようになりました。node.jsのnmp、rudyでいうところのbundlerみたいなものということになります。かねてからLinuxのyumやphpのpearなどいろんなパッケージ管理方法がありましたが、これらはOS単位でのパッケージ管理だったのでいちいちサーバー構築しないといけないということで非常に面倒です。そこでプロジェクト単位(アプリケーション単位)でパッケージを管理しようというものがcomposerということになります。
composerは依存関係のライブラリーを解決してインストールしてくれるので、とても便利です。
コンポーザーのインストール
php5.3.2以上じゃないとcomposerは使えないです。またサーバーにcurlがないとインストールできないです。curlがどうしても入れられない場合はcomposerの本家に言ってダウンロードしてくることもできます。https://getcomposer.org/# curl -s http://getcomposer.org/installer | php
私はたいていのプロジェクトがDocumentRoot単位なのでたいていの場合はホームディレクトリにインストールします。都度インストールした方が使いやすいというのが私の印象ですが、グローバルにcomposerを使うこともできます。
# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer
インストールが完了したら、コマンドを確認してみます。このコマンドでcomposerのコマンドがどんなものなのか確認できます。
$ php composer.phar
これでインストールは終わり。
パッケージをインストールする
symfonyをプロジェクト単位でインストールする
composerでパッケージをインストールします。symfonyをインストールする場合は直接引数を指定してプロジェクト単位でインストールすることができます。$ composer* create-project symfony/framework-standard-edition /home/USER/www
インストールすると以下のようなファイルができています。インストールしたパッケージはvender以下におさめられます。composer.pharがcomposer本体、composer.lockがインストールのロックファイル、composer.jsonがパッケージ管理のデータベース的なものになります。
|-- ....... |-- composer.json |-- composer.lock |-- composer.phar `-- vendor |-- autoload.php `-- composerautoloaderはcomposerでインストールしたパッケージをすべて自動的に読み込んでくれるものです。
require_once 'vendor/autoload.php';
とするだけでインストールしたパッケージを読み込んでくれます。個々にincludeしたりrequireしたりする必要がなくなります。
パッケージ単位でインストールする
で、パッケージ単位でインストールする場合は、composer.jsonにインストールしたいパッケージを書きます。composer.jsonにインストールしたいパッケージを追記します。ここではphp5.4以下の場合bcryptで必要なパッケージircmaxellを追加します。"require": { ....... "ircmaxell/password-compat": "~1.0.3" },という風にjsonに追記して、
$ php composer.phar update
でインストールできます。(かなり時間かかりました。プログレスバー的なものがないので、途中心配になりました。)