Perl のテスト

Perl のテストは、Test::More を使って書いてるけど、これってもう時代遅れっぽい。←語弊がありそうです。すみません。Perl のテスト事情を詳しく知る必要がありますね。

なので、Test::Base とかに乗り換えようと思ってるんやけど、もっといいテストフレームワークがあるのかしら。

会社の人に話しても、それってそもそも何?みたいな感じだった。。テスト駆動の開発が浸透しないかなぁ。

Parse::AccessLogEntry::Accessor

CPAN に Parse::AccessLogEntry::Accessor なるモジュールをアップしました。しかも、CPAN に初アップです!!やったね。なので、モジュールの説明などをちょこちょこと。

何するモジュールなの?

Apacheアクセスログを一行解析する、Parse::AccessLogEntry モジュールにアクセサを追加したモジュールです。

使い方はこんな感じ

下のサンプルだと、ホスト名と時間をアクセサを使って取り込んで表示してるだけです。

#!/usr/bin/perl
use strict;
use warnings;

use Parse::AccessLogEntry::Accessor;

my $LOGFILE = 'access.log';

my $parser = Parse::AccessLogEntry::Accessor->new;

open my $fh, '<', $LOGFILE or die;
while (my $line = <$fh>) {
    chomp $line;
    $parser->parse($line);
    print $parser->host(), $parser->time(), "\n";
}
close $fh;


個人的に、Parse::AccessLogEntry をよく使ってて、アクセサがあればなと思って作っちゃいました。よければ使っていただいて、意見等いただければと思います。

あとはモジュールの管理をどうするか。CodeRepos にアカウントをもらうのがいい気もします。

CPAN::Mini入れてみた

CPANミラーをローカルに作れる、CPAN::Miniを今更ながら入れてみた。めちゃくちゃうれしいところは、こんな感じっすかね。

  • 飛行機や地下鉄といったオフラインな所でもCPANモジュールをごりごり入れられる
  • ダウンロードする手間が無い分だけインストールも早い


インストールの仕方はめちゃ簡単です。CPANからCPAN::Miniを入れるだけ。

cpan> install CPAN::Mini

インストールに成功すると、minicpanというコマンドが付属してくる。これを使って、CPANミラーをローカルに作ったりします。こんな感じで実行。

% minicpan -r http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/ -l ~/minicpan

CPANシェルからインストールするために、urllistに追加しておきます。*1

cpan> o conf urllist unshift file:///home/amari3/minicpan
cpan> o conf commit

あとは、cronか何かで一日一回同期しておくと良いです。

ちなみに、初回起動時は30分くらい処理に時間がかかるので注意!

*1:homeディレクトリに個人名が含まれるのでちょっとだけ変えてます

CPAN モジュールを deb パッケージ化

CPAN モジュールを dpkg とか aptitude でインストールできるように deb パッケージ化してみる。

まずは、CPAN モジュールを deb パッケージにするために必要なコマンド、dh-make-perl をインストールする。

# aptitude install dh-make-perl

dh-make-perl の使い方はこんな感じ。--notest オプションを付けるとテストをスキップしてくれますが、個人的にはおすすめ出来ないです。

# dh-make-perl --cpan モジュール名 --build

別に root じゃなくても実行できるけど、一般ユーザだとこけるときもあるので、root で実行するのをおすすめします。

とりあえず例として、Readonly モジュールを deb パッケージ化してみる。

# dh-make-perl --cpan Readonly --build

実行後、成功すると以下のファイルが出来上がるので、dpkg なり aptitude でインストールすることができる。(aptitude でインストールするときは、sign したりする必要がある。ここでは割愛します)

libreadonly-perl_1.03-1_all.deb

依存パッケージがあったりする場合には、--depends オプションを使ってパッケージを指定する。(XML::XPathEngine で説明。特に意図はないです)

# dh-make-perl --cpan XML::XPathEngine --build --depends 'libmodule-install-perl (>= 0.64-1)'


僕が考える、deb パッケージ化するメリットは、

  1. サーバが Debian の場合インストールするのが容易になる
  2. 商用で使う場合で問題になりがちな、バージョンの差異をなくすことができる

あと、デメリットも、

  1. そもそも deb パッケージにするのが面倒くさい
  2. 依存関係を自動で解決してくれない(自分で --depends オプションを指定する必要有)

メリットの2が個人的には大きいと思いますが、デメリットの2が大きくのしかかってきます。これを自動化できるようなスクリプトを書くと幸せになれるかもと思います。

とりあえず CPAN の初期設定

あんまり勉強をやる気にならなかったけど、CPAN の設定だけしてみた。

まずは、必要(そう)なパッケージをインストール。

# aptitude install make unzip lynx

続いて CPAN の初期設定。設定内容はほぼデフォルト(なので設定内容は割愛)。どっちかで CPAN の対話モードを起動。

# cpan
# perl -MCPAN -e shell

ちなみに、初期設定をやり直したい場合は

cpan> o conf init

今日はこれでおしまい。明日からまたがんばりまっす。

CGI::Application::Plugin::Redirectではまった

CGI::Application::Plugin::Redirectではまった。といってもインストールでの話し。

ちょい古い環境(Perl 5.6.1な環境)に、いつもどおりcpanからCGI::Application::Plugin::Redirectを入れようとしたんやけど、make testでエラーが出て一日くらいはまる。

エラーの内容は正規表現のテストで、マッチングしないというやつ。合計3箇所出てあせあせ。

Location: http://***

といった文字列とのマッチングのテストがあるんやけど、

location: http://***

という文字列とのマッチングとなってて、常にテストが失敗するように。

原因は、CGI.pmのredirectメソッドの返り値が変更されてて(多分そう思う)、CGI.pmのバージョンを上げることで解決。

Perl 5.8系とか5.10系だとCGI.pmのバージョンが高いので、はまることは無いと思う。また、バッドノウハウが増えちゃいましたね。

YAPC Asia 2008のチケット買った

今年もやってきた。Perlの祭典http://conferences.yapcasia.org/ya2008/のチケットが今日から販売だったので購入。

去年は二日目が、急性腸炎で行けなくてがっかりしたのを覚えてます。今年はしっかり体調も万全にして、二日間堪能してやるぞ!

全世界のPerlハカーに会えると思うと、今からわくわく、そわそわしてきますな。