※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 installcomposer 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/c5a087d8dd446d315e6e
Slideshare : いまさらComposer
http://www.slideshare.net/mkkn00/ss-36062876