composerとはPHPのパッケージ管理システムである。
なんでそんなものを使う必要があるのか。
パッケージ管理システムがない環境では、メンバーがそれぞれ必要なライブラリの公式サイトにアクセスし、zipファイルをダウンロードし、ローカルに展開する。
DB接続用に○○、ログ出力用に△△等々、さまざまなライブラリが必要になる。
パッケージ管理システムはそれらを個人の裁量に依存せずに導入できる仕組みを提供する。
以下のようなデメリットというかイニシャルコストが必要になるが、いまどきのPHPプロジェクトでは必須である。
- パッケージ管理システム自体のインストールが必要
- パッケージ管理システムの使い方の理解が必要(コマンドオプション、設定ファイルの記述方法)
composerを使えば、コマンド一発で必要なパッケージをすべてインストールできる。
- composerはPackagistからパッケージを取得する。
- Packagistはインターネット上に公開されているメインリポジトリである。
- パッケージAをインストールするときに、Aに依存するB,C,Dも自動的にインストールしてくれる
実際に使ってみる
composerをインストール
下記からComposer-Setup.exeをDLして普通にインストールする。
(Windowsの場合)
https://getcomposer.org/download/
するとコマンドライン(cmd.exe)でcomposerが使えるようになる
任意のフォルダに下記のとおりcomposer.jsonをおく
{
"require": {
"ircmaxell/random-lib": "1.0.0",
}
}
- composer.jsonのrequire内にあるパッケージをインストールする。
- パッケージ名は"ベンダー名/プロジェクト名"となっている
- バージョンを固定で指定してもよいし、範囲を指定してもよい。
- "1.0.0"とすれば1.0.0が固定でインストールされる。
- "1.0.*"のようにワイルドカードを指定すれば、その範囲で最新がインストールされる。
ちなみにこのライブラリはこれです。
ランダムな数値や文字列を生成してくれます。
今回はサンプルなので、これひとつですが、使いたいライブラリがあればドンドンcomposer.jsonに追加していきます。
composer.jsonが配置されているディレクトリでcomposer installします。
c:\tmp>composer install
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.or
g/xdebug
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing ircmaxell/security-lib (1.0.0)
Downloading: 100%
- Installing ircmaxell/random-lib (v1.0.0)
Downloading: 100%
Writing lock file
Generating autoload files
下記のとおりパッケージがダウンロードされ、ファイルが配置されます。
C:.
└─vendor
├─composer
└─ircmaxell
├─random-lib
│ ├─lib
│ │ └─RandomLib
│ │ ├─Mixer
│ │ └─Source
│ └─test
│ ├─Mocks
│ │ └─Random
│ ├─Unit
│ │ └─RandomLib
│ │ ├─Mixer
│ │ └─Source
│ └─Vectors
│ └─Random
└─security-lib
├─lib
│ └─SecurityLib
│ └─BigMath
└─test
├─Mocks
└─Unit
└─Core
└─BigMath
はじめてcomposer installをすると、composer.lockが生成される。
composer.lockはチーム内で同じバージョンを共有するための仕組み。
文字通りバージョンを固定(ロック)する。
composer.lockが存在する状態でcomposer installをすると、composer.lockに記されたバージョンのパッケージがインストールされる。
composer updateをすると、composer.lockに記されたバージョンを無視して、composer.jsonに記載の範囲で最新版に更新される。
パッケージはvendor配下に配置される。
オートローダが自動的に配置される。
composer updateをすれば追加分が最新が反映される。
次は、インストールしたパッケージを使用します。
<?php
require_once 'vendor/autoload.php';
$factory = new RandomLib\Factory;
$generator = $factory->getMediumStrengthGenerator();
$randomInt = $generator->generateInt(5, 15);
echo $randomInt;
echo "\n";
$randomString = $generator->generateString(32, 'abcdef');
echo $randomString;
?>
autoload.phpをrequireすればcomposerでインストールしたクラスを自動的にロードしてくれます。
実行結果はこんな感じです。
c:\tmp>php sample.php
13
cccdcbdfbdcbdfdaafdebdbbbffacbbc