Open hysryt opened 6 years ago
PHP 用のパッケージ管理システム。 JavaScript の npm のようなもの。
リポジトリは packagist.org を使っている。 composer と packagist.org の運営はたぶん同じ。 packagist.org には誰でも登録してパッケージを公開できるが、オープンソースにする必要がある。 プライベートなリポジトリを使いたい場合は有料の packagist.com を使用する。 リポジトリとしてgitリポジトリも使用可能
autoload 機能も付いている。
composer でインストールしたライブラリなどは vender/autoload.php
だけ読み込めば使用できるようになる。
さらに、自分用に名前空間とディレクトリの関連付けを追加で登録できる。
自分で autoload.php を書く必要はない。
autoload 機能のためだけに composer を使うこともできる。
適当なディレクトリにcomposer.json
を作成して、名前空間とディレクトリの関連を記述
{
"autoload": {
"psr-4": {
"MySrc\\": "src/"
}
}
}
autoload.php
を作成するために以下のコマンドを実行
$ composer install
すると vender
ディレクトリと、その中に autoload.php
が作成されるので、あとは各ファイルでこの autoload.php
を読み込めば、autoload 機能を使うことができる。
autoload機能だけなら composer install
は composer dump-autoload
でも良い。
PSR-4 ではクラス名とファイル名を同じにする必要がある。 クラス名とファイル名を別々にしたい場合(WordPressの規約など)は composer.json を以下のようにする。
{
"autoload": {
"classmap": ["src/"]
}
}
autoload.php
生成時にファイルを解析して、ファイル名とクラス名を対応づけしてくれる。
git clone
+ composer install
と同じらしい
Composerのcreate-projectが何をやっているのか調べてみた - Qiita
オプション | 説明 |
---|---|
--prefer-source |
ソースを使用する。開発中のものなど。 |
--prefer-dist |
パッケージを使用する。安定版など。 |
ちなみに source と dist は show
コマンドで詳細を見ることができる
$ composer show phpunit/phpunit
(略)
source : [git] https://github.com/sebastianbergmann/phpunit.git e2f8aa21bc54b6ba218bdd4f9e0dac1e9bc3b4e9
dist : [zip] https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e2f8aa21bc54b6ba218bdd4f9e0dac1e9bc3b4e9 e2f8aa21bc54b6ba218bdd4f9e0dac1e9bc3b4e9
(略)
インストールしたパッケージに実行スクリプトが含まれる場合、vendor/bin
に配置される。
例えば phpunit
をインストールすると、実行スクリプトとして vendor/bin/phpunit
が配置される
install
と update
のエイリアスとして i
と u
を追加show
コマンドに --tree
オプション追加{glob,braces}
をサポートstatus
で diff を表示できるように変更create-project
に --remove-vcs
フラグを追加create-project
に --no-secure-http
を追加pre-command-run
イベント追加RemoteFilesystem::getRemoteContents
拡張ポイント追加diagnose
コマンドに、オーバーライドされたプラットフォーム設定のPHPバージョンを追加--no-cache
フラグ追加no-api
フラグを設定できる use-github-api
設定を全てのGitHubVCSリポジトリに追加Composer\\Config::disableProcessTimeout
を追加composer.json
に各種設定を記述する。
packagist 以外のカスタムパッケージリポジトリを設定する。 追加できるリポジトリのタイプとして次の種類が存在する。
タイプ | 内容 |
---|---|
composer | composerリポジトリを指す。実体はサーバー上の packages.json ファイル。packages.json ファイルには dist と source が記載された composer.json のリストが含まれている。 |
vcs | git 、svn 、fossil 、hg を指定する。 |
pear | 任意のpearリポジトリを設定できる |
package | composer をサポートしないプロジェクト用に使用する |
{
"repositories": [
{
"type": "composer",
"url": "http://packages.example.com"
},
{
"type": "vcs",
"url": "https://github.com/Seldaek/monolog"
},
{
"type": "pear",
"url": "https://pear2.php.net"
},
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
},
"source": {
"url": "https://smarty-php.googlecode.com/svn/",
"type": "svn",
"reference": "tags/Smarty_3_1_7/distribution/"
}
}
}
]
}
リポジトリを追加することで require
でそのリポジトリ内のパッケージへの依存関係を設定できる。
追加したリポジトリは上から順に検索され、最初に見つかったパッケージを使用する。
https://getcomposer.org/doc/articles/versions.md
VCS のバージョンとの関係
Composerをそのまま使用するとComposerを動かしているPHPのバージョンに依存してしまう。 (PHPのバージョンによってインストールされるパッケージが変わるっぽい?) Composerを動かす環境と本番環境のPHPバージョンが同じとは限らないため、その場合はプラットフォームの情報を指定する必要がある。
https://getcomposer.org/doc/06-config.md#platform
また、composer check-platform-reqs
を実行することで、その環境がインストール済みのパッケージの要件を満たしているかどうかを調べることができる。
https://getcomposer.org/doc/03-cli.md#check-platform-reqs
https://getcomposer.org/