Composerのススメ(3)

By | 2013年10月11日

Packagistに続々とライブラリが登録されているのを見ながら、PEAR2/pyrusとは一体なんだったのか。。。と考えたり考えなかったりしているyukiです。

前回ではPackagist以外のリポジトリを指定する方法を説明しました。
今回はzipなどのアーカイブでしか配布されていないライブラリや、プロジェクト固有のソースをオートロードさせる方法を説明します。

Composerでそれらのライブラリをオートロードに追加するには、autoloadを設定します。
マニュアルではSchema#autoloadの部分になります。

autoloadで指定できるのは次の3つです。

  • psr-0
  • classmap
  • files

 

PSR-0

PSR-0はPHP-FIGが策定している、PHPの標準コーディング規約のことです。infinite loopさんが日本語に翻訳したものもあります。
PSR-0ではオートローダーのための構成に関することが定義されています。

PSR-0の指定はそこ定義されているネームスペースとディレクトリ構成の規則に従ってオートロードできるようにします。

 

ルートのネームスペースを指定する

Acme\Fooクラスをlib/Acme/Foo.phpから探せるようにします。

この指定でlib/Acme/以下から、Acmeというネームスペースをルートとして、PSR-0のディレクトリ構成に従いクラスをオートロードできるようになります。

 

 

Vendor\Namespaceとしてルートを指定する場合

Menue\Acme\Fooクラスlib/Menue/Acme/Foo.phpから探せるようにします。

 

PEARスタイルのライブラリの場合

Menue_Acme_Fooクラスをlib/pear/Menue/Acme/Foo.phpから探せるようにします。

 

グローバルネームスペースにクラスが存在する場合

\GlobalClassクラスをglobal/GlobalClass.phpから探せるようにします。
この時、GlobalClassはネームスペースとしても認識するので、GlobalClass\Fooglobal/GlobalClass/Foo.phpから探すことができます。

 

特定のディレクトリ以下がPSR-0スタイルの場合

lib/以下から、PSR-0に従ってクラスを探せるようにします。

 

また、パスの指定は配列で複数指定することができ、上記の例の時にsrc/にも同じ条件で探すことができるようにするには、次のように書くことが可能です。

 

Classmap

指定したディレクトリとファイルに定義されているクラスを全てマッピングします。
これはPSR-0でもPEARでもないライブラリに適用するためのものです。

次の例ではlib/以下とclasses.phpclasses.incに定義されているクラスをマッピングします。

 

Files

クラスではなくdefineだったりfunctionだったりを定義しているファイルを自動読み込みしたい場合に利用します。
内部的には指定したファイルをrequireしているだけです。

 

ComposerのオートロードはモダンなPSR-0スタイルから、旧石器時代の設定ファイルまで幅広く対応していることがお分かり頂けたでしょうか。

どんどんComposerを活用しましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です