独り言

プログラミングの講師をしています。新人研修で扱う技術の解説と個人の技術メモ、技術書の紹介など

【情報処理】ソフトウェアの基本

ここではソフトウェアの基本を解説します。

ソフトウェアとは

そもそもソフトウェアとは何でしょうか。
言葉は聞いたことがあって何となく知っている人も多いかと思います。
そもそもソフトウェアという言葉はハードウェアの退避としての言葉です。
ハードウェアについては五大装置に関する記事で詳しく説明しましたが、目に見える形のあるものでした。
ソフトウェアは逆に、目に見えないコンピュータ上のプログラムのことです。

ゲームを例にすると、ゲームをプレイするための機器(プレイステーションやswitchなど)がハードウェア。
プレイするゲームの内容がソフトウェアということになります。
要は、何かしらのプログラミング言語で作られたプログラムのことだと思ってよいでしょう。

ソフトウェアの種類

ソフトウェアは、基本ソフトウェア、ミドルソフトウェア、応用ソフトウェアの3種類に分けることができます。
ここからはそれぞれについて簡単に説明していきます。

応用ソフトウェア

まずは説明しやすい応用ソフトウェアから説明していきます。
応用ソフトウェアは、パソコンだとダブルクリックすることで起動するようなソフトウェア、いわゆるアプリケーションと呼ばれる類のものです。
例えば、ExcelやWord、PowerPointといったOfficeソフトや、Webブラウザ、電卓やテキストエディタなど。
最初からインストールされているものもあれば、ネット上からダウンロードしてインストールするものもあるでしょう。
スマホの場合も同様で、ストアからダウンロードしてインストールするアプリが応用ソフトウェアにあたります。

ミドルソフトウェア

ミドルソフトウェアは、IT業界で働いていない人にとってはあまりなじみのないものかもしれません。
データーベースサーバー(Oracle DB, SQL Server MySQL, PostgreSQLなど)や、Webサーバー(Tomcar、Apache, Nginx)などの、いわゆるサーバーソフトウェアと呼ばれる製品がこれに該当します。

一般のユーザーには馴染みのないものかもしれませんが、Webアプリケーション(スマホのアプリなども含む)を動作させるうえでは欠かすことのできないソフトウェアです。
普段何気なくインターネットを経由して使用しているWebサービスの裏側や、ソフトウェアの管理などで使われており、応用ソフトウェアと基本ソフトウェアの中間にあたるようなソフトウェアです。

基本ソフトウェア

基本ソフトウェアは、OS(Operating System)のことです。
OSとはいったい何のことでしょうか。
PCなら、WindowsMac OSスマートフォンならAndroidiOSなどのことです。
他にも、サーバー用のOSとしてよく利用されているLinuxUNIX系などのOSや、組み込み系で使用されるOSなどもあります。

ではOSとは一体なのをしているソフトウェアなのでしょうか。
細かく列挙していくと、

といった機能があるようです。
色々ありますが、重要な機能はハードウェアの管理です。
コンピュータを動かすためには、パソコンやスマホといった、ハードウェアが必須です。
しかし、ハードウェアだけがあっても、何も動きません。
ソフトウェアがなければパソコンもスマホもただのガラクタです。
そして、ソフトウェアの中でもハードウェアを管理・制御して、うまく動かしてくれる役割を持つのがOSです。

では、OSが仮になかったとしたら、どのような不都合が起きるのでしょうか。
OSはハードウェアの管理を行ってくれるのでした。
応用ソフトウェアはOSの上で動作するソフトウェアです。
そうすると、応用ソフトウェアはハードウェアの制御をしなくてもよいことになります。
応用ソフトウェアというのは、例えばテキストエディタや電卓、表計算ソフトなどがあります。
例えば電卓のソフトウェアを作ろうと思ったとき、やりたいことは計算の処理ですが、そのためにわざわざハードウェアの制御までプログラムするのはすごく非効率ですね。
OSがあるおかげで、応用ソフトウェアは自分のやりたい処理に専念することができるのです。

では続いてOSの種類について簡単に説明していきます。
OSは大きく分けると、PC向け、スマホ向け、サーバー向け、組み込み向けがあります。
PC向けはWindowsMac OSなど。
スマホ向けはAndroidiOSなど。
サーバー向けにはLinuxUNIXなどがあります。
なぜ、これほど様々なOSがあるのでしょうか。
これは、使う用途によって最適化してきた結果です。
PCは比較的画面が大きく、マウスやキーボードを使って操作します。
一方でスマホタブレットは、PCに比べると画面は小さく、タッチパネルで操作します。
それぞれ操作性や画面サイズなどが異なるので、その結果OSも最適化されたことになります。

サーバーとは

