皆様どうも、こんにちは!
こまりのソフトウェアエンジニア、桑木です。
前回の記事で、仕方なくCUIを使う時に必要なことをコーダー向けに書きました。しかし、そもそもCUIとは何でしょうか。人によっては、CUIはマニアやハッカーのような人たちが使う物というイメージがあるかもしれません。
WindowsなどのGUIが一般に普及してからCUIに出会う機会は減りました。また、GUIはCUIと比べると使い方がわかりやすく、使い始めるにあたって覚えることも少なくて済みます。しかし、わかりやすさと作業効率の良さは別の問題です。GUIとCUIのどちらでも同じ作業ができる場合、CUIを使うと効率が良い作業も多くあります。それにコンピュータエンジニアが行う業務にはCUIでしかできない作業もままあります。ゆえにコンピュータエンジニアはCUIを多用するのです。
そんなCUIについて、今回は別にコーダーは覚えなくても良いような周辺情報を書いていこうと思います。
コンピュータとCPU (ハードウェアの話)
コンピュータといえば、まず本体があってディスプレイがあってキーボードやマウスがあって……。というものを想像する人も多いとは思いますが、機械に組み込まれたコンピュータやサーバのようにディスプレイやキーボードを持たないコンピュータも多く存在します。
ということは、コンピュータの動作にディスプレイやキーボードは必須ではない、と言えます。例えば、なにかしら紙に印刷するにはプリンタが要りますが、印刷する用がなければプリンタは要りません。同様に、何かしら表示したり操作する必要がなければ、画面や操作方法(キーボード、マウス、タッチパネル等)がなくても問題ないのです。
一般的にコンピュータが動作するためには、いわゆるコンピュータの5大装置(演算装置、制御装置、記憶装置、入力装置、出力装置)が必要だといわれています。特に「プログラムを解釈し実行する」という、コンピュータをコンピュータと呼ぶために必要な機能は「制御装置」が担っています。これは最近のコンピュータではCPU(Central Processing Unit, 中央処理装置)という部品に組み込まれています。
コンピュータには制御装置となるCPU以外にも沢山の部品が接続されていますが、それらの部品は原理的には全てCPUが制御しています。これはCPUがプログラムにしたがってCPUの端子の状態を変化させることで、その端子に接続された他の部品を操作しているということです。前述のキーボードやディスプレイも、CPUがプログラムにしたがって端子に特定の信号を出力することで動作しています。
OSとカーネル (ソフトウェアの話)
現在、世の中には様々なコンピュータが存在しています。パソコンやスマホに限っても数多くの機種が存在します。それらは全て同じ部品でしょうか? 違いますよね。部品が違うということはCPUが出力する信号も、その部品に合わせた信号に変える必要があります。
スマホを例に考えてみましょう。色々なメーカがスマホを発売しているので、アプリ開発者はそれら全ての部品とその仕様を調べてプログラミングしているのでしょうか。スマホでは他のアプリも動作しているので、他のアプリの開発者と話し合ってお互いの信号出力のタイミングを調整しているのでしょうか。
これではとても大変です。そこで、部品が違っていても同じソフトウェアが動作したり、他のソフトウェアと協調して動作する仕組みが必要になります。このような仕組みを提供してくれるソフトウェアをOS(Operating System)と呼んでいます。現代のOSには多くの機能がありますが、これらOSにとって最も重要な機能を提供するプログラムをカーネル(kernel, 核)と呼んでいます。
シェルとCUI (ユーザインタフェースの話)
カーネルはソフトウェアやハードウェアを上手につなぐためのソフトウェアです。そこには人間とやり取りする仕組み――つまりUI(User Interface)は存在しません。ソフトウェアに対してはシステムコールという形でいくつかの機能を提供しています。
そこで、人間がキーボードから入力した文字をそのまま画面に表示し、その一連の文字を解釈して適切なカーネルの機能を呼び出し、その結果を画面に表示するソフトウェアがあれば良いことになります。つまり、これこそがCUI(Character User Interface)です。
キーボードから適切な文字を入力するのは覚えるのが大変なので、マウス操作でカーソルを動かしたり機能の実行をしたりして、その結果をウィンドウとかでグラフィカルに表示すると直感的でわかりやすいよね。となると、GUI(Graphical User Interface)です。
UIのない核にUIという外殻をまとわせることから、これらCUIやGUIを実現させているソフトウェアのことをシェル(shell, 殻)と呼んでいます。
ちなみに、CUIとGUIの違いはキーボードやマウスといった操作方法の違いではありません。CUIはキャラクタ(Character, 文字)がUIの基本単位になっているもの、GUIはグラフィックのピクセルがUIの基本単位になっているものだと言えます。
というわけで
弊社では現在システム部門の拡大を目論んでいます。実は今回の記事は、今後入ってくる新人ソフトウェアエンジニアに向けて基礎知識を解説したものです。
基本情報技術者試験のような直接実務では使わないかもしれない知識も、今後登場するであろう新技術でも通用する基礎知識として必要だと思っています。なので、今後も基礎的な記事は書いていきたいと思っています。