macroscope

( はてなダイアリーから移動しました)

コマンド行インタフェース (command line interface) と GUI

【まだ書きかえます。いつどこを書きかえたかを必ずしも明示しません。】

- 1 -
【約 1年まえ、Linux をつかった計算機実習をはじめるにあたって、背景知識を整理しようと思ったのだけれど、記事にするのは 1年後のいまになってしまった。】

人がディジタル計算機をつかうときには、人と計算機のあいだで情報をやりとりすることが必要になる。そのうちとくに、人が計算機にどんな作業をしてもらいたいかを指示することが必要になる。

ディジタル計算機がつかわれはじめた初期には、電気回路のスイッチを on / off することで 1ビットずつの情報を計算機におくりこんだこともあったそうだ。

しかし、すでにタイプライターという事務機器はあったし、タイプライターと似たものを通信回線につないだテレタイプもあった。人と計算機とのあいだでやりとりする情報は、原則として、文字の形をとることになった。計算機と利用者との情報のやりとりのしくみを user interface とよぶことにすれば、文字による user interface、いわば character user interface (広い意味) が発生した。

【アルファベットの大文字と数字は6ビットで区別できた。小文字をふくめると7ビット必要になった。二進法の計算機では数量のまとまりは2のべき乗のほうが便利だから、8ビットを1バイトとし、1文字を1バイトであらわすのがふつうになった。日本語の漢字は1バイトでは区別できず、1文字を2バイトであらわすことになった。しかし1980年ごろの計算機環境では、1文字1バイトが原則で、1文字複数バイトは拡張機能というべきあつかいだったと思う。2000年ごろ以後になって、1文字が何バイトであらわされるかは一定しないのがふつうになった。】

- 2 -
タイプライターで文章をかくときは、ひとつひとつの文字を意識することもあるが、文字がつらなった「行」を意識することが多い。欧文タイプライターの印字部 (ヘッド) は、ふつうは左から右に1字ぶんずつ動いていくが、行の終わりでは左端に帰る。この動作が carriage return (CR) だ。行のおわりでする動作はもうひとつあって、紙を上に1行ぶん送る。この動作が line feed (LF) だ。テレタイプのような機器も、この CR や LF のような制御コードを送って操作することができた。【行の終わりを、CR であらわすか、LF であらわすか、CR と LF をくみあわせてあらわすかは、いまも一定していない。ここでは抽象的に「改行」(英語では newline) と表現しておくことにしよう。】

改行を特別あつかいすることによって、文字列は、行がならんだものとしてとらえることができる。人が計算機に情報をおくるばあいに、1文字ごとではなく、1行ごとにおくる、というあつかいをすることができる。

他方、英語や日本語などの人間の言語の文章は、文 (sentence) がならんだものという構造をもっている。書きことばでは、句読点の約束があって、文のおわりは、原則として、英語ではピリオド (「.」)、日本語では まる (「。」) でしめされる。

人が計算機に指示をおくるための表現は、人間の言語そのものではないが、同様に、文という単位で構成したほうがよいと考えられるようになった。

文と行とは同じ概念ではない。しかし、計算機に指示をおくるための言語にかぎっては、文の切れめはかならず行の切れめでもあるように約束をきめることができる。逆に、行の切れめはかならず文の切れめでもある、と約束することもできる。しかし現実には、行の長さは、装置のハードウェアの制約できびしく決められていることが多い。(わたしが経験したうちでは、80バイト、132バイト、255バイトなどがあった。) 他方、送りたい指示の文の長さは、たくさんの対象を列挙したいこともあるので、行の長さの制約にしばられたくない。そこで、計算機に指示をおくるための言語の形式のうちに、複数の行をつかってひとつの文を表現するための、たとえば「継続行」などとよばれるしくみがふくまれていることが多い。しかし、行と文とが1対1に対応しないのは例外とし、対応するのを原則とすることができる。こうして、「コマンド行」 (command line) による user interface のスタイルが確立してきた。

