Perl のモジュールをインストールする方法

Perl のモジュールとは


Don’t reinvent the wheel, just realign it.
(車輪の再発明はするな、ただ調整すれば良い。)
Anthony J. D'Angelo

 Perl のモジュールとは、プログラムのパーツの一部を切り出したもので、ある 1 つの機能として再利用できます。 他のプログラミング言語では "ライブラリ" や "クラス" などと呼ぶ場合がありますが、Perl ではモジュールと呼びます。 例えば、日付を計算するプログラムが必要である場合、自分で最初から作る必要はありません。 Perl には日付を計算する "DateTime" というモジュールが標準で用意されているからです。 このように最初から用意されているモジュールを "標準モジュール" と呼びます。 標準モジュールに含まれていないモジュールは、"CPANモジュール" や "外部モジュール" などと呼びます。

 モジュールはアプリケーションのようなものです。 標準モジュールは、最初から Perl にインストールされているため、呼び出せばすぐに使えます。 一方、CPAN モジュールはインストールされていないため、対象のモジュールをダウンロードしてインストールを行う必要があります。 インストールの方法は、Windows のようにグラフィカルでボタンをクリックするようなインストール方法ではなく、コマンドラインから文字列を打ち込むインストール方法であるため、複雑に感じます。 最初は戸惑うかもしれませんが、数回の手順を踏めば完了するため徐々に慣れていくと思います。

Perl の "パッケージ" と "モジュール"

 "パッケージ""モジュール" は、プログラムの空間における重要な要素です。

 パッケージは、変数名やサブルーチン名といった、名前の重複を防ぐための仕組みです。 プログラムには空間があり、1 つの空間では同じ名前の変数やサブルーチンを定義することはできません。 この空間を定義できるのがパッケージとなります。

# パッケージ名 pkg1 の宣言
package pkg1;
$value1 = "foo1";
$value2 = "foo2";

# パッケージ名 pkg2 の宣言
package pkg2;
$value1 = "bar1";
$value2 = "bar2";
パッケージのサンプルコード 1

 上記のコードでは、"$value1""$value2" が重複していますが、パッケージを分けているためエラーにはなりません。 また、パッケージの範囲は、次のパッケージが現れるまでが範囲となるため、明示的に終了を宣言する必要はありません。 パッケージが分かれている "$value1""$value2" を区別して呼び出すためには、以下のように記述します。

# pkg1 の $value1 を呼び出す
print $pkg1::value;

# pkg2 の $value1 を呼び出す
print $pkg2::value;
パッケージのサンプルコード 2

 モジュールは、パッケージを再利用可能にしたものです。 使用頻度の高いモジュールは、標準モジュールで提供されていますが、その他のモジュールは CPAN で提供されています。 CPAN で提供されているモジュールをインポートしたとき、同じ空間内に同じ名前の変数やサブルーチンが含まれていることを避けるためにパッケージを使用しています。

Perl のモジュールの使い方

 Perl でモジュールを使うには use 文でモジュールを使えるように (include) します。 (Perl のバージョンが 5 以上で使えます。) use 文は、スクリプト実行前のコンパイル時に評価されます。 モジュールが実行されることで、モジュールで定義されているサブルーチンがインポートされて使用可能になります。 以下のコードでは、DateTime のモジュールを use 文で使えるようにしています。

# DateTime モジュールを使って現在の日時を取得するサンプルコード
use DateTime;
my $dt = DateTime->now( time_zone=>'local' );
DateTime モジュールを使って現在の日時を取得するサンプルコード

 また、use 文の引数として インポートしたいサブルーチン名を qw で指定できます。 qw を指定した場合、それ以外のサブルーチンをインポートしません。 また、複数のサブルーチンを指定する場合は、スペースで区切って指定します。

# モジュールから指定のサブルーチンのみインポートする
use モジュール名 qw(サブルーチン名1 サブルーチン名2);
モジュールから指定のサブルーチンのみインポートするサンプルコード

 use 文と似ている機能に require 文があります。 require 文は、コンパイル時には評価されず、スクリプト実行時に評価されます。 そのため、実行時に逐次呼ばれるため、必要なときに必要な分だけメモリをロードする制御が可能になります。 以下のコードでは、条件に一致した場合、オリジナルのモジュールを require 文で使えるようにしています。

