CPAN 初級

CPAN を使えば Perl はもっと便利になる

CPAN とは

Perl に様々な機能を追加する「モジュール」を簡単にインストールする システムのことである。 基本的には
  1. ネット上の CPAN サーバにあるモジュールのファイルをダウンロードし
  2. コンパイルして
  3. インストールする
  4. モジュール同士の依存関係があればそれも同時に取ってくる
という最近ありがちなことをやってくれる。 同様なものに Debian の apt とかがあるが、CPAN の歴史は割と古い方だろう。 非常に便利だ。

詳しくはコマンドラインで「perldoc CPAN」とすればいろいろ教えてくれる。


まずは使ってみよう

準備作業
# which lynx
/usr/bin/lynx
# export ftp_proxy=http://proxy.you.com:8000/
# export http_proxy=http://proxy.you.com:8000/
はじめのコマンドは、ダウンロードに使うテキストブラウザ Lynx があるかどうかを確認している。 今時の PC-UNIX ならたいていあるので心配は不要。 二番目、三番目のコマンドは Lynx が使う FTP/HTTP のプロキシサーバを指定している。 直接インターネットに接続できる場合は不要。
# perl -MCPAN -e shell
ここからが CPAN の始まり。 初めて起動したときはいろいろ聞いてくるので
Are you ready for manual configuration? [yes] 
ここでリターンを押して答えていこう。
CPAN build and cache directory? [/root/.cpan] 
Cache size for build directory (in MB)? [10] 
Perform cache scanning (atstart or never)? [atstart] 
Policy on building prerequisites (follow, ask or ignore)? [follow] 
ここら辺は特に問題がない限り、デフォルトのままで良い。
Where is your gzip program? [/usr/bin/gzip] 
Where is your tar program? [/usr/bin/tar] 
Warning: unzip not found in PATH
Where is your unzip program? [] /usr/bin/unzip
Where is your make program? [/usr/bin/make] 
Where is your lynx program? [/usr/bin/lynx] 
Warning: ncftpget not found in PATH
Where is your ncftpget program? [] 
Warning: ncftp not found in PATH
Where is your ncftp program? [] 
Where is your ftp program? [/usr/bin/ftp] 
What is your favorite pager program? [less] 
What is your favorite shell? [/bin/bash] 
ダウンロードとかに使うプログラムの在処を聞いてくる。 ないとまずいのは「gzip, tar, make, lynx」くらいで、あとはなくても良い。 ない場合はそのままリターンを押す。
Parameters for the 'perl Makefile.PL' command? [] 
Parameters for the 'make' command? [] 
Parameters for the 'make install' command? [] UNINST=1
Timeout for inactivity during Makefile.PL? [0] 
ここで入力するのは三つ目の「UNINST=1」である。 これは「すでに同じ名前のモジュールがインストールされていたりして、 競合が起きる場合はすでにある古い奴を消す」という意味である。 だいたい、Perl 本体にも付属するモジュールを改めて CPAN から入れようとした場合に起こる。
Your ftp_proxy? [http://proxy.you.com:8000/] 
Your http_proxy? [http://proxy.you.com:8000/] 
Your no_proxy?  
環境変数に入れておけばここら辺はデフォルト表示してくれるので、 そのままリターン。
これが済むと直ちに CPAN サーバを探しに行く。
(1) Africa
(2) Asia
(3) Central America
(4) Europe
(5) North America
(6) Oceania
(7) South America
Select your continent (or several nearby continents) [] 2

(1) China
(2) Hong Kong
(3) Indonesia
(4) Israel
(5) Japan
(6) Saudi Arabia
(7) Singapore
(8) South Korea
(9) Taiwan
(10) Thailand
Select your country (or several nearby countries) [] 5
CPAN サーバはあちこちでミラーされているので、近くのものを選ぶ。 日本にお住まいなら普通は「アジア→日本」だろう。
(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/
(2) ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
(3) ftp://ftp.kddlabs.co.jp/CPAN/
(4) ftp://ftp.meisei-u.ac.jp/pub/CPAN/
(5) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
(6) ftp://ftp.u-aizu.ac.jp/pub/lang/perl/CPAN/
(7) ftp://mirror.nucba.ac.jp/mirror/Perl/
Select as many URLs as you like [] 1

Enter another URL or RETURN to quit: [] 
すると、国内のサーバ一覧が出てくるので、これも近そうなのを選ぶ。
RING SERVER の場合、 シンボリックリンクがちゃんとミラーできていない サイトがたまにあるので 漠然と ring.gr.jp を指定するのではなく、ちゃんと特定のサーバにあるかどう か確認した後に、例えば ftp://core.ring.gr.jp/pub/lang/perl/CPAN/ などと手で書いた方がいい。

ここでの設定は /usr/lib/perl5/CPAN/Config.pm (ファイルの場所は環境によって変わる)に保存される。


では、何を入れよう

設定が終わると、今し方指定したサーバから情報をダウンロードして、
cpan>
というプロンプトが表示されて、インストールなどができる状態になる。 何を入れても良いけど、身近な見本として、Jcode を入れてみよう。
cpan> install Jcode
これだけ。あとはダウンロードからインストールまで勝手にやる。マニ簡単。 「準備作業にずいぶんページを食ったじゃないか」 と思われるかもしれないが、それは最初の一回だけだ。

終了は CTRL-D もしくは q である。


お勧めモジュール

cpan> install Bundle::LWP
libwww-perl は WEB などを扱う各種のモジュールを入れてくれる。 この「Bundle::なんたら」という名前のやつはいくつかのモジュールをひとまとめに したモジュールのことである。 別に「install LWP」とやっても依存関係を処理してくれるのでわざわざ まとめるまでもなかろうと思うかもしれないが、 「Bundle::なんたら」の場合は「必須の」依存モジュールに加えて ちょっと「おまけ、便利だからお勧めするよ」なモジュールも入れてくれるので便利だ。
LWP を入れたら一旦 CPAN を終了させてみよう。 次回からはダウンロードに Lynx じゃなくて、LWP を使うようになる。 こっちの方が Perl ユーザらしい。
cpan> install Bundle::CPAN
cpan> reload CPAN
CPAN ユーザのためのいろいろなモジュール。 reload で今入れたばかりのモジュールを有効にする。 これを入れると、上下のカーソルキーでコマンドヒストリーを使うことができるようになったりする。 さらに、ダウンロードしたファイルの解凍に tar, gzip の外部コマンドを使わずに、 Perl のモジュールを使うようになる。

cpan> install Crypt::SSLeay
OpenSSL が入っている場合はこれも入れよう。 LWP で SSL サイトにアクセスできるようになる。


Back to INDEX
September 07, 2007
yada@no_spam@fuji.sakura.ne.jp