ちかごろの計算機システム上では、いろいろなソフトウェアが、コンソール (console) あるいは 端末 (terminal) という画面をもっている。その画面の中に「プロンプト」 (prompt) が出ていて、人が文字をうちこむことができる。人が改行コードで終わる1行をうちこむと、計算機はそれに応じた動作をして、それからつぎのプロンプトの状態になる。【もともと、コンソールは計算機本体に直結した制御装置であり、端末は通信線でつながった別の装置だったにちがいないのだが、いまではほとんど区別なくなっている。なお、Microsoft Windows ではここでいうコンソールにあたる画面の表題が「コマンド プロンプト」となっている。】

- 3 -
コマンドをひとつずつ計算機に送って応答をまつ、という、いわば対話型のつかいかたができると、つぎには、複数のコマンドを (改行でくぎって) まとめて計算機におくって処理させる、というつかいかたもしたくなる。とくに、時間がかかる処理をさせるときには、コマンドをまとめて投入して、人がコンソールの前で待っていなくてもよいようにしたい。このような処理を「バッチ (batch) 処理」ということがある。

また、ほぼ同じ処理を対象をかえてくりかえしたいときや、なにかの条件がそろっているときだけ処理をさせたいことがある。そこで、コマンド行を組みたてて実行するプログラム言語のようなものが発達してきた。Unix系のOSでシェル (shell) というのは、語源は OS のカーネル (kernel) に対する周辺部をさしているが、コマンドを実行するためのプログラム言語処理系のようなものである。そして、シェルに処理させるために利用者がコマンドを記述したファイルをシェルスクリプト (shell script) という。

【Unix で最初に発達したシェルは sh というコマンド名で、Bourne shell ともよばれる。そのつぎに csh (C-shell) ができた。1980年代には、対話型でつかうには csh がよいがシェルスクリプトには sh がよいといわれた。csh の改良版の tcsh ができて、わたしは 1990-2000年代にはシェルスクリプトもそれで書いていた。しかし、参考例に sh の上位互換の bash によるものがふえてきたので、わたしも 2010年代からは、対話型利用も、シェルスクリプトも、bash にきりかえている。】

- 4 -
コマンドをどのような文法で構成するかは、自明ではないと思うが、現実に実現した多くのコマンドの体系は、英語の命令文の影響をうけていると思う。英語の語順は、動詞のあとに、目的語や、場所をしめす補語などがくるのがふつうだ。そして、命令文は、主語が省略されて、動詞からはじまる。計算機に対する指示ならば、意味上の主語は指示をうける計算機であり、省略してよい。

そこで、コマンド行の最初にくる語 (コマンド名) は、計算機がすべき動作をあらわす動詞のようなもので、そのあとにつづく語 (引き数 argument とか、オペランド operand とか、パラメータ parameter などといわれる) で、その対象となるもの とか、移動もと とか、移動さき とかをしめす形をとる。

- 5 -
コマンド行インタフェースと対照的なものとして、GUI (graphical user interface) というものがある。

【1980年代後半から1990年代前半、GUI は計算機利用のあたらしいスタイルとして流行していたと思う。わたしはそのころ、計算機で図形を処理していて、それは図形による user interface だと思っていたのだが、世間でいう GUI の話とはまったくかみあっていなかった。わたしがやっていたのは、計算結果によって図をつくること (たとえば世界の大気中の水蒸気量や風の分布を地図上に表示すること) だった。計算機から人への情報の流れについての技術だった。いわゆる GUI の話題の中心が、人が計算機に指示をだす方法だったことに、わたしは GUI があたりまえになって、自分も意識せずにつかうことがあるようになってから、ふりかえって気づいたのだった。】

GUI の前提として、計算機が表示した図形の中の位置を、人が指定することができないといけない。ライトペンなどで画面上の位置を直接しめすこともこころみられたが、1980年代後半に普及したのは、画面と直接関係ない机の上でマウスを動かすことに連動して画面上のポインタが動くようにするしかけだった。【わたしはその利用を早くからためしはしたが、なかなかなじめず、日常につかう気になったのは1990年代後半だった。】

