この記事は?
この記事では、コマンド操作 (Character-based User Interface, CUI) が、マウス操作 (Graphical User Interface, GUI) よりも優れている点について語ります。
基本的にはLinuxのsh系シェルを中心に話を進めますが、Windowsは例外という訳ではありません。
実技的な話は少なめです。Linux、サーバ管理の勉強を初めたことでコマンド操作を余儀なくされ、コマンドについて知りたて触りたてであったり、コマンド恐怖症になりつつある初心者の方向けに書きました。
「コマンド」と言われると・・・?
「コマンド操作」と言われ、「難しそう」「何ができるか分からない」「GUI (マウス操作) でやらせろ!」と思われる方は、きっと少なくないことでしょう。大半の人は、コマンド操作に一度は抵抗を持ったことがあるかと思われます。少なくとも、一昔前の私もその一人でした。
Linuxを初めたての頃は、右も左も分からず、ブラウザで調べて見つけたサンプルコードを見よう見まねで打ち込み。何のメッセージも出てこなかったら、「これで良いのかな?よう分からんが、多分動いているからヨシ!」。よく分からない文がザーっと黒画面に流れた後にFinishとかSuccessとかが出てきたら「ホッ」。FailureとかErrorとか出てきたら「ガックシ」。
コンピュータ・情報技術の初期の時代は、PCはコマンド操作が基本。GUIはリッチな存在。時は流れ、ハードの性能が飛躍的に向上した現代では、GUIは当たり前の存在。GUIでほとんどこなせる現代なら、CUIは無縁では・・・?
コマンド操作のココが凄い!
ただ、そんなコマンド操作には、GUIには無い便利さがあります。しばらくコマンド操作を触って、私が見つけたコマンド操作の便利さを、この記事で紹介致します。
其の一 - 環境の依存が小さい
GUIの表示は、標準出力に比べ複雑です。GUIを表示しようとすると、どうしてもグラフィックライブラリが必要になってきます。外部ライブラリを用いるということは、必然的に環境の依存が大きくなってきます。
CUIだと、基本的に入出力は標準入力 (キー入力) と標準出力 (コマンド画面への文字出力) のみ。この機能はOSから提供されているものであるため、環境依存は必然的に小さいと言えます。(稀に、フォントの不揃い等によって正常な表示ができないこともあります。ただ、英数字のみが出力されるものであれば、表示の不具合はとても少ないです。)
其の二 - 目的の動作を高速に行える
GUIツールを用いて何かのファイルを処理しようとしたとき、大抵はユーザによる手動のマウス入力が必須です。例えば、単純に動画の変換をしたいだけだとしても、ソフトを立ち上げ、ファイルを選択し、設定を確認し、出力開始と、数ステップの操作が必要になります。また、選択した設定がいちいち戻されたりする場合は、操作ミスで違う設定で変換・・・なんて事態が発生することもあり得ます。
また、グラフィックの処理というのは、ある程度の負荷がかかります。ある程度の負荷がかかる訳ですから、起動も時間がかかります。「これをしたいだけなのに、ソフト起動に時間を奪われる・・・。」なんて経験をしたことが、少なからずあるかと思われます。
CUIアプリだと、コマンドを一発叩くと、(途中でユーザ入力が求められるもので無ければ) すぐに目的の動作が始まり、終われば次のコマンドの入力待ちになります。付与するオプションをそのままに入力ファイルを変えれば、同じ処理を簡単に他のファイルで実行できます。(オプション未指定時、入力・出力ファイルによって自動設定される場合もあり。)
複雑なグラフィック表示も伴わないため、(よほど下手な作りでなければ) 起動も動作も迅速です。一度起動・設定して以降はほとんど人の手が触れることのない、例えばサーバマシンの現場では、余分なUIや処理は極力抑えたいとされます。そういった現場では、GUIのアプリやライブラリがインストールされていない環境でのCUI操作が今でも現役であることは珍しくありません。
加えて、「GUIが変わってどこに何があるか分からん!」なんて事態も、CUIには無縁です。(稀にコマンドのオプション名が変わったり、非推奨になったりすることもありますが。)
其の三 - 目的の動作の自動化がしやすい
GUIにはできない (もしくはやり辛い) けどCUIでは手軽にできることの一つに、「(半)自動化ができる」という点があります。コマンドを並べてつくることのできる「シェルスクリプト (Windows ではバッチファイルとも)」。よく使う一連のコマンドをシェルスクリプトとして書いておけば、そのシェルスクリプトを実行するだけであっという間にいつもの作業完了。
シェルスクリプトでは、一連のコマンドをループで実行できるループ構文や、状態によって実行するコマンドを変える条件分岐構文が用意されています。また、正規表現を用いることで、ファイルパス等の文字列の処理を行うことも可能です。これらを活用すれば、指定した当該ファイルの数だけ一定のコマンドをループさせて全ファイルに処理を行ったり、あるファイルを複数のソフトに順番に処理を通したり、といった芸当もシェルスクリプトではおちゃのこさいさい。
仮に、これをGUIで実現しようとした場合、マウス操作のクリック判定位置やウィンドウ表示の変化等の情報を取得し、無理やりマウス操作をエミュレートすることになるでしょう。不可能ではないとしても、かなり大掛かりになります。(当然ながら、GUI表示の処理は余分ということになります。)
コマンド操作の弱いトコ
CUIがGUIに勝る点を述べてきましたが、当然その逆のCUIがGUIに劣る点もあります。
例えば3Dモデリングや動画編集等は、普通は常に完成形を確認しながら作業を進めるものです。CUIでは3Dモデルや画像等の複雑な表示や、マウスやペンタブレット等による複雑な入力はできません。そのため、
起動速度の観点においては、例えばディスクパーティションソフトのように頻繁には使用しないソフトでは、そこまで起動速度を重視しなくとも問題は少ないです。(起動だけで精一杯のような弱いマシンでは話は別ですが・・・。) すると、(よほど下手なGUIでなければ) 状態が図で確認しやすい方が利用しやすいです。私も、ディスクパーティション設定なんかはGUIに甘えます。(例えばGParted。)
おしまいに
コマンド操作は取っ付きにくいと感じるのは事実と思います。初めたばかりの頃は、何を打っているのかさっぱり分からないこともあるかと思います。コマンドを打つ時間よりも調べる時間の方が長いこともよくあることと思います。ただ、そこまでハードルが高いと心配するものでもないかと私は思います。こういうのは、時間をかけてしだいに慣れてゆくものですので。
以上、コマンド操作の凄いコトに関してでした。