Command Line Interface Guidelines(CLIG)は、伝統的なUNIXの哲学にヒントを得た、コマンドラインプログラムのベストプラクティスと背景となる原則を再確認するためのオープンソースのガイドである。InfoQは今回、その詳細を知るために、筆者らと話すことができた。
CLIGは数多くの基本的原則に基づいている。そのひとつが、CLIプログラムは人間向けに設計されると同時に、より複雑なシステムを構築するために構成されるものでもあるべきだ、という考えである。さらに、ユーザビリティを向上させるためには、効果が証明されている既知のパターンに従うコマンドラインインターフェースであることも必要だ。この点からCLIは、機能を見付けられること、対話的な操作のサポートを目指すこと、さらには堅牢であることが必要とされる。これらに比べると一般的ではないが、従うべき原則としてCLIGの著者らが挙げているのは、共感(empathy)とカオスである。
Command Line Interface Guidelinesは多数の例と提言を示しつつ、引数やフラグ、エラー、出力、サブコマンド、設定などの話題を取り上げる。その内容はここで要約可能な範囲を越えているが、InfoQは今回、CLIGの著者らから、その詳細について学ぶ機会を得た。
InfoQ: Command Line Interface Guidelineを執筆しようと思った理由について教えてください。おもな目的は何ですか?
始めは、現実的な必要性からでした。Benの会社であるReplicateはCLIツールを開発しているのですが、ベストプラクティスに関するよいリソースを見付けられないでいました。その彼が、Carlの書いた"The Poetics of CLI Command Names"というブログ記事を読んで、Carlとコラボレーションを始めました。その後、Benと一緒にDocker Composeを開発していたAanandが加わりました。彼らはその設計作業の経験から多くのものを学んでいたので、それを共有したかったのです。
書き足しているうちに、これはコミュニティに貢献できるよい機会なのではないか、と思うようになりました。優れたCLI設計を促進するために、CLIGが少しでも役に立てればと願っています。
InfoQ: CLIGでは、"CLIプログラムは主に(あるいは常に)人が使う"のだから、人のために設計されるべきだ、という考えから、"人間優先の設計"という原則を打ち出しています。ですが、他のプログラムからの利用というのも、CLIプログラムの基本的なユースケースのひとつです。この2つの目標は矛盾していませんか?
そのとおりです。それはCLI設計の中心的な課題であって、CLIGのアドバイスの多くは、私たちがその2つの目的に応じようとする中で学んだ方法論そのものなのです。
InfoQ: CLIGの基本である思想的原則の中に共感とカオスが含まれているのは、少し意外に感じられるのですが、これらがなぜ重要で、ツールのCLI定義のプロセスにどのような影響を与えるのか、詳しく説明して頂けますか?
設計のよくないコマンドラインプログラムを使って苦労した経験は、誰にもあると思います。そんな苦労は誰も望んでいません。CLIGを手掛ける中で、ある時私たちは、コマンドラインプログラムを使う上で、その機能的なパワーだけでなく、使う楽しさも重要であることに気が付きました。それがつまり"共感"という部分なのです。
カオスは単に、CLIの制約の中にある自由、ということを原則として言いたかっただけです。ツールを新しい、予期していなかった方法で使用することを可能にするという意味で、一貫性は望ましいものですが、度を過ぎると斬新さがなくなってしまいます。CLIの設計について、自分自身で考えてほしいのです — それが、すべてが完了しているように見える空間の中で、イノベーションを起こす方法なのです。
InfoQ: 開発者コミュニティの反応はどうでしたか?ロードマップについても教えてください。
CLIGへのトラフィックの量には驚かされました。最初の1週間で、600ものGitHubスターをもらったのです!信じられません。CLIGのようなものを、人々が長く待ち望んでいたという、何よりの証拠だと思っています。些細な部分に対する声高な指摘ももちろんありました — 読者はソフトウェアエンジニアなのですから、細かい部分を指摘するのは当然でしょう — が、全体としては、好意的に受け取られています。ですから、ロードマップの次のステップは、そうしたフィードバックを詳しく調べて対処することです。
CLIGのルールは不変ではないので提案はいつでも受け入れたい、と著者らは述べている。
Command Line Interface Guidelinesは、SquarespaceのエンジニアであるAanand Prasad氏、ReplicateとDocker Composeの作者のひとりであるBen Firshman氏、SmallStepのデベロッパアドボケートでZipcarのファーストエンジニア、Troveの創設者のひとりでもあるCarl Tashian氏、SquarespaceのテクニカルライタでO'ReillyのコントリビュータであるEva Parish氏によって作成されている。