SpycはなぜPearパッケージ化しないのだろう
※ 2010年3月現在の話。
思い出したように Pear パッケージの話を書くけど、個人的に
どうして PHPer は Pear パッケージを積極的に利用しないのか理解できない
状態が続いている。
これは pear.php.net channel のパッケージをインストールして使うという意味じゃなくて、
せっかく作ったライブラリをなぜ Pear パッケージ化しないのか
という意味ね。分かりやすい例は
spyc - Project Hosting on Google Code
じゃないかな。
これはたぶん PHP でいちばん有名な YAML ライブラリなんだけど、このライブラリは Pear パッケージになっていないので、いろんなプロジェクトで勝手に収録している状態になっている。ライセンス的に問題ないなら別にいいんじゃないの?と思うかもしれないけど、違う。
いろんなライブラリ、いろんなフレームワークが個別に spyc.php を収録すると、require 可能な spyc.php が複数存在する
ことになってしまう。これ、
require_once による再読み込み防止機能が利かず、Cannot redeclare class という Fatal Error が起きやすくなる
というアブナイ状態なのだ。Fatal Error がひとたび起きたらアプリを実行することはできない。つまり画面は真っ白さ。怖いでしょ?
勝手収録するなら spyc.php 本体を直接呼ばせず、代わりに require するためのファイルを用意してその中で
if ( !class_exists( 'Spyc' ) ) {
require '/path/to/spyc.php';
}
みたいに気をつけて書かなきゃいけなくなる。まぁ PHP らしいっちゃ PHP らしいんだけど、これってけっきょく紳士協定だから、守ってないアプリがあればすぐに破綻するのです。
あるいはもう Pear パッケージ化しないライブラリは最初から
if ( !class_exists( 'Klass' ) ) {
class Klass {
...
}
}
で定義するよう義務づけるとか? 義務って書いちゃうと反感買うかな。優しさって言えばいい?
でも本当は、Pear パッケージ化してちゃんとインストール先のパスを意識してあればこんなのは問題でもなんでもない。PHPer が人力で頑張るのが好きなのは分かるけど、自分はこんなところで頑張りたくないんだよねぇ。