※5年以上前に別のナレッジベースへ投稿していたものを書き出しただけなので情報が古い可能性があります。
システム要件
- PHP5.3.2以上
- git、SVN、hgがインストールされている(どれが必要かはパッケージによる)
- マルチプラットフォーム
覚えておくべきこと
- composer.jsonはインストールしたいものを列挙する
-
composer install
するとcomposer.lockが作られる -
composer install
はcomposer.jsonに従って行われる- ただしcomposer.lockがある場合はロックファイルに記述されたバージョンをインストールする
- composer.lockはインストールされたものが列挙される
-
composer update
するとパッケージが更新される- 複数人で環境を合わせている場合、実行するのは基本的にinstallコマンドのみ
- updateはcomposer.lockも書き換える。
composerを使用している既存のプロジェクトに参加する場合
- composer.lockがない場合はリーダーに指示を仰ぐ。
- 勝手に
composer update
しないこと。 - updateコマンドを実行するとcomposer.lockを無視してcomposer.jsonを参照してしまう。
- composer.jsonの記述によっては違うバージョンになってしまう。
- 勝手に
- パッケージの取得はcomposer.lockがある状態で
composer install
で行う。- 識者によってパッケージが更新された場合はcomposer.lockを受け取ってインストールする。
composer.lockを書き換えずに特定のパッケージだけ更新したい場合
-
composer update pear/console_commandline
- パッケージ名を指定して個別にアップデートする
基本
- composerはPHPのパッケージを管理してくれるソフトウェア。
- composer本体はPHPで出来ている。
- 実行ファイルの
.phar
はjavaでいうjarのようなもの。
- 実行ファイルの
- composer本体はプロジェクト外にインストールする。
- composerは内部でgitやsvnなどを使ってパッケージをインストールする。(設定による)
- マルチプラットフォームでWindows用にはexeが用意されている。
- composerはPackagistという中央リポジトリが用意されている。
- デフォルトではそこから取得するが、自分でリポジトリ作ることも出来る(satis)
- zipなどを指定することも出来る
使い方
- 基本的な実行方法は
composer コマンド名
composer install
composer updateなど
- プロジェクトのディレクトリに
composer.json
を作成してインストールコマンドを叩く。-
composer.json
にはインストールしたいパッケージを書いておく。
-
- 実行したディレクトリにvendorディレクトリが作られ、その中にパッケージがインストールされる。
- 実際にインストールされたパッケージが記述された
composer.lock
が作られる。
composer.jsonとcomposer.lock(ロックファイル)
- composer.jsonはインストールしたいパッケージを列挙したjsonファイル。
- composer.jsonは取得するパッケージのバージョンを「v2.0以上」のように曖昧に書ける。(例:1.0.*)
- composer.lockはインストールされたパッケージが列挙されたjsonファイル。
- composer.lockはcomposer.jsonの曖昧表現から実際にインストールされたバージョンが記述される。
- 初めてinstallするとcomposer.jsonを見てcomposer.lockが作られる。
- composer.lockがある状態でinstallするとcomposer.lockを見てインストールされる。
パッケージ
- パッケージ名の
xxxx/yyyy
というフォーマットは前者がベンダ名で後者がパッケージ名- 複数のベンダが同じパッケージ名を使えるように考慮されている
- パッケージバージョンの表記はタグかブランチかで分かれる。
- タグがあるならタグの安定版を使ったほうがいい。
- タグの場合は
1.0.0
、v2.0.0
のような形式となる - ブランチの場合は
dev-master
、2.0.1
のような形式となる。 - オプションとして
-pach
、-alpha
、beta
、-RC
といったオプションを付加できる。 - オプションはタグの場合は後部に、ブランチの場合は前部に付加する。
- ただし、ブランチ名がタグ名の規約に合わせて付けられている場合、{ブランチ名}-devという名前になる。
- タグの場合は
タグ名の例
- 1.0.0
- v2.0.0-beta2
- v3.0.1-alpha
ブランチ名の例
- dev-master
- 2.0.1-dev
composer.jsonサンプル
基本
{
"require": {
"monolog/monolog": "1.0.*"
}
"require-dev": {
"phpunit/phpunit": "3.7.*",
}
}
開発時にだけ必要なものはrequire-devに書く。
本番環境でインストールするときにcomposer install -no-dev
とすれば、
require-devで指定されているものはインストールされない。
リポジトリ指定
GitやSVNのリポジトリなら
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/hoge/hogehoge"
}
],
"require": {
"hoge/hogehoge": "1.0.*"
}
}
PEARリポジトリなら
{
"repositories": [
{
"type": "pear",
"url": "http://pear.php.net"
},
{
"type": "pear",
"url": "http://pear.phpunit.de"
}
],
"require": {
"pear-phpunit/PHPUnit": "3.4.*",
"pear-php/Mail": "1.2.*",
"pear-pear/Net_SMTP": "1.4.1",
}
}
Vendor名はpear-{channelName}の形式になる
※PHPUnitのPEAR channelは2014年末に終了済み
packageそのものを直接指定するなら
{
"repositories": [
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version: "3.1.8",
"dist": {
"url": "http:www.smarty.net/files/Smarty-3.1.8.zip",
"type": "zip"
}
}
},
],
}
zipファイルで配布されているパッケージを直接指定するサンプル。
参考リンク
Dependency Manager for PHP
https://getcomposer.org/
https://kohkimakimoto.github.io/getcomposer.org_doc_jp/doc/Qiita : composer 導入をまじめに考える
http://qiita.com/notona/items/c5a087d8dd446d315e6eSlideshare : いまさらComposer
http://www.slideshare.net/mkkn00/ss-36062876