ライブラリとは、主にクラスモジュールと、その依存する一連の塊を指します。

UNICORNのライブラリ管理はpackage.xmlと言うXMLファイルで管理するようになっています。

また此処に定義されたライブラリと一致するクラス名のクラスを利用する場合、オートローダーによってオートロードされます。

requireincludeは必要ありません。


package.xmlは以下の場所に存在します。

/[Your Directory Path]/lib/FrameworkPackage/coe/package.xml

configと同様、Project毎のpackage.xmlもあります。

/[Your Directory Path]/lib/[Your Project Name]Package/coe/[Your Project Name].package.xml

ライブラリの自動読み込みが解決される順番も、configと同様Project毎のpackage.xmlからになります。


何故Package.xml

package.xmlはクラスモジュールの組み合わせや、 命名 を定義するファイルになっています。

これはつまり、 package.xmlで定義されたライブラリpackage.xmlで差し替えや名前の変更が出来る。」 と言う事と意味しています。

これは、UNICORNの代表的な機能で、大きな特徴の一つです。

実際にどのような仕組みになっているかを見ていきます。

// あるPHPファイルが、Sessionクラスを利用しています。
$lastAccess = Session::get('last_access');

Sessionライブラリはpackage.xmlで以下のように定義されています。

/[Your Directory Path]/lib/[Your Project Name]Package/coe/[Your Project Name].package.xml
<Session>
	<package>DBO</package>
	<link>default.interface.Session/SessionIO</link>
	<link>default.abstract.Session/SessionDataDB</link>
	<link mapfrom="SessionDB" mapto="Session">default.implement.Session/SessionDB</link>
</Session>

Sessionライブラリは

  • DBOと言う別のライブラリをpackeageとして利用している
  • SessionIOと言うインターフェースを利用している
  • SessionDataDBと言うクラスファイルを利用している
  • SessionDBと言うクラスファイルを利用している
  • さらに、SessionDBと言うクラスからSessionと言うクラスにmapしている

一番最後の行のmaptoが特徴的です。

SessionDBと言うクラス名のクラスがmaptoにより、実装上ではSessionとして利用されています。

このように、package.xmlを使うことで、クラスを自動ラップして、新しいクラスにmapする事が出来ます。


Sessionクラスは現在はSessionDBと言うデータベースを利用したSessionクラスが定義されていますが

では逆に、全く異なる仕組みのSessionクラスに差し替えて見ます。

Sessionライブラリの定義をpackage.xmlで変えてしまうだけでライブラリの中身を差し替える事が出来ます。

<Session>
	<package>MCO</package>
	<link>default.interface.Session/SessionIO</link>
	<link>default.abstract.Session/SessionDataMemcache</link>
	<link mapfrom="SessionMemcache" mapto="Session">default.implement.Session/SessionMemcache</link>
</Session>

これでSessionライブラリはMemcacheを利用したライブラリに差し替える事が出来ます。


この機能が最大の効果を発揮するのは、 外部ライブラリの変更を後から余儀なくされた場合 です。

通常の開発フローであれば、ラッパークラスを新たに作ったり、利用する側のクラス名をリファクリングするなどの

小中規模の変更が必要になるケースが殆どですが

UNICORNのこの package.xmlによるライブラリ管理 なら、 変更する場所は一箇所で、しかも素早く変更出来ます。

クラス名を変更するだけのラッピングであれば自動で行ってくれるからです。