コマンドラインインターフェイスとは? コマンドラインインタプリタとの違いも紹介
今回のテーマはCLIツールのデザインだ。コマンドラインインターフェイスは、ユーザが文字列やコマンドを入力してプログラムに命令を送るユーザインターフェースである。GMOペパボの小山健一郎氏は「コマンドラインインターフェイスはインターフェースであり、ここでいうインターフェースはユーザとプログラムをつなぐ境界」だと説明する。
なお読者の中には、Character user interface(CUI)の表記のほうが親しみやすい人がいるかもしれない。しかし、ここではCLIの表記を使用する。
ところで、「コマンドラインインタプリタ」というコンポーネントがある。これは、ユーザから入力される文字列やコマンドを解釈して、OSやプログラミング言語処理系に渡すものだ。代表的なものにUNIXシェルの「Bash」や「Bourne Shell」、Rubyの「irb」、PHPの「`php -a`」などがある。コマンドラインインタプリタでは、
- 入力を読み取る(Read)
- 入力文字を実行・評価する(Eval)
- 実行結果を表示する(Print)
- 入力の読み取りに戻る(Loop)
を順に行い、これらはREPLと呼ばれる。
では、コマンドラインインターフェイスへの認識を合わせたところで、CLIツールへと話題を移そう。CLIツールは、コマンドを入力することでUNIXシェルから実行されるプログラムだ。「ls」「composer」などが該当する。また、CLIツールは実行時に引数、フラグ、標準入力などを入力として受け取る。つまり、コマンドラインインタプリタを通じて実行され、出力を返すプログラムがCLIツールとなる。
CLIツールのデザインにはさまざまな側面がある。今回は、どのようなコマンド体系をユーザに提供するのかという「コマンド体系のデザイン」と、どのようなアーキテクチャを採用するのかという「ツールとしての実装のデザイン」の2つの側面から、CLIツールデザインについて議論する。