サブコマンドはUNIX哲学と相反していないのか
「UNIXという考え方」に書かれているUNIX哲学に「各プログラムが一つのことを上手くやる」というのがある。それとサブコマンドは矛盾するんじゃないかと感じていた。一つのプログラムが複数のことを実行できるじゃん、という。
最近は以下のように思うようにあった。
- サブコマンドを持つようなツールの名前自体は「名前空間」である
- 「サブコマンドが一つのプログラム」だと考えればいい
汎用的なコマンドラインツールはグローバルな名前になるので、名前の衝突には気をつける必要がある。今や多くの開発者がコマンドラインツールを書くようになった。
また、コンテキストを同じくした複雑なツール群を提供する場合、名前空間的なものはあったほうが良いのは確かでしょう。例えば git
のサブコマンドが全部バラバラのコマンド名だったら発狂してしまう。
最近、僕はGoでツールを書く事が多いが、サブコマンドを採用せずに各々のコマンドでビルドバイナリを作ってしまうと、スクリプト言語と違い、容量も大きくなってしまうという現実問題もある。
なので、サブコマンド自体は許容できるが、サブコマンドを持つツールは、サブコマンド同士の実装が疎になるように設計しないといけない、と思うようになったのが最近の心境です。