gihyo.jp » DEVELOPER STAGE » 連載 » モダンPerlの世界へようこそ » 第25回 Module::Starter:モジュールを書くためのテンプレート

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

第25回 Module::Starter:モジュールを書くためのテンプレート

モジュールを再利用可能にするためのツールたち

Perl 4の時代まではいざ知らず,いまどきPerlのモジュールやアプリケーションを再配布しようと思ったら,CPANモジュールと同じ形式にしておくのがベタープラクティスです。たとえ一般には公開しない社外秘のモジュールであっても,Makefile.PLやBuild.PLを用意して,テストも書いて,できればREADMEやChangesなどの更新履歴もつけておけば,別のプロジェクトを立ち上げたときにコピー&ペーストする必要もなくなりますし,業務の引き継ぎなども簡単になります。

とはいえ,モジュールを書くたびにMakefile.PLなどを一から書きおこすのは面倒な話。メタ情報の部分はモジュールごとに異なるとはいえ,それ以外の部分は(特にひな形の時点では)大差ないのがふつうですから,できれば省力化したいところです。

今回はそんなときに使われるひな形作成ツールについてまとめてみましょう。

本来とは異なる用途で使われているh2xs

ひな形作成ツールとしてもっとも古くからあるのは,CのヘッダファイルをXSモジュールに変換するためにつくられたh2xsです。これはもともとPerl 4の時代につくられたh2phというCのヘッダファイルをPerlのヘッダファイルに変換するためのスクリプトの後釜として書かれたもので,Perl 5のコアモジュールとしてはSocketモジュールとFcntlモジュールがh2xsでつくられています。その本来の使い方は,このようにヘッダファイルを引数として渡すというものでした。

> h2xs fcntl.h

ただし,こうして変換したXSモジュールは,そのままでは役に立ちません。XSのコードを呼び出すには対応する.pmファイルが必要ですし,XSのコードをコンパイルする際にはMakefile.PLなどもほしいところです。そのため,h2xsではヘッダファイルを変換した成果をそのままパッケージングできるように,XS本体だけでなく,対応する.pmファイルや,Makefile.PL,README,基本のテストなどを一式用意してくれるようになっています。その「おまけ」はXSとは無縁の一般的なモジュールをつくるときにも有効に使えるため,Perl 5.002の時代にはもう本来のヘッダファイルをXSに変換する作業なしでも使えるように改造され,書籍などでも新しいモジュールをつくるときのお作法として紹介されるようになりました。次の例は,Foo::Barというモジュールのひな形をつくる,という風にも読めますが,本当は-AオプションでAutoLoaderの機能を,-XオプションでXS部分を省略し,-nオプションでモジュール名を指定し,本来の引数であるヘッダファイルは省略した,と読むのが正解です。

> h2xs -XAn Foo::Bar

このh2xsも最近ではずいぶんとオプションが増えてきたのですが(詳しくはperldoc h2xsをご覧ください),なかでも特に覚えておきたいのは-bオプションです。h2xsは,特に指定がない場合,生成するMakefile.PLにスクリプトを実行したPerlのバージョンより新しいPerlしかサポートしないという指示を書き込むのですが,一般的にこの指定はあまりに厳しすぎる(たいていの場合,もっと古いPerlでも問題なく動作する)ため,無頓着なh2xs製モジュールが嫌われる原因のひとつとなっていました。h2xs 1.21(Perl 5.6.1)で実装された-bオプションをつけると必要なPerlのバージョンを明示的に指定できるほか,5.6以前のPerlをサポートする場合にはourやuse warningsを使わないという配慮もしてくれるので,h2xsを使うならかならず指定しておきたいところです。

> h2xs -b 5.6.0 -XAn Foo::Bar

ExtUtils::ModuleMaker

