📝

[Composer] classmapの使い方

2021/06/10に公開

Zenn初記事!

お手柔らかにどうぞ。

composerとは

いわずもがな、PHPの標準と言ってもいいパッケージ管理ツールです。インストール方法や使い方はこちらを参照してください。

PHPのライブラリ管理ツール「Composer」入門
composerとは

こういう人向けの記事です

composer.jsonを書いてライブラリ等を公開したい人向け。利用するだけの人はあまり関係ないかも。

classmapが分からなかった

composerにクラスマップ作ってくれそうな機能ないかなと思って探したらあった。でも使い方がいまいちわからなかったので調査。

classmapの書式

{
    "autoload":{
        "classmap": ["src/", "something.php"]
    }
}

試しにクラスを置いてみる

--- proj_root
       ├ src
       │  ├ MyClassA.php
       │  └ MyClassB.php
       └ MyClassC.php

各クラスの中身はこんな感じ。

<?php
class MyClassA {}

composer.jsonはこんな感じ。

{
    ...(省略)...
    "autoload":{
        "classmap": ["src/", "MyClassC.php"]
    }
}

以下のコマンド実行するとオートローダーのクラスマップが生成されます。

composer update

オートローダーのクラスマップ出力先はvendor/composerディレクトリ以下の「autoload_classmap.php」です。

-vendor
  └ composer
       ├ autoload_classmap.php
       └ ...

このファイルの中身はコマンド実行後以下のようになっています。

<?php
...(省略)...
return array(
    ...
    'MyClassA' => $baseDir . '/src/MyClassA.php',
    'MyClassB' => $baseDir . '/src/MyClassB.php',
    'MyClassC' => $baseDir . '/MyClassC.php',
);

$baseDirの中身はプロジェクトのルートディレクトリになります。つまり、クラス名からクラスファイルへのマップ配列(クラスマップ)が設定されたことになります。

classmapはコマンド実行時に生成される固定マップである

クラスマップは対象ディレクトリへクラスファイルを配置した後、composer updateする必要があることがわかります。つまり動的ではありません。

コマンドライブラリやプラグインライブラリのような実行時にならないとクラスファイルが確定しないライブラリの場合上記composerクラスマップでは対応できません。もしくはクラスファイルを配置後、毎回composer updateを実行する必要があるでしょう。

そのような場合は別途自前のクラスローダーを実装するとよいでしょう。

以上、composerのclassmapについてのメモでした。

Discussion