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 が人力で頑張るのが好きなのは分かるけど、自分はこんなところで頑張りたくないんだよねぇ。

More