Perlと本気で向き合いたくない人のためのPerl5実行環境構築

# Perlと本気で向き合いたくない人のためのPerl5実行環境構築

非PerlプログラマがとりあえずいろいろCPANモジュールを必要とするPerlプログラムを走らせるための環境構築法について書きます。

以下のような方を対象としています。

* Perlが嫌いな方
* Perlは時代遅れなので即刻滅ぶべきと思っている方
* `@_`とか見るとヘドが出そうになる方
* にも関わらず、 **のっぴきならない理由からPerlプログラムを使わないといけなくなってしまった方**

なお、ここでは"Perl"とはPerl5のことを指します。

## Perl実行処理系の確認

UNIX系OSならばだいたいperlがインストール済みのはずです。

    $ perl -v
    
    This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
    (with 41 registered patches, see perl -V for more detail)

申し訳ありませんが、デフォルトでPerlが入ってない環境(Windowsとか)はよく分からないのでここでは対象外とします。WindowsはPerlと本気で向き合いたい人向けのOSだと思ってます。

以下では、特に断りがない限りOSとしてUbuntuを想定します。

## 必要なCPANモジュールを見極める

CPANモジュールはPerlのライブラリモジュールです。たいていのPerlプログラムはいろいろなCPANモジュールを使ってます。

CPANモジュールは"Text::CSV"みたいに"::"で区切られた名前になってます。

もし、あなたがゴニョゴニョしたいPerlプログラムのソースツリーに`Makefile.PL`とか`Build.PL`とか`cpanfile`とかのファイルがあったらちょっとガマンして中を見てみましょう。
`PREREQ_PM`とか`requires`とかのキーワードのそばに、必要なCPANモジュールが書いてあるはずです。

上記のファイルがないものの実行可能なスクリプトがあるのなら、試しに実行してみましょう。

    Can't locate Text/CSV.pm in @INC (you may need to install the Text::CSV module) (@INC contains: (以下略)

例えばこんな感じのエラーが出たらText::CSVモジュールが必要だということです。

## OSのレポジトリからCPANモジュールをインストールする

Perlと本気で向き合いたくないのなら、OSの提供するパッケージレポジトリからCPANモジュールをインストールするのが無難です。

例えば、DebianやUbuntuでは"lib*-perl"という名前のパッケージがCPANモジュールです。

    $ sudo apt-get install libtext-csv-perl

RPMパッケージだと"perl-*"という名前になってるみたいです。

    # yum install perl-Text-CSV

とりあえず、よく使われるモジュールは先にインストールしちゃうのも手です。例えばこんな感じに。

    $ sudo apt-get install lib{anyevent,class-accessor-lite,crypt-ssleay,datetime,dbd-sqlite3,dbd-mysql,dbd-pg,dbi,dbix-class,\
    extutils-parsexs,file-homedir,file-sharedir,file-spec,ipc-run3,json,module-build,module-install,\
    mojolicious,moo,moose,mouse,net-ssleay,path-class,plack,test-exception,test-fatal,test-requires,test-warnings,\
    tie-ixhash,try-tiny,uri,uri-encode,www,xml-libxml,yaml}-perl

(注) このモジュールの選択は独断と偏見に基づいています。

もちろん、全てのCPANモジュールがdebやRPMパッケージになってるわけではありません。必要とするCPANモジュールがレポジトリにない場合、CPANから直接インストールする必要があります。

## cpanmをセットアップする

CPANから直接CPANモジュールをインストールするには`cpanm`コマンドを使います。これは"cpanminus"とも呼ばれています。

また、C言語のコンパイラや`make`コマンドなども必要になるので、このへんのものをインストールします。

    $ sudo apt-get install build-essential cpanminus

あと環境変数を設定します。

    $ export PERL5LIB="$HOME/perl5/lib/perl5:$PERL5LIB"
    $ export PATH="$HOME/perl5/bin:$PATH"

ユーザー権限でインストールしたCPANモジュールは`~/perl5`以下に配置されるので、そこへパスを通しているわけです。.profileファイルなどにも書いておくといいでしょう。

また、プロキシ設定が必要な人は`http_proxy`環境変数を設定しておきましょう。

    $ export http_proxy="http://my-proxy.example.com:8080"

## cpanmでCPANモジュールをインストールする

Perlプログラムのソースツリーに`Makefile.PL`とか`Build.PL`とか`cpanfile`とかのファイルがあったらラッキーです。これらのいずれかのファイルがあるディレクトリで以下を実行して下さい。

    $ cpanm --installdeps .

`cpanm`は賢いので必要なCPANモジュールを全て拾ってインストールしてくれます。

上記のファイルがないなら手動でCPANモジュールを指定してインストールします。

    $ cpanm Text::CSV JSON

複数のモジュールをいっぺんに指定できます。

うまくいけば、あとは放っておけば依存する全てのCPANモジュールを勝手にインストールしてくれます。

## ビルドやテストに失敗したら？

`cpanm`はCPANモジュールのダウンロード、ビルド、テスト、インストールを行いますが、ビルドやテストに失敗することがあります。

そういう時はとりあえず何も考えずにもう一回やってみて下さい。

    $ cpanm Text::CSV JSON

意外とこれでうまくいったりもします。

C言語のコードを含むモジュールの場合、必要なライブラリがなくてインストールに失敗している可能性が高いです。`~/.cpanm/build.log`にビルドログがあるので見てみましょう。

例えば、うかつに`Net::SSLeay`とかインストールしようとするとエラーを食らいます。`~/.cpanm/build.log`を見てみると、

    SSLeay.xs:163:25: fatal error: openssl/err.h: そのようなファイルやディレクトリはありません

とか言われてるので、SSLライブラリヘッダをインストールしましょう。

    $ sudo apt-get install libssl-dev

この後、もう一度`cpanm`すればインストールできるはずです。

これでもエラーが出るようならそろそろPerlと本気で向き合ってる人を呼んでくるべきかもしれません。一応、`~/.cpanm/build.log`のビルドログを送りつけてみるといいでしょう。

まあPerlと本気で向き合いたくないのであれば軽い気持ちでエラーを無視してもいいでしょうし、

    $ cpanm -f Text::CSV JSON

そもそもテスト回すと時間かかってダルいのでテストを省略しちゃうとか。

    $ cpanm -n Text::CSV JSON

そのへんの判断はお任せします。