モジュールを記述するのに最適なフレームワークは何ですか? ExtUtils::MakeMaker (h2xs) またはModule::Build ?
11 に答える
注このアドバイスは古くなっています。 Module :: BuildはPerlコアから削除されましたが、CPANモジュールとして存続しています。長所と短所はまだ残っており、MakeMakerについての私の意見はまだ残っています。
ExtUtils :: MakeMakerの元メンテナーとして、MakeMakerはホラーショーであるため、Module::Buildをお勧めします。Module::Buildは非常にうまくまとめられています。しかし、それらはあなたの懸念ではありません、そして私は私の「あなたにとって最も面倒なこと」の答えを提示します。
エグゼクティブサマリー:
Module :: BuildのサポートはすべてのPerlで100%実施されているわけではないため、MakeMakerから始めてください。カスタマイズを行う場合は、Module::Buildに切り替えてください。それらの基本的なレイアウト、オプション、およびインターフェースはほとんど同じであるため、これは簡単です。見た目は魅力的ですが、Module::Installは避けてください。
幸い、Module :: BuildはMakeMakerをエミュレートできます。これは一部の機能には役立ちますが、カスタマイズを行う場合には役立ちません。Module :: Build::Compatを参照してください。
Module::Buildを使用したCPANリリースの場合は問題ありません。十分なModule::BuildがCPANにあるので、誰もがすでにブートストラップを取得することに取り組んでいます。
最後に、新しいconfigure_requires
オプションにより、CPANシェルはモジュールのビルドを開始する前にModule::Buildをインストールすることができます。残念ながら、configure_requiresについて知っているのは最新のCPANシェルだけです。
ああ、あなたが何をするにしても、h2xsを使用しないでください(XSコードを書いている場合を除いて...そしてそれでもそれについて考えてください)。
MakeMakerの長所:
- Perlに付属し、Perlコアによって使用されます(したがって、アクティブに維持され、永久に残ります)
- Makefile.PLをどうするかはすべてわかっています。
- ほとんどのモジュールオーサリングドキュメントはMakeMakerをカバーします。
- makeを使用します(makeを知っている人はビルドプロセスをデバッグしてパッチを当てることができます)
MakeMakerの短所:
- makeが必要です(Windowsを考えてください)
- カスタマイズが難しい
- クロスプラットフォームのカスタマイズと作成がさらに困難
- 何かがうまくいかないときにデバッグするのは難しい(makeを理解していない限り)
Module :: Build Pro:
- カスタマイズ/サブクラス化が容易
- 純粋なPerl
- デバッグが簡単(Perlです)
- いくつかの方法でMakeMakerをエミュレートできます
- CPANシェルはModule::Buildをインストールします
モジュール::ビルドの短所:
- Module :: Buildメンテナ(そして実際にはすべてのPerl Toolchain Gang)はそれを嫌っています
- 古いバージョンのCPANクライアント(CPANPLUSを含む)は、Module::Buildについて何も知りません。
Module :: Install Pros:
- 洗練されたインターフェース
- バンドル自体、既知のバージョンがあります
- すべてがMakefile.PLを処理する方法を知っています
Module :: Install短所:
- 作る必要があります
- 常にバンドルバージョンを使用し、外部の破損に対して脆弱
- インターフェイスの外部でカスタマイズするのは難しい
- MakeMakerの根性をくすぐるので、新しいMakeMakerリリースは最終的にそれを壊します。
- v2メタスペックを使用してMETAファイルを生成する方法がわからない(新しいツールでますます問題が発生する)
ここで 2 つの質問があります。
まず、h2xs を使用しないでください。これは古い時代遅れの不快感ですが、実際にヘッダー ファイルを XS コードに変換しようとしている場合は、役立つかもしれません (自分でそれを行ったことはありません)。
2011 更新: Dist::Zillaを確認することを強くお勧めします。特に、複数のモジュールを保守する予定がある場合は注意してください。
新しいモジュールを作成するには、Module::Starter を使用します。それはうまく機能し、出力をカスタマイズするための素晴らしいプラグインがいくつかあります.
次に、どのビルド システムを使用すべきかを尋ねています。3 つの候補は、ExtUtils::MakeMaker (EUMM)、Module::Build (MB)、および Module::Install (MI) です。
EUMM は恐ろしく厄介な作業ですが、機能します。ビルド プロセスをまったくカスタマイズしていなければ、問題なく機能します。
MB は新しい子供であり、中傷者もいます。大きな利点は、インストールとビルドのプロセスを大幅にカスタマイズしたい場合、MB を使用してこれを適切に (そしてクロスプラットフォームの方法で) 実行できることです。EUMM を使用することは実際には不可能です。
最後に、MI は基本的に EUMM 上の宣言型ラッパーです。また、古いツールチェーン モジュールを使用してモジュールをインストールしようとするユーザーの問題を回避するために、ディストリビューションと共にパッケージ化されます。「パッケージ セルフ」トリックの欠点は、MI 自体にバグがある場合、それを修正するためだけにすべてのモジュールを再リリースする必要があることです。
カスタマイズに関する限り、MI 用のプラグインがいくつかありますが、それらを超えたい場合は、数十以上のプラットフォームにわたって Makefile とビルド ツールを処理するという問題に戻るので、実際には役に立ちません。あなたはその領域に多すぎます。
Distribution::Cookerを CPANにアップロードしました。これは、私が新しいディストリビューションを作成するために使用するものです。これの良いところは、ディストリビューションを好きなようにできることです。いくつかのテンプレートを作成するだけです。誰が使っても構わない。私にとって、それはシンプルでローテクであり、余分な問題を引き起こすことはありません.
Module::Starterのようなものから始めて、スターター テンプレートを作成し、独自のボイラープレートと好きなやり方を追加することができます。各ファイルに必要なものを選択するだけでなく、ディストリビューションに表示するファイルを選択します。やりたいことを見つけたら、自分のテンプレートを更新するだけです。
Makemaker と Module::Build に関しては、未来は Module::Buildです。もう Makemaker を使っているのは私たち老人だけです。:) 両方を同時に使用する (または両方を使用するふりをする) 方法があります。Module::Build、Module::Build::Compat、および Module::Install ドキュメントを見てください。Module::Build は Perl の標準ライブラリから追い出され、将来は不確かです。ビルドシステムとして Makemaker に戻ってきました。
これはちょっとした答えですが、それぞれを使って少し経験を積んでみてください。
また、ディストリビューションを作成するための新しい作成者専用ツールであるDist-Zillaも確認することをお勧めします。ディストリビューションの構築に役立つだけなので、コードに同梱されたりインストールされたりすることはなく、多くの強力な処理を実行できます。
Module::Build に関する互換性に関する唯一の問題は、ユーザーが CPAN クライアント (CPAN.pm または CPANPLUS.pm) を更新せずにモジュールをインストールしようとした場合です。CPAN からモジュールをインストールしている場合、クライアントを簡単にアップグレードできます。同じ鏡から。
ビルド プロセスで複雑なことをしたくない場合は、必ず EUMM を使用してください。しかし、別のターゲット プラットフォームでビルドの問題が発生した場合は、make のバリエーションごとに異なる Makefile になる可能性があります。
Module::Build は多くの機能 (拡張すれば思いつくもの) を提供し、すべて perl であるため、makefile をデバッグすることはありません。Module::Install は機能を提供しますが、それをバンドルする必要があり、すべてが最終的に「make」を介して実行されます。
個人的には、私が知っている多くの人々がそうであるように、Module::Installをお勧めします-CatalystやMooseの人々もそれを使用しています。
Module::Build と Module::Starter ( TT2 プラグインを使用) もお勧めします。
ここで、私が望んでいた回答の方向性を少し説明します。
- さまざまなフレームワークの長所と短所
- フレームワークの互換性/インストール ベース
- 内部 (ローカル) リリースと外部 (CPAN) リリースの適合性
- 「Xを使用する」という答えはむき出しではありません
デイブの答えには、良い賛否両論の情報があります。レオンの答えは互換性をほのめかしていますが、明示的ではありません。brian d foy が述べたように、古い帽子だけが EUMM を使用していますが、MB が 5.9 までコアの一部ではないため、CPAN 向けのものに適したフレームワークであるとは確信していません。
Module::Build はどのような点でも優れていますが、ExtUtils::MakeMaker ほど広くサポートされていません (具体的に言うと、Perl の古いバージョンはそのままではサポートしていません)。それはあなたのニーズに依存します。
どちらにも長所と短所があります。最近は、Module::Build と Module::Starter を使用し、推奨しています。
EU::MM は依然として最も広くサポートされ、人気のあるもののようですが、Module::Build が追いついてきています。また、開始するのに役立つモジュールについては、Module::Starterを確認してください。