Composer のインストールと使い方

公開日:2018-05-30

1. 概要

CakePHP で新規プロジェクトを作成する際に Composer を使用するため、Windows版の Composer をインストールします。
Composer は PHP のパッケージ管理ツールです。
PHP で使用できるパッケージ(ライブラリ)を簡単にインストールすることができます。
また、使用するクラスの php ファイルを自動的に読み込むオートローダーの機能も備えています。

注意:以下は Pleiades で Apache と PHP をインストールした場合のやり方です。


2. インストール

コマンドプロンプトを起動して、カレントディレクトリを php.exe がある場所に移動します。
コマンドプロンプト
cd C:/pleiades/xampp/php7
https://getcomposer.org/download/ にアクセスします。
「Command-line installation」と書かれた下に、phpで始まるコマンドが4行書かれていますので、これを全てコピーして、コマンドプロンプトで実行します。

おそらく以下のエラーが発生します。
エラー
PHP Warning:  copy(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Command line code on line 1
上記エラーが発生した場合には、 php.ini の 「;extension=openssl」と「; extension_dir = "ext"」の先頭の「;」を削除して、 設定を有効にしてください。

C:/pleiades/xampp/php7/php.ini
extension=openssl
extension_dir = "ext"
修正後、もう1度コマンド4行をコピーして実行してください。
C:/pleiades/xampp/php7 に composer.phar が作成されればOKです。
このファイルが Composer本体になります。
拡張子は phar で、複数のPHPファイルをまとめた形式となっています。

Composer は以下のようにして実行することができます。
実行すると Composer のバージョンが表示されます。
コマンドプロンプト
php composer.phar -V
Windows で実行する時は、先頭に php(php.exe) をつけます。
composer.phar をメモ帳で開くとわかりますが、先頭に「#!/usr/bin/env php」と入っているため、linuxでは最初の php を省略して実行できます。

3. 使用する準備

現在の段階で php と Composer を使うことができますが、 実行する際にカレントディレクトリを変更したり、ファイルをフルパスで指定する必要があるため、 以下2つのバッチファイルを作成します。

まずは PHP があるディレクトリにパスを通すためのバッチファイルです。
一時的にパスを通したい場合は、今回に限らずよく使います。
今後 MySQL もよく使うため、ついでに MySQL の bin にもパスを通します。
C:/pleiades/xampp/php7/cmd_for_php.bat
SET PATH=%PATH%;C:\pleiades\xampp\php7
SET PATH=%PATH%;C:\pleiades\xampp\mysql\bin
cmd /k
このバッチファイルを実行して表示されたコマンドプロンプトでは、どのディレクトリでも php を実行することができます。
バッチファイルの名前は何でもOKですが、「cmd.bat」にして実行すると無限ループに入るので注意してください。

次に、composer を簡単に実行するためのバッチファイルを作成します。
C:/pleiades/xampp/php7/composer.bat
php C:\pleiades\xampp\php7\composer.phar %*
「composer 引数」のようにして、composer を実行することができます。
composer.phar を使うフォルダに毎回コピーする場合には、このバッチは作らなくても問題ありません。

cmd_for_php.bat を実行して、カレントディレクトリを適当な場所に移動して、 「composer -V」を実行してバージョンが表示されればOKです。

4. 使用方法

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

Composer でインストールできるライブラリは、https://packagist.org/ から検索できます。
試しに「log」で検索してみます。
monolog/monolog と言うのが見つかりました。
これをインストールしてみます。
monolog/monolog の詳細ページを見ると、1.23.0 が最新バージョンとなっていました。
これを Composer を使ってインストールするには、以下のようにします。
コマンドプロンプト
php composer.phar require monolog/monolog
実際にやってみます。
まず C:/pleiades/xampp/htdocs 配下に、プロジェクト用のフォルダを用意します。
普通にフォルダを作成するだけでOKですが、もし今後 Eclipse を使う場合は、 Eclipse でインポートする必要が出てくるため、 先に Eclipse で新規のPHPプロジェクトを作成してください。
プロジェクトを作成すると、htdocs 配下にプロジェクト名のフォルダが作成されます。
今回は test にしたので、C:/pleiades/xampp/htdocs/test/ が作成されています。

次に cmd_for_php.bat でコマンドプロンプトを開いて以下のコマンドを実行します。
コマンドプロンプト
cd C:/pleiades/xampp/htdocs/test/
composer require monolog/monolog

正常に実行できると、以下のようなフォルダ構成になります(Eclipseのファイルは除く)。
これでパッケージのインストールは完了です。
フォルダ構成
C:/pleiades/xampp/htdocs/test
├─ composer.json
├─ composer.lock
└ vendor
   ├─ composer
   ├─ monolog
   ├─ psr
   └─ autoload.php

composer.json は、以下のようになっています。
composer.json
{
    "require": {
        "monolog/monolog": "^1.23"
    }
}

試しに、monolog を使ってみます。
下記の php ファイルを作成します。
C:/pleiades/xampp/htdocs/test/test.php
<?php
  require_once 'vendor/autoload.php';

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

  $logger = new Logger('test');
  $stream = new StreamHandler('test.log');
  $logger->pushHandler($stream);
  $logger->debug('debug');
?>
OK
apache を起動して、 http://localhost/test/test.php にアクセスすると、test.log が作成されます。

Composer でインストールしたパッケージを使う場合、 最初に vendor/autoload.php を読み込みます。
あとは使いたいクラスを use を使って指定するだけで、 自動的にクラスを定義したファイルが読み込まれます。
自分で require_once などで読み込む必要はありません。


2. パッケージの再インストール

Composer を使ってパッケージをインストールすると composer.json が作成されますが、
これを使ってパッケージをインストールすることができます。
新しい環境で同じパッケージをインストールする場合に便利です。

試してみます。
まず、vendorフォルダ、composer.lock を削除します。composer.json は残します。
次に cmd_for_php.bat でコマンドプロンプトを開いて以下のコマンドを実行します。
コマンドプロンプト
cd C:/pleiades/xampp/htdocs/test/
composer install
実行すると、またインストール時と同様に、vendorフォルダと composer.lock が作成されます。

3. パッケージのアップデート

composer update で、composer.json に書かれているパッケージをアップデートしてくれます。

試してみます。
古いバージョンの Monolog をインストールするため、 testフォルダ配下の vendorフォルダ、composer.json、composer.lock を削除します。
Monolog の古いバージョンをインストールします。
最後に「:バージョン」をつけると、バージョンを指定してインストールすることができます。
コマンドプロンプト
composer require monolog/monolog:1.15.0

インストールされたバージョンを確認するために、 バージョン情報が書かれたファイルを探します。
test/vendor/monolog/monolog/CHANGELOG.md に履歴情報が書かれてました。
先頭が 1.15.0 となっているので、指定した古いバージョンがインストールされていることがわかります。

次に以下のコマンドを実行します。
コマンドプロンプト
composer update
または
composer update monolog/monolog

すると、最新バージョンがあるにも関わらず、
実行結果
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
と言うメッセージが表示され、アップデートすべきものがないと言われます。
先ほど確認した CHANGELOG.md ファイルを見ても、アップデートされた形跡はありません。

composer.json を確認すると、以下のようになっています。
composer.json
{
    "require": {
        "monolog/monolog": "1.15.0"
    }
}
バージョンを指定しないでインストールした場合は、
「"monolog/monolog": "^1.23"」のように、
バージョンの前にキャレット( 顔文字の目にあたる部分(^^;) )が付いていましたが、
今回は付いていません。

試しに、「^」を付けて、composer update を実行してみます。
composer.json
{
    "require": {
        "monolog/monolog": "^1.15.0"
    }
}
実行結果
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
  - Updating monolog/monolog (1.15.0 => 1.23.0): Loading from cache
Writing lock file
Generating autoload files
正しく 1.23.0 にアップデートされたようです。
CHANGELOG.md を見ると、確かに最新バージョンの履歴情報が追記されています。

どうやら、バージョンを指定してパッケージをインストールすると、
update をしてもバージョンが上がらないようです。

ちなみに、インストール時に「composer require monolog/monolog:1.*」のようにワイルドカードでバージョンを指定することも可能です。
この場合、composer.json にも "monolog/monolog": "1.*" と書かれるため、 composer update をすることで、常に最新の状態にすることができます。
但し、常に最新の状態にすることが良いとは限らないため、注意が必要です。

4. パッケージのアンインストール

インストールしたパッケージをアンストールする場合は、以下のコマンドを実行します。
コマンドプロンプト
composer remove ベンダー名/パッケージ名
例えば、monolog を削除する場合は、以下のようにします。
コマンドプロンプト
composer remove monolog/monolog