はじめに

この記事は 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 屋にとっては不便だと考えています。