CPANを使い始めにくいって聞いた

このまえのブログ合宿で
「CPANのモジュールをインストールとか訳がわかんない」
と聞いて、あー、確かに昔は訳が分からなかったなーと思った。
今も分かってない部分は多いですけど。

Perlを始めたころに困ったのは、サンプル集に「use XML::Simple」と
気軽に書いてあるのでuseしてみたら、XML::Simpleなんて見つからないよ
とエラーメッセージが出てしまったことかな。
研究室のPCだとモジュールが入っていたけど、
自分の環境にはモジュールが入っていなかったみたい。

そもそも、そのころはCPANモジュールが足りないことも分からなくて
本当に困り果ててBlog Hacksを読んだ気がする。
そのころはプログラミング言語を勉強するためには、
仕様を書いてある本を読みまくれ!なんて分かっていても手が出なかった。
とくにPerlの場合は「プログラミングPerl」を見ると、
あの分厚さと2冊に分かれているのとでノックアウトですよ。
ということで、CPANについてBlog Hacksを読んで軽く理解して、
「perl -MCPAN -e shell」した気がするな。

で、まず最初にBundle::CPANを入れろ!って英文で表示されたから、
「install Bundle::CPAN」してみた。訳も分からずに。
そしたら、あとはyes!yes!って言っているうちにモジュールが
インストールできたみたいだった。
このときに、「install モジュール名」って書くと
モジュールがインストールできるっぽいことに気がついた。

で、問題のXML::Simpleをインストールしようとしたら、
やっぱり怒られてしまうので困った。
仕方が無くメッセージを精読してみると、
必要なライブラリがインストールされていないことに気が付いた。
「ライブラリ名....no」とか表示されたあとエラーが出まくってたし。
ということで、ライブラリが足りないときには
apt-get installしたり、ソースからコンパイルして、
CPANモジュールが利用しているライブラリを入れるんだと気が付いた。
ライブラリが足りないときのエラーメッセージは、特徴的なので
そのまま検索エンジンに突っ込むと、どんなライブラリに関する
メッセージなのかが分かったりした。

あとは、CPANモジュールが足りないってエラーが出るときが
あるんだなと気が付いた。hoge::fugaがnot foundだよ見たいなエラーが
でたら、その見つかっていなモジュールをinstallしてみて、
そのモジュールもエラーを吐いたらそれを解決して・・・と
芋づる式にエラーを解決する方法を学習した。

ところが、そんなことではどうにもならない場合があることに気が付いた。
どういう場合かというと「必要なものはすべて揃っているけど、
テストがちゃんと動作しないから駄目」という場合だ。

こういうときのエラーメッセージも特徴的だから、
検索エンジンに突っ込んでみると、悩んでいる人は結構多い。
で、よく「force install」すれば解決すると書いてある。
そのころにforceっていう無理やりインストールするオプションが
あるんだなと分かった。

じゃ、見た目には必要なライブラリは揃っていて、
テストだけが上手くいかないときにはforceを使えば良いのかというと、
そういうものでも無いことに気が付いた。
キッカケは、他の人が「force insatall」するしかなかったという
モジュールを普通にインストールできたことを発見したときだった。
まったく同じOSで、こういうことが起きるということは、
私とその人でインストール済みのモジュールやライブラリが違うってこと。
つまり、見た目に良く分からない場合でも、apt-getで何かを
追加すれば解決できる問題も多そうだということに気が付いた。

このころには、テストを順番に読むのが面倒だと思いつつ、
ちゃんとエラーでこけっ放しのテストは読むようになった。
テストを読むと、エラーが絶対にでるから無視すれば良い場合と、
エラーが出るわけがないから出ていたら困る場合があることに気が付いた。
エラーが出るわけが無い場合は解決方法を探さなきゃいけなくて、
テストが悪いと分かった場合にはforce installすればいいって分かった。

いくつもモジュールのエラーを解決するうちに、
本当にお手上げのときもあることに気が付いた。
こういうときにはどうしたらいいんだろう。
解決方法は今のところ3パターンあって、以下のとおり。

- 環境ごとにパッケージ化されているPerlモジュールをインストールする
- とりあえずforce installする
- OSを最近のものに入れ替える。情報が多いOSに乗り換える。

どうしてもインストールできないモジュールを手軽にインストールするには
境ごとにパッケージ化されているPerlモジュールをインストすればいい。
Debianだと「hoge::fuga」モジュールは「libhoge-fuga-perl」という
名前になっていることが多い。とりあえずで解決するには丁度良い。

パッケージ化されているPerlモジュールがない場合もある。
本当に調べつくして、試しつくしたのならforce instalしてもいいかも。

私が最近困った事例としては、1年くらい試行錯誤して使っているうちに、
環境全体が汚れてしまって、ネットで調べても事例の見つからない
エラーが頻発するようになるという状況に陥ったこと。
自分ひとりだけが、そのエラーと戦っているような気分がしたときには、
一回OSを入れ替えて見ると良いかもしれない。
もちろん無駄だったときに、戻れるようにスペアマシンで試すんだけど。
私はDebian Sargeからtestingに乗り変えたら、嘘のようにエラーが起き
なくなった。
それまではmod_perl2のコンパイルがちゃんとできなくて悩んだりしてた。

CPANって分かりづらいよなーと思って、
頭にあることをツラツラかいてみたけれど、
分かったことはCPANを使うこと = エラーと積極的に戦うことなのかも。
CPANは便利だけど大変だよなー、ってことでPHPが流行したりするのは
なんとなく分かったりするけど、じゃあ何でPythonは流行らないんだろう。
ま、いいや。ともかくCPANは今でもよく分からないことが多い。
たぶん自分がモジュールの作者になると、見えてくることがあるんだろうな。
ということで、最近はモジュールの作者になりたいなと思ったりしている。

全然オチないっすよ。これ。もういいや。おしまい。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック() |