Composer の使い方

Composer は、PHPのライブラリの依存管理をするためのツールです。

  • コマンドで簡単に必要なライブラリをインストール、アップデートすることができる
    (必要なライブラリが別のライブラリを必要としている(依存している)場合でも、自動的に調整してくれる)
  • たくさんのライブラリや自作クラスを使う場合でも、 設定によって require 文を1行で済ませることができる

という特長があり、PHP 5.3.2 以上で使用することができます。

Composer

このページでは、バージョン 1.4.2 時点での Composer の基本的な使い方を説明します。

Composer のインストール (Windows)

Windowsの場合、Composer-Setup.exe からインストーラをダウンロードし、実行することでインストールができます。

※ あらかじめ、XAMPP などで PHPをインストールしておく必要があります。
※ Windows 10の場合、 C:\ProgramData\ComposerSetup\bin に Composer がインストールされ、PATH が設定されます。

使用するフォルダ内での Composer の設定

Composer を使用するフォルダには、composer.json という設定ファイルを用意する必要があります。

例えば、TCPDF を使用したい場合は、使用するプロジェクトフォルダ内に composer.json ファイルを作成し、下記のように記載します。

{
    "require": {
        "tecnickcom/tcpdf": "^6.2"
    }
}

require に使用するライブラリを指定します。(左側はライブラリ名、右側は必要なバージョンです。ライブラリ名は、基本的には Packagist にある名称です。"^6.2" は、6.2以上7.0未満までを意味します)

そのあと、コマンドで composer install としてライブラリをインストールします。(composer.json を手書きして composer install をする代わりに、コマンドで composer require tecnickcom/tcpdf とすることもできます)

Composer でインストールしたライブラリを使用する

composer installcomposer require を行うと、vendor というフォルダにライブラリファイルが格納されます。

vendor フォルダには autoload.php というファイルがあり、この1ファイルを読み込んでおくことでインストールしたライブラリが使用できるようになります。

<?php
require __DIR__ . '/vendor/autoload.php'; // composerが生成した vendor/autoload.php を読み込む


// ここから TCPDF を使用したコード (クラスを使用するタイミングで自動的にクラスファイルが読み込まれます。(オートロード))

$pdf = new TCPDF('P', 'mm', 'A4'); // 縦、mm単位、A4
$pdf->setPrintHeader(false); // ヘッダー非表示
$pdf->setPrintFooter(false); // フッター非表示
$pdf->SetFont('kozgopromedium', '', 14); // 小塚ゴシック 14pt
$pdf->AddPage(); // ページ追加

$txt = 'PDF出力のテストです。';
$pdf->Write(0, $txt);
$pdf->Output(__DIR__ . '/test.pdf', 'F');

自作クラスを Composer のオートロードの仕組みに読み込む

自作のクラスも Composer の仕組みを通してオートロードすることができます。

例えば、src/Foo.phpsrc/Bar.php というクラスファイル (App という名前空間でクラス定義している) を読み込みたい場合は下記のように autoloadpsr-4 にフォルダを指定します。

{
    "require": {
        "tecnickcom/tcpdf": "^6.2"
    },
    "autoload": {
        "psr-4": {"App\\": "src/"}
    }
}

App\Foo クラスが使用された場合は src/Foo.phpApp\Sub\Baz クラスが使用された場合は src/Sub/Baz.php が読み込み対象になります。

名前空間を使用していない場合は、下記のように autoloadclassmap にフォルダを指定します。

{
    "require": {
        "tecnickcom/tcpdf": "^6.2"
    },
    "autoload": {
        "classmap": [
            "src/"
        ]
    }
}

psr-4classmap を一緒に使用することもできます。
※ autoloadの書き換えた部分を反映させる場合は、コマンドで composer dump-autoload を実行します。

参考