2009-04-18 14 views
4

CLIインターフェイスの有用性を左右するパターンはどれですか?ユーザビリティのためのCLIパターン/反パターン

例として、ClearCaseのCLIについて考えてみましょう。 CLIは非常に包括的(+1)ですが、いくつか目立つ機会があります。最近、ファイルを小文字にして、clearfsimportを使用してClearCaseに強制したかったのです。残念なことに、私はそのいとこの文書clearimportに書いています。それはわずかに見えるかもしれませんが、私が認めようとするよりも時間がかかります。真ん中の変化が私を得ました。

ほとんど同じ機能をこのようにほぼ同じ名前で提供するのはなぜですか?私の意見では

  • clearimport -fs
  • fsclearimport
  • clear_fs_import
  • clearimport_fs

何が、彼らは一緒に行ったものよりも良いだろう、より良い多くのオプションがあります。私が作業しているコード CLIとこの経験から私は自分の選択肢を見ていました。私はすべての基礎をカバーしていると思っています(標準的なヘルプ、ロングフォームとショートフォーム、短い意味のある名前、例の提供、あいまいさの排除、引用符内のスペースの正確な処理など)。

この件に関してはliteratureがあります。

悪いCLIはおそらくbad APIと違っていません。 CLIはある意味でAPIのタイプです。目標は当然共通です::柔軟性、可読性、完全性。典型的なAPIとCLIを区別するいくつかの要因があります。 1つは、CLIがスクリプト性をサポートする必要があることです(おそらく、一連のパイプで何回も参加する必要があります)。もう一つは、オートコンプリートと名前空間が同じ方法で存在しないということです。あなたはいつも素敵なカラフルなGUIを持っているとは限りません。 CLIは外部から直接顧客に文書化する必要があります。そして最後に、CLIのオーディエンスは標準APIとは大きく異なります。あなたが持っている洞察力に感謝します。

+1

> "この質問でも、あなたの暴言は大歓迎です!" - このコミュニティウィキを作ろうとしているかもしれません... – Shog9

+3

@ Shog9あなたはキックする子犬がいませんか? – ojblass

答えて

9

私はコマンドラインSubversionクライアントで実装されているように私がよく知っているサブコマンドパターンが好きです。サブコマンドなし

svn [subcommand] [options] [files] 

、私は効果的にそれらを覚えているためSubversionはwaaaaayあまりにも多くの異なるオプションを持っているでしょうし、ヘルプシステムを通じ強打する苦痛だろう。

しかし、私はどのように任意の特定のサブコマンドの作品覚えていない場合、私は入力することができます。

svn help [subcommand] 

を...そして、それは私のヘルプドキュメントの関連部分のみを示しています。

+0

サポートしている両方のタイプが混乱していますか? – ojblass

+1

さて、サブコマンドのパターンを使ったソフトウェアは書かれていません。だから私は原作者の視点から、それをサポートすることについてあまり知らない。ユーザーとして、私はそれが非常に便利だと知っています。 – benjismith

+0

私は全く同意します。 「svn update」は入力するのに時間がかかりますが、仮想的な「svn -u」よりも覚えやすいです。私はしばしばsvnコマンドラインを使用しません。 –

4

上述したように、このフォーマット:

[master verb] [subverb] [optionally, noun] [options] 

は、コマンドが利用可能であるか覚えておくの面で良いです。 cvs、svn、Perforce、git、これにすべて従ってください。 CLIの主要な問題であるコマンドの検出可能性が向上します。ここで起きる1つのしわは、副詞のmaster-verbとoptionsのオプションです。私。、

cvs -d dir command bar 

cvs command -d dir bar 

は異なるこれはsvnは任意の順序で指定したオプションを可能にすることによって "固定" CVSにおける混乱状況でした。あなた自身の解決策は異なるかもしれません。あなたがマスタ動詞にオプションを渡す非常に良い理由があれば、大丈夫です。オーバーヘッドに気をつけてください。

APIの使いやすさは良い考えですが、CLIコマンドには実際の入力がないことに注意してください。また、CLIコマンドの「戻り値」には多くの豊かさがあります。リターンコード動作する出力があります。 unixy/streamsの世界では、通常、出力は戻りコードよりもはるかに重要です。あなたの出力の形式を取得することは非常に重要です。また、魅力的ではあるが、stdoutとstderrに異なるものを送ることは必ずしも有用ではないことが分かった。初心者や中間ユーザーでさえ混乱します(ほとんどの場合、両方ともコンソールにダンプされるため)、まれに有益な上級ユーザーはほとんどいません。それが本当に必要でない限り、私はそれを避けます。プログラマがエラーを標準エラー出力にダンプしたからといって、コマンド出力がなぜエラー状態になったのか、(例えば)誰かが非常に混乱するのは非常に簡単です。

デザインのもう1つの問題は、「次に何か」の問題です。 GUIでは、使用可能なボタン、メニューなどによって、ユーザの次のステップが記述されます。CLIでは、ユーザは文字通り任意のコマンドを入力し、任意のコマンドを他のコマンドにパイプすることができます。 (または、少なくとも試してみてください)典型的なワークフローの潜在的な次のステップについて、ヒント(ヘルプまたは出力のいずれか)を与えるようにコマンドを設計します。

もう1つの良いパターンは、ユーザーが出力をカスタマイズできるようにすることです。ユーザがcut,sortなどを使用して出力を調整することは可能ですが、フォーマット文字列を指定できることはコマンドのユーティリティを拡大します。私がここに引用している例はtopです。これは、あなたが望む列を伝えることができます。

関連する問題