別サイトで「簿記システム」の設計を行っているが、そこでPDF出力用のライブラリをいろいろ調べていたところ、「composer」というキーワードが出てきた。
なんでもPHP向けのパッケージ管理ツールということらしい。
フリーランスとしてのキャリアも長くなってきて、サラリーマン時代のようにチームで開発することがとんと減ってきてしまったので、パッケージ管理ツールやバージョン管理ツールを使う機会もめっきり減ってしまっていたし、PHP触りだしたのもフリーになってからなので、「composer」は触ったことがない。
ということで、ちょっと調べてみた。
公式サイト:https://getcomposer.org/
ググって調べてみると「パッケージ管理ツール」と紹介されているが、公式によると「Composer is not a package manager in the same sense as Yum or Apt are.」ということなので、パッケージ管理ツールではないようだ。
あくまでも「プロジェクト毎にライブラリの依存関係を管理するツール」らしい。
いろんなものを放り込んで試して見るためのサーバーだから、プロジェクトごとに管理してくれる方が有難い。
以下、インストール手順。
1.プロジェクトのディレクトリ作成
ここでいうプロジェクトは「開発するPHPアプリケーションのディレクトリ」という理解で良いと思う。
既にあるプロジェクトならそのディレクトリに移り、なければ新規に作成する。
とりあえず今回は、以下のコマンドで新規にディレクトリを作ったものとする。
$ mkdir /path/to/comp-test
$ cd /path/to/comp-test
2.composerの実行ファイルをダウンロードしてインストール
以下のコマンドでダウンロードし、インストール。
$ curl -sS https://getcomposer.org/installer | php #実行ファイルのダウンロード
$ php composer.phar init #新規プロジェクトの場合、これでcomposer.jsonというファイルを作る。
$ php composer.phar install #composer.jsonに依存関係を書いていれば、このコマンドで必要なパッケージをインストールしてくれる。
3.プロジェクトにライブラリを追加する
例えば、ロギング用のmonolog最新版を追加する場合。
*composerのコマンドを使って追加
$ php composer.phar require monolog/monolog
Using version ^1.22 for monolog/monolog
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
- Installing psr/log (1.0.2): Downloading (100%)
- Installing monolog/monolog (1.22.1): Downloading (100%)
(中略)
Writing lock file
Generating autoload files
composerのコマンドを使って導入したいライブラリを追加すると、自動的に依存関係もチェックしてくれるので、monologに必要な、psr/logというライブラリもあわせて導入してくれる。
また、composer.jsonファイルにも記述を追加してくれる。
*composer.jsonに直接記述
プロジェクトのcomposer.jsonファイルに以下のように、”require”キーでパッケージとバージョンを記述。
{
"require": {
"monolog/monolog": "^1.22"
}
}
なお、composer.jsonに記述しても、自動的にパッケージが更新されることはないため、一通り記述が終わったら、下記のコマンドを実行。
$ php composer.phar update
4.ライブラリを利用する
導入したライブラリをプロジェクトで実際に使用する場合、PHPのプログラムでincludeなりrequireなりを記述して呼び出さないといけないが、この手間をかなり省力化出来るようになっている。
composerを使って導入したライブラリは、必ずプロジェクトのディレクトリにある”vendor”ディレクトリの配下に置かれる。更に「vendor/autoload.php」というファイルも出来ているので、このファイルをrequireで読み込んであげればOK。
以下、サンプルコード。
require 'vendor/autoload.php';
$logger = new Monolog\Logger('logging_test');
$logger->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$logger->warning('hoge');
上記のサンプルコードだと、プロジェクトのディレクトリ内にapp.logというログファイルが生成される。
なお、プロジェクトのディレクトリに対して、apacheの書き込み権限が無いとエラーになるので注意。

コメント