2021-06-14に投稿

[Composer] classmapの使い方

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についてのメモでした。

ツイッターでシェア
みんなに共有、忘れないようにメモ

stk2k

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント