Composerの使い方


Composerとは

PHPのライブラリ管理ツールです。
ライブラリAを使用するためには、別のライブラリBを先にインストールする必要がある、なんてことがあります。
この時、ライブラリAはライブラリBに依存している、と言います。
Composerを使用することで依存関係にあるライブラリをまとめてインストールすることができます。

Composerのインストール

Composerの公式サイトにアクセスして、Downloadをクリックしましょう。
各環境に合わせたインストール方法が表示されます。

Composer公式サイト
https://getcomposer.org/

Macならbrewで簡単にインストールできます。
% brew install composer

インストールが完了したら-Vコマンドで正常にインストールされたことを確認しましょう。

% composer -V
Composer version 1.7.2 2018-08-16 16:57:12

Composerのセットアップ

Composerを使用するにはcomposer.jsonファイルを作成する必要があります。
composer.jsonは、プロジェクトにインストールしたいライブラリ情報を記述するファイルです。

composer.jsonはプロジェクトごとに作成します。

まずは、プロジェクトディレクトリを作成しましょう。

% mkdir composer_project
% cd composer_project

次にcomposer.jsonファイルを作成し、以下のように記述します。

composer_project/composer.json
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

"require"の後に、パッケージ名:バージョン番号で、インストールしたいライブラリを指定します。
今回はロガーライブラリであるMonologをインストールしてみましょう。
別のライブラリについてはPackagist(Composerリポジトリ)を参照します。

Packagist
https://packagist.org/

ライブラリのインストール

ではmonologをインストールしましょう。
インストールするにはcomposer installコマンドを使用します。

% composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing monolog/monolog (1.0.2): Downloading (100%)
Writing lock file
Generating autoload files

インストールが完了したら何が変わったのか見てみましょう。
以下の要素が追加されていると思います。

  • vendorディレクトリ
  • composer.lock

vendorディレクトリにはインストールしたライブラリが保存されます。
vendor/monolog/monologディレクトリにライブラリが保存されているのを確認できると思います。

バージョン管理ソフトで管理する場合、vendorディレクトリは外すと良いでしょう。

composer.lockファイルは実際にインストールされたライブラリを記録しています。
composer.jsonはライブラリのバージョンをワイルドカードで指定することもできるため、composer.lockの内容と必ずしも一致しません。
ほかのプロジェクトメンバーに共有する場合は、composer.jsonとcomposer.lockのどちらも共有する必要があります。

オートローディング

インストールされたライブラリはオートローディング機能を用いて、自動的に読み込ませることができます。

require 'vendor/autoload.php';

これでcomposer.jsonに記述されている全てのライブラリが読み込まれました。

Monologを使用してみる

では、読み込まれたMonologを使用してみましょう。

composer_project/Sample.php
<?php
require("vendor/autoload.php");

use \Monolog\Logger;
use \Monolog\Handler\StreamHandler;

// ロガー作成
$logger = new Logger('sample');
$logger->pushHandler(new StreamHandler('logs/sample.log', Logger::INFO));

try {
  // INFOログ出力
  $logger->info('情報ログ');

  // 例外発生
  throw new RuntimeException('ランタイム例外が発生しました。');

} catch (RuntimeException $e) {
  // ERRORログ出力
  $logger->error($e->getMessage());
}

sample.logファイルを見てみましょう。

logs/sample.log
[2018-10-26 08:30:51] sample.INFO: 情報ログ [] []
[2018-10-26 08:30:51] sample.ERROR: ランタイム例外が発生しました。 [] []

これでログ出力できるようになりました。

参考