コマンドラインインタプリタ

Bashのスクリーンショット

コマンドラインインタプリタ: command-line interpreter / command line interpreter)は、コンピュータのコマンドライン、すなわち、ユーザによりキーボードなどから入力される文字列によるコマンド(指令あるいは命令)のライン(行)を逐次解釈し、オペレーティングシステム(以下、OS)やプログラミング言語処理系などに渡すものである。

OSの標準ユーティリティとしてはコマンドラインシェルがある。いくつかのプログラミング言語処理系が持つそれに関してはREPL (Read-Eval-Print Loop) も参照のこと。

コマンドラインインタプリタが動いている具体的な画面はコマンドライン・インタフェースcommand-line interface、略してCLI)と呼ばれている。キャラクタユーザインタフェースを構成する要素である。

interpreterは、日本語では「解釈プログラム」[1]などと訳されるため、command-line interpreterを直訳するならば「指令(命令)行解釈プログラム」となるが、一般的ではなく、そのまま外来語カナ表記されることのほうが多い。なお、『JIS X 0007:2001 情報処理用語-プログラミング』でも、interpreterは「インタプリタ」とカナ表記されている。

UNIXおよびUNIX系のもの

これら以外にもかなりの種類があり、詳しくはUnixシェルの項目で解説されている。

その他、テキストエディタEmacsは、コマンドラインインタプリタの機能も備えている。

なおWindows上でもCygwinをインストールすれば、これらの(UNIX系用の)シェルは(大抵は)動く。

macOSのもの
Mac OS Xのターミナルの画面(bashが動いている状態)

macOS(Mac OS X / OS X)はBSD UNIXをベースにしており、ターミナル (Terminal) という名のUNIX端末エミュレータ画面を開くことでUNIXのシェルが起動する。

起動する標準シェルは変化してきた経緯があり、最初はtcshだったが、その後バージョン10.3 (Panther) でbashバージョン10.15 (Catalina) でzshとなった。

なお、かつてのClassic Mac OSには(つまり初代MacintoshのOSから2001年発売のMac OS 9までは)コマンドラインインタプリタは基本的には無かった。すべてGUIで操作するという設計思想だったのである[2][3]。ただし1988年から1995年にかけてMacintoshのマシン上でSystem 7 (Mac OS 7) とともに動くA/UXというUNIX OSが販売されていた時期(だけ)は、それを別途購入してインストールすれば、CommandShellという画面を起動してシェルを使うことができた。

マイクロソフト社が開発にかかわった経緯のあるもの
Windows PowerShell 1.0の画面
なおMicrosoft Windowsのメニュー項目や画面タイトルとしては、英語版では「Command Prompt」、日本語版では「コマンド プロンプト」と表示されるので、その呼び方も親しまれている(一般的な技術用語としてのコマンドプロンプトとは別物である)。
IBMのマシン(やそれに倣ったマシン)のもの
もう使われていない古いマシンの例。PDP-11で動いていたRT-11というOSを、写真のVT100という端末で操作し、helpコマンドを入力して得られた画面表示。

ユーザインタフェースとしてのコマンドライン

コマンドラインインタプリタによって実現されるユーザインタフェース (「コマンドラインインタフェース」、CLI) は、有効で簡潔なたくさんのコマンドを発行する環境をユーザに提供する。一方でこの環境は、コマンドやそのパラメータの内容や、それらの構文を覚えることを(多かれ少なかれ)ユーザに要求する。


初期のコンピュータはその計算機資源の制約からも文字端末による操作が主流であった。その後GUIも発達したが、Unix系環境におけるコマンドラインシェルや、NT系以降のWindowsにおけるcmd.exeなど、GUI経由の操作では煩雑になり過ぎる指示や作業を簡潔に効率良く行うためのインタフェースとして、GUIと相互に補完する関係にあり、必要に応じて使い分けるという住み分けになっている。

また、シスコシステムズなどのルーターの操作インタフェースとしては GUI も提供されているものの、大半のユーザは CLI を使用している。3D CADソフトウェアのひとつRhinoceros 3Dでも、アイコンによるGUIやプルダウンメニューに加えコマンドラインが用意されている。

スクリプト言語

多くのコマンドラインインタプリタは、1個の動詞的な語による表現から成るような、単純な命令だけではなく、条件分岐による繰返し等に代表されるある種の制御構造などといった、スクリプト言語的機能も持ち合わせていて、特に操作者にとって苦痛となる単純な繰り返し作業などを軽減できることが多い。またシェルにおけるシェルスクリプトのように、外部ファイルにまとめて記述されたコマンドを実行できるコマンドラインインタプリタもある。

あるいは逆に、多くのスクリプト言語の処理系は、ソースコードが書かれたファイルを指定して実行するだけではなく、内蔵の、あるいは外付けのコマンドラインインタプリタを持っている。(例えばPythonの場合、CPythonは何もコマンドライン引数を付けずに起動すると内蔵の簡易なコマンドラインインタプリタが入出力するモードになる他、外付けでより強化された環境を提供しているIPythonがある。一方、Rubyの場合は、CRuby(MRI)は内蔵のコマンドラインインタフェースを持たず、標準添付のirbコマンド(Interactive Ruby)が標準のコマンドラインインタプリタで、より強化された環境としてはPry英語版がある)

BASIC(本来のBASICであるダートマスBASICでは少し異なるのだが)のように、言語自体がコマンドラインインタプリタからのコマンドで操作されるよう設計されている場合もある(たとえば、行番号を前提とした構文は、入力の先頭にあるトークンが整数として解釈できればプログラムの入力であると判断する、などといったように、テレタイプ機を入出力装置として利用していた時代に便利なように設計されたことを反映している)。

LISPなどの一部の言語では、入力された文字列を構文解析してプログラムの構造を読み込むことができる「read」、それを評価する「eval」、評価結果を(値を)文字列として出力する「print」、といったルーチンがユーザに公開されているので、それらを組み合わせて繰り返す(loop)ことで簡単に簡易コマンドラインインタプリタを作ることができる。それを「Read-Eval-Print Loop」、略してREPLという。

IBMのREXXのように、他の言語を入力中に含ませられるようなフレームワークを持っているものもある。

脚注

出典

関連項目