概要
PHPでの拡張ライブラリ(パッケージ)のための、パッケージ管理ツール。
メリット
- 依存性を自動で解決しながら、インストール・アンインストールがコマンドで実行できる。
アプリで利用するパッケージをあらかじめ定義ファイルとして準備しておくことで、
複数の環境で同一の環境を準備したい場合にも重宝する。 - アプリ単位でパッケージを管理する。
以前普及していたパッケージ管理ツールにPEARがある。
PEARは全てのパッケージをプラットフォーム共通で管理していたので、
同じパッケージの異なるバージョンを同居させるのが困難というデメリットがあった。
Composerはアプリ単位でパッケージ管理をするので、
例えばアプリAではZライブラリの1.0を利用、アプリBではZライブラリの1.5を利用、といった環境を作りやすい。
また、アプリコードとライブラリ(パッケージ)を1つのフォルダの中でまとめて管理できる。 - ライブラリの自動ローディング機能を利用できる。
クラスライブラリをいちいち個別にインポートしなくても、必要に応じて自動で有効化できる。 - 対応するライブラリが豊富。
Composerで提供されているパッケージは次のWebサイトから確認できる。
Packagist
補足
ライブラリはC言語とPHPのどちらかで記述されていることが多い。
C言語で書かれたライブラリは動作が高速だが、
自分でライブラリを作成したり、既存ライブラリを読み込む場合にハードルが高いという難点がある。
近年はPHPのパフォーマンスが向上しているので、拡張ライブラリの大部分はPHPで書かれている。
C言語で書かれたライブラリとしては、古くから提供されているPECLが有名。
バージョン番号
セマンティックバージョニングと呼ばれる次の書式のルールで、
バージョン番号を管理することが推奨されている。
書式:メジャーバージョン.マイナーバージョン.バッチ番号(例:7.3.0)
バッチ番号:バグフィックスなどの微少な変更で、機能の追加は無し。
マイナーバージョンアップ:機能追加を伴うが、互換性は維持される。
メジャーバージョンアップ:互換性が維持されない可能性のある変更がある。
※ ただし、全てのライブラリがセマンティックバージョニングに従っているわけでは無い。
Tips
Composer を利用してライブラリをインストール
※アプリルートで実行する必要がある。
> composer require ライブラリ名 バージョン表記
~1.2.0 | 1.2.0以上、1.3.0未満 |
^1.2.0 | 1.2.0以上、2.0.0未満 |
1.2.* | 1.2.0以上、1.3.0未満 |
* | 現在の最新バージョン |
composer.json
composer.jsonはパッケージ定義ファイルとも呼ばれる。
現在のアプリで利用するライブラリ(パッケージ)の情報が記録されている。
composer require コマンドを実行すると、アプリルートに自動で生成されている。
composer require guzzlehttp/guzzle * を実行した後のcomposer.jsonの内容例
{
"require": {
"guzzlehttp/guzzle": "*"
}
}
composer.json を編集してライブラリ削除
composer.json の削除対象ライブラリの部分を削除して、次のコマンドを実行する。
※ update コマンドはcomposer.lock ではなく composer.json の記述を優先する。
> composer update
異なる環境にcomposerを利用して必要なライブラリをインストール
元となる composer.json をアプリルートに配置して、次のコマンドを実行する。
※ composer.lock があるならその情報に基づいて、無ければcomposer.json に基づいてライブラリをインストールする。
※ インストールするライブラリのバージョンを完璧に再現したい場合は、composer.json と composer.lock の2つをアプリルートに配置して、次のコマンドを実行すると良い。
> composer install
composer.lock
composer.json と同様にバージョン番号等が記録されているが、
composer.lock はバージョン番号が厳密に記載されている。
開発者が直接編集することはほぼ無い。
例えば、
composer.json では “*” と記載されていても、
composer.lock では実際にインストールされた “7.7.0”が記載される。
composer.lockの有無でcomposer install / update のコマンドも結果が変わることがある。
主なサブコマンド
composer require –dev パッケージ名 | 指定されたライブラリ(パッケージ名)を開発専用としてインストール。–dev オプションは開発時にだけ利用する(実行には必要無い)ライブラリをインストールするために利用する。–dev オプション付きでインストールされたライブラリは、composer.jsonでもrequireキー配下ではなく、require-devキー配下で管理される。別環境にインストールする時に、開発向けライブラリだけ除外する時に便利。 |
composer install –no-dev | 開発向けライブラリだけを除外してcomposer.json等に基づいてライブラリをインストール。 |
composer self-update | Composer 自身を更新。 |
composer validate | composer.json に誤りが無いかを検証する。 |
composer search name | 指定された名前(name)にマッチするライブラリの情報を取得。 |
composer show -i | インストール済みライブラリの情報を表示。 |
composer show -p | プラットフォームパッケージ(PHP拡張)の情報を表示。 |
composer show パッケージ名 | 指定されたライブラリ(パッケージ名)の情報を表示。 |