自作のsum-upというモジュールの紹介記事がNodejitsuのブログに掲載されました。そこで、日本語訳の作成・公開の可否を記事作成者に伺ったところ許可を頂けたので、Gistにて公開します。Thanks again, Alex.

https://gist.github.com/shinnn/908bced575270f6ef80e

もともとのドキュメントにはほとんどAPIしか書いていないのですが、それでも当該モジュールの設計思想を忠実に文章化してもらえています。自身の思想が自然言語ではなくコードを介して伝わったことは、いちプログラマーとして非常に嬉しく思います。

NodeのCLIフレームワーク

NodeのCLIフレームワークでこれさえ使っていれば安心、というものは未だにありませんし、これからも登場しないでしょう。ユーザーとの対話の仕方はツールによって大きく異なるでしょうし、あらゆる状況をカバーしようとすればどんどん肥大化していきます。

YeomanのCLIであるyoのGithub issueにてCLIフレームワークnashの導入が提案されましたが、「より小さいモジュールを使うべき」という反対意見もあって未だに採用はされていません(2015年2月13日時点)。実際、nashは少なくない数のファイル依存モジュールの読み込みを必要としますし、nashの提供する機能のうちのごく一部しか使わないのであれば、それはオーバーヘッドコストとなります。(ちなみに現在yoが採用しているmeowというフレームワークは、小ささという点では非常に優れた設計なのですが、微妙な要求との差異から筆者は未だに採用していません。機会があれば使いたいものです)

フレームワークからモジュールへ

そんな中で私がCLIツール作成の際に採っている手法は、必要な各機能ごとに別個のモジュールを使うやり方です。

個別の機能ごとに小さなモジュールを使えば、CLIツール起動時の初期化コストは抑えられますし、先述のツールごとの設計の差異にも(フレームワークを使った場合に比べて)柔軟に対応できます。argument parserにはminimist、標準入力対応にはget-stdinなど、それぞれの役割に特化したモジュールを使っていけば良いわけです。そして、そういった方針のもとに、ヘルプテキストの表示のために作成したモジュールがsum-upです。いくつかのCLIツールで実際に導入しています。

コード内での具体的な使い方は、上記のリポジトリで確認することができます。

外部コマンドを実行するNodeプログラムの作り方
BroccoliプラグインをAPIを使ってテストする