はじめに
この記事は Perl Advent Calendar 2021 の 1日目の記事です。
この記事では、モジュールに CLI コマンドとしての機能を兼ねさせるための コードの書き方について、いくつかの設計パターンを取り上げ、 それぞれの長所短所を私 hkoba の個人的な経験から論じます。 言語としては主に Perl を取り上げますが、他の言語にも適用可能な部分はあるはずです。
モジュール兼コマンド(Modulino - モジュリーノ)とは?
この記事で論じる「モジュール兼コマンド」とは、
-
他のプログラムから使われる モジュールとして書かれたコード であり、
-
同時に、 単体で CLI コマンドとしても実行可能 なもの
のことです。Perl の界隈では、このようなプログラムに Modulino(モジュリーノ)という呼び名が提唱されています[brian d foy(2004)]。 他の言語における呼び方はStackOverflow で質問した範囲では判明しませんでした。 この記事では以後 Modulino と表記します。
Perl で書かれた Modulino の例(※) Hello.pm
#!/usr/bin/env perl
package Hello;
sub run {
print "Hello world!\n";
}
run() unless caller;
1;
※ 私の Modulino の紹介では、モジュールに #!
と実行ビットを付与することを前提としています。brian d foy や Gabor Szabo の記事では、そうでないものが多いようです。Windows への配慮なのかもしれませんが、Unix 屋にとっては不便だと考えています。