composer入門

  • 29
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

composerとは?

PHPのパッケージ管理システムです
pearに変わるものとして最近広く使われています
rubyでいう、bundlerみたいなものです

参考: http://codezine.jp/article/detail/7827

composerをインストールする

$ curl -sS https://getcomposer.org/installer | php

これでcomposer.pharができあがります

$ chmod o+x composer.phar
$ sudo mv composer.phar /usr/local/bin/composer

とやっておくと便利ですが、やらなくても別に問題ありません
私はやりません

composerを使ってパッケージをインストールする

composerでインストールできるパッケージはPackagistで見ることができます

試しにmigrationツールのphinxを、composerを使ってインストールしてみましょう

https://packagist.org/packages/robmorgan/phinx

インストール方法その1

簡単なのは、コマンドラインで必要なパッケージを指定してインストールする方法です
Packagistのページに、インストールコマンドが書いてあるので、これを参考にインストールします

スクリーンショット 2015-06-05 18.00.01.png

/usr/local/bin/composerにmvしていないので、
composerコマンドの代わりに、php comopser.pharと読み替える必要があります

$ php composer.phar require 'robmorgan/phinx:0.4.3'
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing symfony/yaml (v2.6.9)
    Downloading: 100%         

  - Installing symfony/filesystem (v2.7.0)
    Downloading: 100%         

  - Installing symfony/config (v2.6.9)
    Downloading: 100%         

  - Installing symfony/console (v2.6.9)
    Downloading: 100%         

  - Installing robmorgan/phinx (v0.4.3)
    Downloading: 100%         

symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/process ()
symfony/console suggests installing psr/log (For using the console logger)
Writing lock file
Generating autoload files

このように、phinxが依存しているパッケージも含めてインストールされました

$ ll
total 2192
drwxr-xr-x   6 foobar  staff      204  6  5 08:44 .
drwx------+ 15 foobar  staff      510  6  5 08:27 ..
-rw-r--r--   1 foobar  staff       62  6  5 08:44 composer.json
-rw-r--r--   1 foobar  staff     9896  6  5 08:44 composer.lock
-rwxr-xr-x   1 foobar  staff  1105630  6  5 08:27 composer.phar
drwxr-xr-x   7 foobar  staff      238  6  5 08:44 vendor
</pre>

composer.json、composer.lock、vendorディレクトリが作られます
composer.jsonの内容を見てみましょう

composer.json
{
    "require": {
        "robmorgan/phinx": "0.4.3"
    }
}

コマンドラインで指定したパッケージが記録されていますね

インストール方法その2

composer.jsonを自分で書く方法もあります
どちらかというと、こちらの使い方がメインのようです

phinxに加え、guzzle/guzzleパッケージも入れてみます

https://packagist.org/packages/guzzle/guzzle

composer.jsonをこう修正します

composer.json
{
    "require": {
        "robmorgan/phinx": "0.4.3",
        "guzzle/guzzle": "3.9.3"
    }
}

composer updateコマンドを実行します

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing symfony/event-dispatcher (v2.7.0)
    Loading from cache

  - Installing guzzle/guzzle (v3.9.3)
    Downloading: 100%         

symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
guzzle/guzzle suggests installing guzzlehttp/guzzle (Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated.)
Writing lock file
Generating autoload files

guzzle/guzzleがインストールされました

Packagistに無いパッケージを使う

Packagistになくても諦める必要はありません
gitにあるパッケージだって入れることができます

ためしに、
https://github.com/pear/Text_Wiki
を入れてみましょう

composer.jsonをこう修正します

composer.json
{
    "repositories":[
        {
            "type": "git",
            "url": "https://github.com/pear/Text_Wiki"
        }
    ],
    "require": {
        "robmorgan/phinx": "0.4.3",
        "guzzle/guzzle": "3.9.3",
        "pear/Text_Wiki": "dev-master"
    }
}
$ php composer.phar update

これで入るはずです

使わなくなったパッケージを消す

guzzle/guzzleの代わりにpear/http_request2を使うことにします

composer.jsonをこう修正します

composer.json
{
    "repositories":[
        {
            "type": "git",
            "url": "https://github.com/pear/Text_Wiki"
        }
    ],
    "require": {
        "robmorgan/phinx": "0.4.3",
        "pear/http_request2": "2.2.1",
        "pear/Text_Wiki": "dev-master"
    }
}
$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)                     
  - Removing guzzle/guzzle (v3.9.3)
  - Removing symfony/event-dispatcher (v2.7.0)
  - Installing pear/net_url2 (v2.2.0)
    Downloading: 100%         

  - Installing pear/http_request2 (v2.2.1)
    Downloading: 100%         

Writing lock file
Generating autoload files

これで、guzzle/guzzleが消され、HTTP_Request2が入るでしょう
参考:composerで入れたパッケージがautoloadで見つからなくてエラーになっちゃう場合の対処法

composerでインストールされたパッケージを使う

プログラム内で

require 'vendor/autoload.php';

と書くだけで、guzzleもyamlもText_Wikiも使えるようになります
/usr/share/pear
をinclude_pathに追加して、require_once 'Text_Wiki' と書いたりする必要はありません

composerとgit

composerを使う上で大事なのは、
composer.jsonとcomposer.lockファイルはgit管理する
vendorディレクトリはgit管理しない
ということです
composer.pharは好き好き

プログラムを動作させる前に、

$ php composer.phar install

とすることで、必要なパッケージが全てインストールされます
この場合、updateではなく installです

composer.jsonとcomoser.lockの違い

どのパッケージをインストールしたいか、という指定は全てcomposer.jsonに書きます
で、どのパッケージをインストールしたか、という情報はcomposer.lockに書き込まれます

composer.jsonでは、バージョンの指定を

        "guzzle/guzzle": ">=3.9.3",

と書くことで、3.9.3以上の最新バージョンをインストールすることができます。

開発サーバーでインストールした時は、3.9.3が最新だったけど、本番サーバーでインストールする時は3.9.4が出てたら、このままだと開発と本番のバージョンが変わってしまいます
それを防ぐのがcomposer.lockファイルです

composer installコマンドは、composer.lockファイルの情報をもとにパッケージをインストールします

なので、composer.jsonとcomposer.lockを両方git管理し、本番サーバーではcomposer installコマンドでライブラリをインストールするのが正解なのです