ではサーバー向けのOSとはどのようなものでしょうか。
そもそも、サーバーとはどんなものかイメージできるでしょうか。
サーバーと聞くと、ごつくて大きいコンピュータを思い浮かべる人が多いようです。
それはそれで間違ってはいないのですが、一般にはサーバーというとサーバーソフトウェアを指す場合が多いです。
例えば、Webサーバー、データベースサーバー、メールサーバーなどがサーバーソフトウェアにあたります。
では、サーバーが何かというと、「クライアント(依頼者)からのリクエスト(要求)に対して、レスポンス(応答)を返すもの」というのがサーバーの機能です。
このクライアント、リクエスト、レスポンスが何なのかは、サーバーソフトウェアによって異なります。
例えば、Webサーバーの場合は、クライアントはWebブラウザGoogle Chromeなど)で、リクエストというのは、URLなどの必要な情報を含んだHTTPリクエストと呼ばれるテキストデータです。
そしてレスポンスは、Webページを構成するHTMLやCSS、画像ファイルなどといったリソースです。

サーバーは、サービスによっては一度にたくさんのリクエストが飛んでくることもあります。
また、データが破損したりすると大きな問題になります。
そのため、一般のユーザーが使用するPCよりも性能が高く、そして障害に強いハードウェアを使用する必要があります。
その結果、ごつくて大きなハードウェアを用いることになるのです。

話を戻します。
ではなぜサーバーと一般のPCで異なるOSを使用しているのでしょうか。
WindowsMacといった一般のPCは、コンピュータにあまり詳しくない一般のユーザーも使用します。
そのため、操作のしやすさや見た目を重視します。
一方、サーバーというのは、操作するのは主に一部のサーバーに詳しいエンジニアの人たちです。
そして、サーバーは大量のリクエストを処理する必要があります。
また、Web上のサービスというのは基本的に常に動作しており、サーバーがフリーズしたり動作が不安定になったりしては困りますね。
このような特性から、使い勝手の良さよりも、安定して動くかどうかや、高速に処理をさばけるかどうかに力を入れる必要があるわけです。
そのため、サーバー用のOSというのも、PC用のOSとは別で用意されているのです。

ソフトウェアとアプリケーションとプロゴラム

ここまで何気なくソフトウェアやアプリケーションという言葉を使用してきましたが、似たような言葉で、ソフトウェア、アプリケーション、プログラム、という3つの言葉があります。
これらの3つの言葉にはいったいどのような違いがあるのでしょうか。

実際にはほとんど同じ意味です。
3つとも、何かしらのプログラミング言語を使って作られたプログラムを表す言葉です。
ではなぜこのようにたくさん言葉があるのか。
ソフトウェアというのは、最初の方でも説明しましたが、ハードウェアという言葉の対比です。
アプリケーションというのは、ソフトウェアの中でも応用ソフトウェアのことを指す言葉です。

プログラムという言葉は、プログラミング言語で作られたものという意味ですが、もう一つ、データファイルという言葉の対比として使われる言葉でもあります。
データファイルとは何を指すのでしょう。
例えば、ExcelやWordを開いて、新しい文書・資料を作成することはよくあることでしょう。
そうやって新しく作成したファイルが、データファイルです。
これらのファイルはプログラムではありません。
プログラムというんは、ダブルクリックしたときに起動するものです。
Excelで作成したファイルをダブルクリックしたら、Excelが起動して内容が見れるようになりますが、あれはExcelというプログラムが起動し、Excelでファイルの中身を編集しているのに過ぎません。
データファイル自体にはExcelが起動するプログラムは入っていません。

結局のところ、ソフトウェア、アプリケーション、プログラムというのは意味はほとんど同じですが、文脈によって使い分けられるものだと思って良いでしょう。

GUICUI

ここからはGUICUIについて解説します。
GUIとは、Graphical User Interface の略で、WindowsMacのように、マウス操作で直観的に操作するような仕組みがGUIです。
CUIはCharacter User Interface の略です。
Character(キャラクター)とは文字の事で、キーボードでコマンドという文字を入力して操作する仕組みです。
映画やドラマやアニメの世界でみるような、黒い画面に文字だけを入力して操作するようなものです。
Windowsの場合、コマンドプロンプトWindows PowerShellというツールを使うことでCUIの操作ができます。
Macの場合はターミナルというツールで同様のことができます。

昔、まだコンピュータが今ほど発達していなかった頃は、GUIはなかったため、必然的にCUIによる操作でした。
今現在、コンピュータが発達してPCの操作はGUIが当たり前になりましたが、それでもまだCUIはよく使用されています。
特に、LinuxなどのサーバーOSでは、デスクトップなしで、全ての操作をCUIで行うことも珍しくありません。

ではなぜCUIでの操作が未だに残っているのでしょうか。
理由はいくつかあります。
まず、CUIの方が素早く操作が行えることがあります。
特に、繰り返し何度も行う操作などは、コマンドを使った方が効率化できる場合もあります。
また、ネットワークに関する処理など、コマンドでしかできないような処理もあります。
そして何より、CUIは画面描写がいらないので、あまりメモリやCPUのリソースを消費しないという点が上げられます。
サーバーの場合、大量のリクエストを処理しなければいけない場面も多いため、画面描写にCPUやメモリのリソースを割いてしまうのは賢明とは言えません。
そのような理由もあり、今でもCUIという操作方法はよく使用されています。
IT業界で働くのであれば、使う機会も出てくるでしょう。