頻繁に使っているけど実は基本がわかっていないという人の多いPHPのパッケージ管理ツールcomposer。今回は、composerを使ったパッケージ管理の基礎の基礎について説明を行います。本書の読み終えると自分で作成したPHPプログラム内でcomposerでインストールしたパッケージを使用できるようになります。

composerのもう一つの機能であるオートローダーの理解を深めたい人は下記の文書がおすすめです。

Composerのインストール

Composerでパッケージ管理をするためには、Composerのインストールを行わなければなりません。

インストールは非常に簡単なので、Composerのサイトにアクセスして、ダウンロード方法を確認しましょう。アクセスすると下記のような画面が表示されるので、中ほど右にあるDownloadのリンクをクリックしてください。

composerトップページ画面
ダウンロードの方法は変更されるので、最新版をインストールしたい場合は、Composerサイトに行って、毎回ダウンロード方法を確認して下さい。

composerの理解を深めるために使用するので、composer用のディレクトリを作成し、そのフォルダの内でダウンロードのページに記載されているコマンドを実行してください。ここではMACを使用し、デスクトップにcomposerディレクトリを作成し、その下で作業を行っています。2018/12/3時点でのインストール方法は下記となります。


$php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

インストールが完了するとコマンドを実行したディレクトリ内にcomposer.pharファイルが作成されます。


$ ls
composer.phar

拡張子pharはphpのarchive(アーカイブ)を表しています

インストールが正常に完了後、php composer.pharを実行してみてください。下記のようにコマンドの使用方法の情報が画面に出力されたら正常にインストールが完了しています。


$ php composer.phar
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.8.0 2018-12-03 10:31:16

Usage:
  command [options] [arguments]

composer.jsonファイルの作成

新規でcomposer.jsonファイルを作成し以下を記載してください。


{

}

composer.jsonを作成した後、composerのinstallオプションを実行します


$ ./composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

composer.jsonには、カーリーブレース以外何も記載していませんが、composer.phar installを実行した場所にvendorディレクトリが作成されます。

composerコマンドはcomposer.jsonファイルが存在するディレクトリでしか実行できません。composer.jsonファイルが見つからない場合は、エラーが発生します。

パッケージのインストール

composerのインストールが完了したら、パッケージのインストールを行ってみましょう。日付や時刻を操作するのに便利なCarbonをインストールします。

パッケージをインストールする際は、requireオプションを使用します。実行時のログを見るとcarbonのバージョンは2.7で、carbonの他にもpolyfill-mbstringやcontractsといったパッケージも同時にインストールしていることを確認することができます。また、先ほど何も記述していなかったcomposer.jsonも更新されます。更新されたcomposer.jsonにはCarbonの情報が追加されています。

パッケージをインストールする際、composer.jsonの内容に基づき依存関係のチェックを行い、必要なパッケージがあれば追加でインストールを行います。今回は、carbonを明示的に指定してインストールしましたが、それと依存関係にあるpolyfill-mbstring他3つのパッケージも同時にインストールしています。

$ ./composer.phar require nesbot/carbon
Using version ^2.7 for nesbot/carbon
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-mbstring (v1.10.0): Downloading (100%)         
  - Installing symfony/contracts (v1.0.1): Downloading (100%)         
  - Installing symfony/translation (v4.2.0): Downloading (100%)         
  - Installing nesbot/carbon (2.7.0): Downloading (100%) 

インストールしたパッケージを使用する

パッケージのインストールは完了したが、どうやってcarbonを呼び出して使用するのかわからないという人もいるかと思います。手順は簡単でphpファイルを作成(test.php)し、そのファイルに下記のように記述するだけで、Carbonを使用することができます。


<?php

require 'vendar/autoload.php';

use Carbon\Carbon;

echo Carbon::now();

requireでvendar/autoload.phpファイルを読み込まなければ、Carbonは実行できません。Class Carbon\Carbonのnot foundエラーが発生します。composerのもう一つの重要な機能であるオートローダーがここでは重要な役割を果たします。

実行すると時刻が表示されます。


$ php test.php
2018-12-04 10:30:44

追加のパッケージをインストールする

プログラムを作成していくと新しいパッケージを追加したい場合があります。その場合は、Carbonをインストールした時と同様にrequireオプションを実行すれば追加インストール可能です。

Carbonは時刻を操作するパッケージでしたが、今回は、ログを操作するmonologを追加インストールします。


$ ./composer.phar require monolog/monolog
Using version ^1.24 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.1.0): Downloading (100%)         
  - Installing monolog/monolog (1.24.0): Downloading (100%) 

インストールが完了するとcomposer.jsonも更新され、2つのパッケージの情報を確認することができます。


{
    "require": {
        "nesbot/carbon": "^2.7",
        "monolog/monolog": "^1.24"
    }
}

インストールしたパッケージCarbonとmonologを使って動作確認してみましょう。下記のプログラムは、現在の時刻をログファイル(your.log)に書き込むといった単純なものです。


<?php

require 'vendor/autoload.php';

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

$log = new Logger('composer');

$log->pushHandler(new StreamHandler(__DIR__ .'/your.log', Logger::WARNING));

$log->warning(Carbon::now());

実行後、作成したファイルと同じディレクトリにyour.logファイルが作成され、実行時刻が記述されています。


[2018-12-04 07:05:08] composer.WARNING: 2018-12-04 07:05:08 [] []

2つのパッケージをインストールしましたが、composerを利用すれば、簡単に追加したパッケージを使用できることが確認できたかと思います。

パッケージを更新する

パッケージの更新を行いたい場合は、composer updateを実行すると更新を行うことができます。


$composer update

インストール済みのパッケージを確認する

インストールされているパッケージを確認したい場合は、composer infoまたはcomposer showを実行すると確認することができます。


$composer info
$composer show

ここまで読み終えてくれた人はcomposerのパッケージ管理の基礎をしっかりと理解して頂けたかと思います。ぜひ、この知識をより複雑なパッケージ管理が必要なフレームワーク等にも生かしてください。