本文へスキップ
BecomeCoder

PHPコース · 第8章 モダンPHPと道具 · レッスン29

Composer とオートロード ― パッケージ管理の基本

ローカル実施

導入

これまでのレッスンでは、1つのファイルに書いたコードだけで完結していました。しかし実務では「他の人が作った便利な部品(ライブラリ)を使う」「自分のコードを複数のファイルに分けて整理する」ことがほとんどです。それを支えるのが Composer(コンポーザー) というツールです(ブラウザの中ではComposerを実行できないため、この章は読み物として進みます)。

説明

Composer は PHP のパッケージ管理ツールです。プロジェクトの直下に composer.json というファイルを置き、必要なライブラリと、そのバージョンを書いておきます。

{
    "require": {
        "guzzlehttp/guzzle": "^7.0",
        "monolog/monolog": "^3.0"
    }
}

"^7.0" は「7.0以上、8.0未満」を意味するバージョン指定です(セマンティックバージョニングというルールに基づきます)。ターミナルで次のコマンドを打つと、指定したライブラリとその依存先が自動でダウンロードされます。

composer require guzzlehttp/guzzle

ダウンロードされたライブラリは vendor/ フォルダに置かれ、実際に使ったバージョンの記録が composer.lock に残ります。composer.lock をチームで共有すれば、誰の環境でもまったく同じバージョンのライブラリが使われることが保証されます。

コードから使うには、ファイルの先頭で vendor/autoload.php を読み込みます。

<?php
require __DIR__ . "/vendor/autoload.php";

use GuzzleHttp\Client;

$client = new Client();
$response = $client->get("https://example.com");
echo $response->getStatusCode(), "\n";

vendor/autoload.php を1回読み込むだけで、Composer で入れたライブラリの use 文がすべて使えるようになります。これはオートロードという仕組みのおかげです。

PSR-4 は、PHPコミュニティで定められた「名前空間とフォルダ構成の対応ルール」です。多くのライブラリやフレームワークがこのルールに従っているため、Composer はクラス名からファイルの場所を自動的に特定できます。

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

この設定では、名前空間 App\Utils\Formatter のクラスは src/Utils/Formatter.php に置く、というルールになります。名前空間(レッスン27)のグループ名が、そのままフォルダの階層と対応するイメージです。ファイル名を1つずつ require して回る必要がなくなり、use App\Utils\Formatter; と書くだけで、Composer が自動的に該当ファイルを読み込んでくれます。

演習

(読み物のため自動判定はありません)手元にComposerをインストールできる人は、空のフォルダで composer init を実行して composer.json を作り、composer require monolog/monolog のような小さなライブラリを1つ導入してみましょう。vendor/ フォルダに何が生成されるか、composer.lock にどんな情報が書かれているかを覗いてみると、実務での役割がつかめます。