# オリジナルのモジュールを条件に一致した場合のみ読み込むサンプルコード
if($str eq 'ok'){
    require 'ExampleRequire.pm';
    use Example;
}
オリジナルのモジュールを条件に一致した場合のみ読み込むサンプルコード

 use 文と require 文の使い分けは、モジュールの実行頻度とメモリの使用率によって分けられます。

 実行頻度が多いモジュールの場合は、use 文を使います。 実行頻度の多いモジュールを、スクリプト実行時に逐次呼び出す require 文 では、パフォーマンスのボトルネックになる可能性があります。

 メモリの使用率が高いモジュールの場合は、require 文を使います。 メモリの使用率が高いモジュールを、コンパイル時にメモリにすべてロードする use 文では、メモリの使用率が高まる可能性があります。

さくらインターネットで使える Perl のモジュール一覧

 さくらインターネットで使用できる Perl のモジュールは、以下のコマンドで取得できます。 コマンド実行結果は非常に長くなるため省略しまmす。

find `perl -e 'print join(" ", @INC)'` -name "*.pm" -print
さくらインターネットで使える Perl のモジュール一覧を取得するコマンド

CPAN で Perl のモジュールを探す

 CPAN (Comprehensive Perl Archive Network) とは、Perlのモジュールやその他の Perl で書かれたソフトウェアを集めた巨大なアーカイブです。 再利用性・汎用性の高いモジュールが多く登録されており、Perl プログラマの支援環境となっています。 ただし、世界中の Perl プログラマを対象にしているため、英語のサイトとなります。

Perl のモジュールをインストールする手順

 モジュールをインストールするには、まず CPAN から対象のモジュールをダウンロードします。 以下は、Data::UUID を例に説明しています。

 ダウンロードが終わったら、ダウンロードしたファイルをサーバの任意の場所に配置します。 次に CUI でサーバにログインし、ダウンロードしたファイルを配置したディレクトリまで移動します。 その後、以下のコマンドを順番に実行することでインストールが完了します。 ただし、Makefile を実行する手順において "PREFIX" に指定するパスは、ダウンロードファイルを配置したパスを指定して下さい。

# Data-UUID-1.221.tar.gz を解凍する
% tar zxvf Data-UUID-1.221.tar.gz
・・・ (中略) ・・・

# ディレクトリを移動する
% cd Data-UUID-1.221

# Makefile を実行する
% perl Makefile.PL PREFIX=/home/murashun/cpan/
・・・ (中略) ・・・

# make test コマンドを実行する
% make test
・・・ (中略) ・・・

# make install コマンドを実行する
% make install
・・・ (中略) ・・・
モジュールをインストールするコマンド実行例

 インストール完了後、モジュールを使うにはプログラム内にパスを指定する必要があります。 インストールが正常に完了していれば、ダウンロードファイルを配置したディレクトリに配下に /lib/perl5/site_perl/5.14/mach と続くディレクトリができています。 そのパスを絶対パスで、以下のように指定することで対象のモジュールが使用可能になります。

use lib qw(/home/murashun/cpan/lib/perl5/site_perl/5.14/mach);
use Data::UUID qw(NameSpace_URL);
モジュールをインストール完了後に指定するパス

 もしも対象のモジュールをアンインストールしたい場合は、対象のディレクトリを削除することでアンインストールできます。

まとめ

 Perl のモジュールインストールはコマンドラインで行うため、難しいと感じるかもしれません。 しかし、数回の手順でインストールできるため、苦手意識を持たずにやってみるといいかもしれません。 さくらインターネットでは、モジュールのインストール方法はサポート対象外のため、上記の手順でインストールしてみて下さい。 ただし、さくらインターネットの公式ヘルプでも書かれている通り、スタンダード以上のプランでのみ実施できます。