本日は拙著『すぐわかるオブジェクト指向Perl』に補足したい。

簡単に言うと、
 ・本書ではCPANモジュールとしてCalendar.pmを推している
 ・インストールの方法としては、UNIXではcpanコマンド、WindowsではActivePerl同梱のppmの使用のみ説明している
 ・これは執筆時の2008年には通用したが、現状ではどちらも使えなくなっている
 ・tarballは置いてあるので、手動でビルドしてインストールすることは出来る
 ・ただしCalendar::Simple、Date::Simpleなどのモジュールから好きなものをcpanやppmで導入した方がラクチン
という話である。
ここまでで「へー、なるほどー」と思った人は以下は読まなくて良い。
お手数をお掛けします。
以下は、上記の箇条書きのダラダラした補足である。

本書は、だいたい以下の内容を紹介している。
 ・Perl組み込みのモジュールを使う方法
 ・自作のオブジェクト指向モジュールを作る方法
 ・CPANモジュールをネットからインストールして活用する方法
 ・オブジェクト指向の継承機能を使って、Perl組み込みやCPANモジュールをカスタマイズする方法

で、CPANからインストールして使用できるモジュールとして、YEWENBINさんのCalendar.pmを取り上げている。

CPAN(ぼくはずーっとシーパンと読んでいたが、クパンが正しいという説もある)とは、世界中のPerl腕自慢がモジュール(プログラムの一部)を無料で公開している巨大なデータベースだ。
CPANモジュールを組み込むことで、自作プログラムをパワーアップ出来る。

CPANモジュールは、CPANのサイトにtar.gzという形式で固めたファイルで置かれていた。
これは、モジュールの作成者が、インストール関係のファイルをディレクトリにまとめ、tar(Tape ARchive)というプログラムで1つに固めて、gzipというプログラムで圧縮したものだ。
tar.gz形式に固めたものを、tarball(ターボール)とも呼ぶ。
CPANモジュールを自分のプログラムに導入するには、tarballをダウンロードして解凍し、makeを使って手動でインストールする必要があった。

tarballは今も置かれていて、いにしえの方法で解凍、makeすることが出来る。
この作業にはtar、gzip、make、そしてCを使ったモジュールの場合はコンパイラーのgccを使う必要があるが、これらはすべてMac/Linuxの場合は標準で装備されている。
Windowsは少々面倒だが、cygwinというUNIX類似環境や、Strawberry Perlを使えば、makeやMinGWというWindows用のgccが入っているので、やれば出来る。

ところが後になって、cpanコマンドやその派生(最近はcpanmというのが流行っている)というのを使って一発でインストール出来るようになった。
『すぐわかるオブジェクト指向Perl』執筆当時、Calendarモジュールもcpanコマンドで一発インストール出来たので、tarballからのmakeは割愛した。

なおLinuxの場合、cpanやcpanmが究極のカンタンなモジュール導入法ではない。
UbuntuなどのDebian系のLinuxディストリビューションでは、他のアプリのようにapt-getでインストールできるし、GUIのアプリケーション・センターから導入することも出来る。

ぼくは簡単な方法でインストール出来る場合はなるべくそっちを使うのがスジだと思う。

Linuxだと
 GUIのアプリケーション・センター>apt-getコマンド>cpanコマンド>tarballから手動でmake
という方法が早い。

MacやBSDの場合は
 cpanコマンド>tarballから手動でmake

という方法が早い。

Windowsの場合は、ActivePerlを使うか、Strawberry Perlを使うか、Cygwin環境でperlを使うかで異なる。

ActivePerlは最も普及しており、問題が少ないPerlである。
ActivePerlでモジュールを導入するには、同梱のppmというプログラムを使う。
これはめちゃめちゃGUIで使いやすいプログラムである。
ただし問題がある。
ppmはppm形式にビルドされたモジュールをActiveState社のサーバー(リポジトリーと言う)に持っていて、そこからダウンロードするが、多くの場合UNIXで開発される最新のCPANモジュールを導入するのが遅れる。
そのため、新しいモジュールをppmでインストールしようとしても、存在しないためインストールできなかったり、バージョンが古かったりする。
ActiveState社以外にも、ウィニペグ大学などにもリポジトリーがあり、そこも追加で見に行くようにppmを追加すると状況が改善される場合もあるが、一般的に言ってモジュールは古めである。
tarballからmakeする場合は、Microsoft Visual Studioに同梱されているnmakeやvcを使うが、この目的のために何万円も出してVSを買うのは大変だ。
実際にはMSのサイトからnmakeもvcも無料版がダウンロード出来るが、無料であるだけでオープンソースではない。
しかし、昔はActivePerlしかなかったので、がんばってインストールしていた人はいた。

Strawberry Perlは先進的なPerlである。
Perlの創始者ラリー・ウォール氏が「私がWindowsでPerlを使うときは、Strawberry Perlを使います」とおっしゃっている。
中にはmakeやMinGW(Windows版のgcc)といったビルド用のツールが同梱されている。
cpanコマンドも使える。

Cygwinはちょっと変わり種で、UNIX風の環境をWindows上に一揃え用意している。
ここでtarballをビルドすることが出来る。

ということで、まとめると、

ActivePerlでppmを使う
 >>Strawberry Perlでcpanを使う=Cygwinでcpanを使う
 >>>Strawberry Perlでtarballをmakeする=Cygwinでtarballをmakeする
 >ActivePerlでtarballをmakeする

ぐらいの順番になると思う。
ただし、ActivePerl/Strawberry Perl/Cygwin+perlのどれを使うかは、CPANモジュールのインストールとは別の問題である。
なんだかんだいってActivePerlは圧倒的に使われているし、解説文書も多い。
でもUNIXに習熟している人なら圧倒的にCygwinが便利だろう。
どっちにしても、tarballを手動で導入するよりは、ppmやcpan(やcpanm)を使うほうが全然ラクだ。

では、簡単な方法だけを紹介すれば、古い、難しい方法なんて特に教えなくてもいいんじゃないか、とおっしゃるかもしれない。
ぼくもそう思っていた。
しかし実際には、以下のような場合がある。

 1)CPANにはあるけどppmにない場合がある
 2)CPANからtarballはダウンロード出来るが、cpanコマンドが使えない場合がある

Calendar.pmは、拙著の執筆時(2008年)にはcpanやppmでバッチリインストールできた。
だからtarballからmakeする方法は、あえて書かなかった。
(というか、tarballからmakeせずにすむモジュールを選んで教材に使わせてもらった。)

ところがその後、CPANからtarballだけはダウンロードできるが、cpanコマンドやppmコマンドは使えない状態になってしまった。
なぜかは良く分からない。
作者にも一応連絡したのだが、今のところ対応はない。

この場合、以下のような対応になると思う。

もし本書に書いてあるサンプルプログラムを一字一句正しく動作させるには、tarballをダウンロードしてインストールすればいいと思う。
この場合UNIX(Macを含む)ではカンタンだが、Windowsでは少々むずかしい。
Strawberry Perlや、Cygwinを使えばいいと思うが、Perlをバリバリ運用している場合はActivePerlを捨てられない場合もあるだろう。
nmakeやvcをダウンロードしてビルドに挑戦するのも良い。

もし本書を読んで大体雰囲気を掴んで、似たようなことをして遊びたいのであれば、もっと新しい、cpanコマンドやppmが通用するもっと新しいモジュールを使うのが良い。
ぼくは、日付関係では、『すぐわかるオブジェクト指向Perl』の14章ではCalendar::Simpleというモジュールを紹介しているし、『Software Design』2013年6月号ではDate::Simpleというモジュールを紹介している。
『Software Design』の記事では、ppmでのインストールや継承によるカスタマイズまで紹介している。
560ページの『すぐわかるオブジェクト指向Perl』の内容を7ページに要約した内容になっているし、他の著者によるJava、JavaScript、PHPの紹介も載っているのでオススメ。

浅学にして、昔は使えていたモジュールがそのうち使えなくなる、という事態があると思わなかった。
あと、PerlはWindows/Mac/UNIXのいずれでもラクチンポンで使えるのが特徴だが(ある言語の教科書では「WindowsユーザーはまずそのマシンにLinuxを入れてください」と書いてあって、そのあとEmacsエディターの使い方が延々書いてあって瞠目した)、全部の環境を睨んで解説書を書こうとすると、当然ながら大変である。
特に難解な作業ではないが、煩雑なのである。
以上のような事情であるのでご賢察を賜りたい。
よろしくおねがいします。

Shell and pearls