もっとも,ひな形をつくるためのツールとして見た場合,h2xsはそれほど使い勝手のよいものではありません。Module::Buildのように新しいツールには対応していませんし,名前の点でもひな形を連想させるところはありませんから,例によって21世紀に入ると,より適切な名前をもつ代替品がつくられるようになってきました。そのひとつが,ジェフリー・エイヴリー(Geoffrey Avery)氏が2001年にリリースしたExtUtils::ModuleMakerです。

これはもともとModuleMakerという名前だったものを当時の流儀にならってExtUtils配下に組み込んだもので,各種の設定をインタラクティブに設定できるようになっているのが最大の特徴。modulemakerというコマンドラインツールを単独で実行するとこのような画面が表示されます。

------------------------

modulemaker: Main Menu

    Feature                     Current Value
N - Name of module              ''
S - Abstract                    'Module abstract (<= 44 characters) goes here'
A - Author information
L - License                     'perl'
D - Directives
B - Build system                'ExtUtils::MakeMaker'

G - Generate module
H - Generate module;
    save selections as defaults

X - Exit immediately

Please choose which feature you would like to edit:

指示に従ってコマンドを入力し(念のため,改行が必要です),必要な情報を入力したらまたメニューに戻り,最後にGないしHを入力すれば,必要な情報が埋め込まれた各種ファイルのできあがり。これらの設定はコマンドラインオプションとして渡すこともできますし,毎回変わるモジュール名と概要以外はファイルに保存しておくこともできます。

ExtUtils::ModuleMakerはh2xsのような一枚岩のスクリプトに比べると拡張性が高いのも特徴で,モジュールを継承するといろいろなところに手を加えられます。文言や並び順を修正する程度であれば,Perl品質管理チームのデイヴィッド・ゴールデン氏が2004年にリリースしたExtUtils::ModuleMaker::TTを使うと,わざわざソースコードを拡張しなくてもテンプレートレベルで簡単にひな形を修正することもできます。

ExtUtils::ModuleMakerは2001年のアドベントカレンダーや2003年のYAPCで紹介されて注目を集め,国内でも4,5年前から何度か話題になりました。初心者向けとしては便利なモジュールですが,初期設定では作成されるディレクトリが深すぎる(※1)といった弱みもありましたし,名前空間的にも古くささを感じさせたため,デファクトスタンダードの地位を築くまでにはいたりませんでした。

※1

Directivesのなかに入ってCompactの設定を1にすると改善されます。

著者プロフィール

石垣憲一(いしがきけんいち)

あるときは翻訳家。あるときはPerlプログラマ。先日『カクテルホントのうんちく話』(柴田書店)を上梓。最新刊は『ガリア戦記』(平凡社ライブラリー)。

URLhttp://d.hatena.ne.jp/charsbar/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

はじめMath! Javaでコンピュータ数学

プログラミング言語入門者向けに,知っていると役立つ数学的トピックスを紹介します。簡単な演習問題と解説で,即活用できる知識を目指します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

教科書には載っていない ネットワークエンジニアの実践技術

ネットワークエンジニア,インフラエンジニアのトラブル対応には,時には「教科書通りにいかない」テクニックが必要となります。資格試験では得られないこうした実践的な技術について,実例を元に紹介します。

Googleケータイ,世に現る

2008年9月,Googleが中心となって開発されている「Android」を採用した携帯電話「T-Mobile G1」が発表されました。本連載ではT-Mobile G1を中心にGoogleケータイに迫ります。

モバゲーオープンプラットフォームに挑戦!――面白法人カヤック流モバゲーオープンプラットフォーム企画と開発のイロハ

2010年1月にリリースとなったモバゲーオープンプラットフォーム。その制作企業であるカヤックが,アイデアを企画に落とし込み,開発までのノウハウを紹介します。

プロトタイピングツールSketchFlowを用いた,Silverlightアプリ開発

SketchFlowプロトタイプ作成からアプリケーション開発までをExpression Blend 3を使って実践的に解説します。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

玩式草子─ソフトウェアとたわむれる日々

Plamo Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント