モダンPerlの世界へようこそ

第1回「モダンPerl」ってなんだろう?

「モダンPerl」という言葉の流行

先日、国内有数のPerlハッカーである牧大輔氏がモダンPerl入門という書籍を刊行しました。

日本のPerlユーザーのハブサイトを目指しているperl-users.jpでもモダンなPerl入門と題して「古来から親しまれているPerl入門とはひと味違う、今風のPerl入門テキスト」を作ろうという動きがあります。

海の向こうでは、Perl 6の言語仕様の策定にたずさわっているクロマティック(chromatic)氏がModern Perl Booksというウェブサイトを開設して、⁠モダンPerl」についての考察を始めました。氏はその名もModern::Perlというモジュール[1]を公開して「モダンPerl」の啓蒙に努めています。

個人の主義主張に過ぎないのでしょうか?

でも、この「モダンPerl」とはいったい何なのでしょうか。

字面から「今風の」Perlなのだろうということはなんとなく推測できますが、いったいなにをもって「今風」とするのか。そもそも誰にとっての「今風」なのか。

たとえば、クロマティック氏のModern::Perlというモジュール。これは、構文チェックを厳格化するstrictと、各種の警告を有効にするwarnings、そしてPerl 5.10で追加された新しい構文を有効にするfeatureという3つのプラグマを有効にしてくれるものですが、本当に「use Modern::Perl」してあれば「モダンPerl」と呼べるのでしょうか。

『モダンPerl入門』についてもそう。筆者は総じてよく書けている、すばらしい入門書だと思いましたが、⁠モダン』と言っても、渋谷の一ベンチャー企業社長の趣味・嗜好を紹介しているだけじゃないか」と言われたら、どうでしょう。反論できるのでしょうか。

仕事の現場で「もっとモダンな書き方をしましょう」と提案して、上司や同僚に「ウチにはウチのやり方があるんだ」と返されたとき、⁠よその偉い人がそう言っていたんだから従ってくださいよ」と言っては誰も納得してくれません。⁠モダンPerl」を推奨するなら、もっと具体的・客観的な道しるべが必要でしょう。

連載第1回目となる今回は、この「モダンPerl」の意味や範囲を探ってみることにします。

サポート対象としての「モダンPerl」

さて、⁠今風の」Perlというくらいですから、まずはPerlの歴史を簡単におさらいしておきましょう。

Perlの公式サイトにあるPerlTimelineというページによると、Perlが誕生したのは1987年のこと。Perl 4が登場したのは1991年(Perl 4歳⁠⁠、いまなお現役で使われているPerl 5が登場したのはPerlが7歳になった1994年のことでした。Perlが13歳になった2000年には、新しいキーワードを追加したPerl 5.6系列とともに、Perl 6の開発が始まり、Perlが15歳になった2002年にはPerl 5.8系列が誕生。Perlがちょうど20歳になった2007年にはPerl 5.10系列が誕生――という具合に、Perlの歴史はまるで人の子の成長記録のようなのですが、人の子が、たどたどしい赤ちゃん言葉から、無邪気な子供言葉、背伸びをした思春期の言葉、落ち着いた成人の言葉へと、だんだん物の言い方を変えていくように、Perlの言葉も、この5年、10年でずいぶん変わってきました。

たとえば、先ほども取り上げたstrictプラグマ。Perl 5とともに登場した(つまり、Perlが7歳のときに生まれた)古いモジュールですから、その有用性についてはそろそろ説明の必要もないと思いますが(ですよね?⁠⁠、人にたとえれば、Perlも小学生になったのだから、いつまでも赤ちゃん言葉を話していないで「こそあど」をきちんと使い分けなさい、という寓意があったかのように感じられます。

Perlの成長とともに進化したという点では国際化モジュールもそうですね。Perl 4時代のjperlやjcode.pl(1992年誕生、Perl 5歳)から、1999年(Perl 12歳)のときに登場したJcodeモジュール、そして2002年(Perl 15歳)のときに登場したEncodeモジュールへと切り替わっていった流れを、国内のことしか目に入らなかった子供時代から、世界が視野に入ってきた青年時代への移り変わりと重ねてみれば、どうでしょう。

2007年(Perl 20歳)に最初のPerl 5.10系列が出たのを受けてPerl 5.8系列を切り捨てようとしたModern::Perlについては、特にPerl 5.10系列のバグフィックス版がまだひとつも出ていない今はやや時期尚早の感がありますが[2]⁠、いわゆる「モダン」なアプリケーションフレームワークのなかにはもうPerl 5.8以降でしか動作しないものも少なくないですし、Perlモジュールをインストールするときの根幹をなすExtUtils::MakeMakerでさえ、2007年末にリリースされた6.37_03以降、ourなどのキーワードをサポートするPerl 5.6系列以降にしかインストールできないようになりました。

Perl 5.6の最初の版が出たのは2000年(Perl 13歳)のことでしたから、要するに21世紀にもなっていまだに20世紀の子供っぽい書き方にしがみついている人はそろそろサポートの対象から外しますよ(サポートが必要な方はこの機会にもう少し「大人」になってくださいね⁠⁠、というのがその意味です。

もちろんここで切り捨てられたPerl 5.5系列や、Perl 4系列でさえ、いまだにユーザは存在していますし、この記事を書いているまさに今もPerl 5.5系列の最新メンテナンス版のリリース準備が進められているというニュースが入ってきましたが[3]⁠、このような「どうがんばってもアップグレードしてくれない層」のために古いPerlでも動くコードを書き続けることは、Perl界全体のことを考えるとマイナスにしかならない(どうせアップグレードしてもらえないなら過去にとらわれずモダンなコードを書いたほうがよい)というのがこの2、3年の趨勢になってきています[4]⁠。

バグが潜んでいる可能性も高い最新版を追い続ける必要はないですが、経験を積んだいい大人が古いコードにしがみついて既知のバグを再現し続けるのもまたばからしいこと。さまざまな理由から今なお古いPerlを使っている方は、ぜひこの機会に過去数年分のバグフィックスを取り込んだ新しめのPerlへとアップグレードしていただければと思います。

「モダン」なモジュールとは?

ただ、⁠モダンPerl」の世界は、Perl本体のバージョンさえ上げれば完結するものではありません。⁠PerlはCPANモジュールを利用するためのインタフェースに過ぎない」と言いきってしまう人さえいるくらいで、⁠モダンPerl」の恩恵を十分に享受するには「モダン」なモジュールの利用が不可欠です。

では、モジュールが「モダン」かどうかはどう判断すればよいのでしょうか。

先ほど紹介したJcodeとEncodeのように、中には新旧がはっきり色分けできるものもありますが、一般に「モダン」と評価されているモジュールの中にはこれといったライバルが見あたらないものもありますし、古いモジュールと新しいモジュールの勢力が拮抗していたり、下火になっていた古いモジュールが勢いを取り戻して新しいモジュールを駆逐してしまうような例もなくはありません。

『モダンPerl入門』やperl-users.jpにはモジュールの最終更新日やテストの数、バグレポートの数などからモジュールの状態を判別する方法が紹介されていますし[5]⁠、Perl 5.5時代以前の書き方を引きずっているかどうかで判別することも可能でしょうが[6]⁠、それだけではどこか物足りません。

コミュニティに認められてこその「モダン」

そこで、この連載ではそのモジュールをサポートするコミュニティの性質に注目してみようと思います。

たとえば、Perlの世界には公共性の高いモジュールを支援するための助成金制度※7)というものがあります。この助成金は主にPerl Foundationという財団が管理しているのですが、篤志家から集めた寄付金を注ぎ込むモジュールの選択にあたっては、独善に陥らないよう、財団だけでなく、四半期ごとに一般ユーザからの意見も集めて選択の参考にしています。そこで選ばれるようなモジュールはその時代層を反映した「モダン」なモジュールと考えてもよいでしょう。

また、Perlの世界には品質管理委員会[8]のように公共性の高いプロジェクトチームがいくつか存在しています。このような委員会が推奨しているモジュールやコーディングスタイルについても「モダン」と考えて差し支えないでしょう。

同様に、特定分野の問題意識を共有する有志が集まり、名前空間をまるごとひとつ占有して開発を進めているような大規模プロジェクトについても――その開発母体が特定の企業や個人に偏りすぎていなければ――「モダン」と呼んでもよさそうです。

Perlの父ラリー・ウォール氏が2000年(Perl 13歳)にPerl 6の開発開始を宣言したとき、氏はこのようなことを言いました。

Perl 5 was my rewrite of perl ... I think this should be the community's rewrite of perl, and the community's rewrite of the community.

http://use.perl.org/articles/00/07/19/161217.shtml

大胆に意訳してしまえば、⁠Perl 5までは親の責任で育て上げましたが、Perl 6を一人前の大人にするのはみなさんであってほしい」というところでしょうか。後半のコミュニティによるコミュニティの作り直しというのは、Perl 5の移植管理チームのように、あまりに大きくなりすぎて身動きがとれなくなってしまったコミュニティのあり方も変えていってほしいという願いなのですが、ここでも個人からコミュニティへ、という流れがうかがえます。

「モダン」だからといって万人向けとは限りませんが

もちろんこのようなコミュニティ主導のモジュールであっても、ときにはチームが分解したとか、設計上の不備をつくろいきれなくなった、よりすぐれた実装があらわれたといった理由で、人気を失い、過去のものになってしまうものはありますし、味方も多いけれど敵も多い(コアなファンにしか広まらない)とか、特定の環境・条件を満たさないと役に立たないというものもなくはありません。

だから、⁠モダン」はかならずしも「万人向けのベストプラクティス」ではありませんし、この先も永遠に「モダン」であり続ける保証もないのですが、取り入れるにせよ、取り入れないにせよ、⁠今風」の書き方を知るうえで「モダン」なモジュールを知っておくことはきっと役に立つはずですし、コミュニティの流れを追っていくことで見えてくるものも少なからずあるかと思います。

連載第2回以降は、そのような「モダン」なモジュールの歴史や使い方を紹介しながら、モダンなPerlの世界では今なにが起こっているかをお伝えしていきます。どのようなモジュールを紹介するかの腹案はありますが、せっかくのネット連載ですから、ニュースやニーズがあったものから紹介していきたいと思います。ご希望のジャンルがありましたら何らかの方法でお知らせください。では、次回をお楽しみに。

おすすめ記事

記事・ニュース一覧