モジュールを作成するにはどのフレームワークを使用する必要がありますか?[閉まっている]
-
09-06-2019 - |
質問
モジュールを書くのに最適なフレームワークは何ですか -- ExtUtils::MakeMaker (h2xs) または モジュール::ビルド?
解決
注記 このアドバイスは時代遅れです。 Module::Build が Perl コアから削除されました ただし、CPAN モジュールとして存続します。賛否両論は依然として存在しており、MakeMaker についての私の意見は依然として存在します。
ExtUtils::MakeMaker の元メンテナーとして、MakeMaker はホラー ショーであるため、Module::Build をお勧めします。Module::Build は非常によくまとめられています。しかし、それらはあなたの懸念ではありません。私が「あなたにとって最も面倒な」答えを提示します。
エグゼクティブサマリー:
Module::Build サポートはすべての Perl で 100% 整備されているわけではないため、MakeMaker から始めてください。少しでもカスタマイズしたい場合は、Module::Build に切り替えてください。基本的なレイアウト、オプション、インターフェイスはほぼ同じなので、これは問題ありません。見た目は魅力的ですが、Module::Install は避けてください。
幸いなことに、Module::Build は MakeMaker をエミュレートでき、一部は役立ちますが、カスタマイズを行う場合は役に立ちません。見る モジュール::ビルド::互換.
CPAN リリースの場合は、Module::Build を使用しても問題ありません。CPAN には Module::Build に関するものが十分にあり、ブートストラップすることに誰もがすでに取り組んでいます。
最後に、新しい configure_requires
このオプションを使用すると、CPAN シェルはモジュールのビルドを開始する前に Module::Build をインストールすることを認識できます。残念ながら、configure_requires について知っているのは最新の CPAN シェルだけです。
ああ、何をするにしても h2xs を使用しないでください (XS コードを書いている場合を除く)。そしてそれでも考えてみましょう)。
MakeMaker の長所:
- Perlが付属し、Perl Coreによって使用されます(したがって、積極的に維持され、永遠に維持されます)
- Makefile.PL をどう処理するかはすべてわかっています。
- ほとんどのモジュール オーサリング ドキュメントでは MakeMaker について説明します。
- MAKES(MAKEを知っている人はビルドプロセスにデバッグしてパッチを当てることができます)
MakeMakerの短所:
- make が必要です (Windows を思い浮かべてください)
- カスタマイズが難しい
- カスタマイズとクロスプラットフォーム化はさらに困難
- 何か問題が発生したときにデバッグするのが難しい (make を理解していない限り)
モジュール::ビルドの長所:
- カスタマイズ/サブクラス化が容易になる
- 純粋な Perl
- デバッグが簡単 (Perl です)
- いくつかの方法で MakeMaker をエミュレートできます
- CPAN シェルが Module::Build をインストールします。
モジュール::ビルドの短所:
- Module::Build メンテナー (そして実際には Perl ツールチェーン ギャング全員) はそれを嫌います。
- 古いバージョンの CPAN クライアント (CPANPLUS を含む) は、Module::Build について何も知りません。
モジュール::インストールの長所:
- 滑らかなインターフェース
- バンドル自体は既知のバージョンです
- Makefile.PL の扱い方はすべてわかっています
モジュール::インストールの短所:
- メイクが必要です
- 常にバンドル版を使用し、外部破損に弱い
- インターフェース以外でのカスタマイズが難しい
- MakeMaker の根性を台無しにするので、新しい MakeMaker リリースは最終的にそれを壊すでしょう。
- V2 Meta-Specを使用してMetaファイルを生成する方法がわからない(新しいツールではますます問題になっています)
他のヒント
ここで 2 つの質問があります。
まず、h2xs は決して使用しないでください。これは時代遅れの厄介なものですが、実際にヘッダー ファイルを XS コードに変換しようとしている場合には役立つかもしれません (私自身はやったことがありません)。
2011 年の更新:見てみることを強くお勧めします 距離::ジラ, 特に、複数のモジュールを保守する予定がある場合はそうです。
新しいモジュールを作成するには、Module::Starter を使用します。うまく機能し、出力をカスタマイズするための優れたプラグインがいくつかあります。
次に、どのビルド システムを使用する必要があるかを尋ねます。3 つの候補は、ExtUtils::MakeMaker (EUMM)、Module::Build (MB)、および Module::Install (MI) です。
EUMM は恐ろしく厄介な作品ですが、動作します。ビルド プロセスをまったくカスタマイズしていない場合は、問題なく動作します。
MB は新参者ですが、それを批判する人もいます。大きな利点は、インストールとビルドのプロセスを大幅にカスタマイズしたい場合、MB を使用してこれを賢明に (そしてクロスプラットフォームで) 実行できることです。EUMM を使用することは実際には不可能です。
最後に、MI は基本的に EUMM 上の宣言的なラッパーです。また、古いツールチェーン モジュールを使用してモジュールをインストールしようとするユーザーの問題を回避するために、ディストリビューションと一緒にそれ自体をパッケージ化します。「パッケージセルフ」トリックの欠点は、MI 自体にバグがある場合、それを修正するためだけにすべてのモジュールを再リリースする必要があることです。
カスタマイズに関して言えば、MI 用のプラグインがいくつかありますが、それを超えたい場合は、Makefile の処理と十数以上のプラットフォームにわたるツールの構築という問題に戻ることになるため、実際には役に立ちません。あなたはその領域に多すぎるのです。
たった今アップロードしました 配布::クッカー CPANへ。新しいディストリビューションを作成するために使用します。これの良い点は、ディストリビューションを好きなものにできることです。いくつかのテンプレートを作成しているだけです。誰が使っても気にしない。私にとって、それはシンプルでローテクであり、余分な問題を引き起こすことはありません。
次のようなものから始めるかもしれません モジュール::スターター スターター テンプレートを作成してから、独自の定型文やお気に入りの方法を追加します。各ファイルに何を入れるかだけでなく、どのファイルをディストリビューションに表示するかを選択します。自分のやりたいことがわかったら、自分のテンプレートを更新するだけです。
Makemaker と Module::Build については、 未来は Module::Build です. 。もうMakemakerを使っているのは我々老人だけだ。:) 両方を同時に使用する (または両方を使用しているふりをする) 方法があります。 Module::Build、Module::Build::Compat、および Module::Install のドキュメントを参照してください。. 。Module::Build は Perl の標準ライブラリから追い出されており、将来は不透明です。ビルド システムとして Makemaker に戻りました。
これはちょっと的外れな答えですが、それぞれを少し経験するために、それぞれを使用してみてください。
こちらもご覧ください ディストジラ これは、ディストリビューションを作成するための新しい作成者専用ツールです。これはディストリビューションの構築を支援するだけであり、コードに同梱されたり、インストールを実行したりするわけではなく、多くの強力な機能を実行できます。
Module::Build に関する互換性に関する唯一の問題は、ユーザーが CPAN クライアント (CPAN.pm または CPANPLUS.pm) を更新せずにモジュールをインストールしようとした場合です。CPAN からモジュールをインストールしている場合、クライアントも同様に簡単にアップグレードできます。同じ鏡から。
やりたくない場合は 何でも ビルドプロセスは確かに複雑です:EUMMを使用します。ただし、別のターゲット プラットフォームでビルドに問題が発生した場合は、Makefile に行き着く可能性があります。これは Make のバリエーションごとに異なります。
Module::Build は多くの機能 (拡張すれば何でもできる) を提供し、すべて Perl なので、メイクファイルをデバッグする必要はありません。Module::Install は機能を提供しますが、それをバンドルする必要があり、最終的にはすべてが「make」を介して実行されることになります。
Module::Build と Module::Starter ( TT2プラグイン).
Module::Build はどのような点でも優れていますが、ExtUtils::MakeMaker ほど広くサポートされていません (より具体的に言うと、古いバージョンの Perl はそのままではサポートされていません)。それはあなたのニーズによって異なります。
個人的には Module::Install をお勧めします。私の知り合いの多くも同様です。Catalyst や Moose の人々もこれを使用しています。
ここで、私が期待していた回答の方向性を少し明確にします。
- さまざまなフレームワークの長所/短所
- フレームワークの互換性/インストールベース
- 内部 (ローカル) の適合性と外部 (CPAN) リリース
- ない 単純な「X を使用する」という回答
デイブの答え 良い長所/短所の情報があります。 レオンの答え 互換性についてほのめかしていますが、明示的ではありません。として ブライアン・D・フォイが言及, 、古い帽子だけが EUMM を使用していますが、MB は 5.9 までコアの一部ではなかったため、CPAN 向けのものにとって良いフレームワークであるかどうかは確信が持てません。
どちらにも長所と短所があります。最近は Module::Build と Module::Starter を使用し、推奨しています。
EU::MM は依然として最も広くサポートされ、人気があるようですが、Module::Build が追いつきつつあります。また、チェックしてください モジュール::スターター 始めるのに役立つモジュールです。