そして、GUIの利用の典型は、(いまどきの Microsoft Windows ならば「エクスプローラー」で) ファイルの一覧を表示させたうえで、そのうちどれかのファイルを (マウスポインタで) 選択して、それを消したり、コピーしたり、(「メモ帳」などのエディタをよびだして) 編集したり、そのほかなにかのプログラムを呼び出して処理させたりすることだろう。

この操作をふりかえってみると、対象物を指定することがさきで、それをどう処理するかを指定することのほうがあとだ。さきほどのべたコマンドによる操作では、処理の指定のほうがさきで、対象物の指定のほうがあとだった。GUIにともなってこのような順序になったのは、プログラミングのほうでいう「オブジェクト指向」と、まったく同じことではないとしても、同様な発想にちがいない。

- 6 -
さきに対象を指定し、あとで処理を指定する、という手順は、GUI にかぎることはない。文字を表示させた画面の中をカーソルキーによって移動することによって実現することもできる。これを、狭い意味の character user interface (CUI) ということにしよう。

実際、わたしは、1990年代には、ファイル操作をおもに CUI でやっていた。いくつものソフトウェアをつかったが、とくに頻繁につかったのは、NEC PC9801 の MS-DOS 上で動いた「FD」と、それとにたつかいがってで、Unix系OS の 端末画面上で動いた「fd」(あるいは 「FD Clone」) だった。

このようなソフトウェアが能率よくつかえた前提として、第1に、文字フォントの幅 (横方向の長さ) が一定であること、があった。実際には、日本語の漢字などの2バイト文字と、アルファベットなどの1バイト文字とのフォントの幅は、同じではなかったが、ちょうど2倍になっていた。第2に、カーソルキーの動作に対する画面の追随が速いこと、があった。このふたつの条件によって、どのカーソルキーを何回おせば、画面上の長さとしても、文字数としても、どれだけ移動するかが、まぎれなく予測できたのだ。

- 7 -
【読者のやくにたつかどうかわからないが、わたし自身の計算機利用のスタイルをふりかえってみる。

わたしは、1980年ごろから、大型計算機の端末と、パソコン内蔵BASIC、それから MS-DOS のコマンドプロンプトで、コマンド行インタフェースで計算機をつかうことに習熟した。

1990年ごろから、Unix系OS上の X Window Systemをつかうことがあり、表示装置上のどこにどのソフトウェアの画面を置くかはマウスで操作するようになった。しかし、それぞれのソフトウェアの起動は端末画面からのコマンド行によることが多かった。他方、MS-DOS上では、「FD」などで CUI 操作をすることがふえた。しかしコマンド行操作もつかいつづけた。自分がよくつかうコマンドをあらかじめコマンドパスにいれておくことを習慣にしていた。

1997年ごろから、DOSにかわってWindows (95 以降) をつかうようになった。Windows でも「コマンドプロンプト」の窓をひらいてコマンド行操作をすることはできたが、コマンド本体がどこにあるかあきらかでなく、あらかじめコマンドパスを指定しておく方法もめんどうだった。またDOS上で動いていたCUIソフトウェアのWindowsへの移植はあまりすすんでいなかった。わたしはしかたなく、WindowsではGUIでファイルを選択して処理するようになった。

2011年ごろから、わたしは Unix系OSをつかう頻度がへり、文書作成などを Windows 上でするようになった。ファイル操作は GUIでする習慣ができてしまい、Unix系OS上でもコマンドラインによる操作がにがてになってしまった。2021年からまた Unix系OSをつかう必要性がふえてきたので、また訓練しないといけないと思っている。】

- 8 -
計算機のつかいかたにもいろいろあるが、すくなくともわたしの専門分野では、データだけを変えて同じ処理をくりかえすことや、データの量が多くて利用者が見ているあいだに処理が終わらないことが、たびたびある。シェルスクリプトのたぐいをつかえるようになっておいたほうがよい。その基本として、これから計算機をつかうみなさんには、コマンド行インタフェースによる計算機のつかいかたを経験しておくことを、ぜひおすすめしたい。