[プログラミング演習(Ruby) > はじめに]

はじめに

ここでは,まずコンピュータの構成を述べて,コンピュータシステムでのプログラムの役割を示します. さらにプログラムを記述する方法,プログラムに沿ってコンピュータに処理を行わせる仕組みについて概説します.

  1. コンピュータの構成
  2. プログラムとは
  3. プログラミング言語とは
  4. Rubyとは
  5. インタプリタとは

コンピュータの構成

コンピュータシステムは,大まかに次の二つに分けられます.

ハードウェアとはコンピュータを構成する機械のことです. ハードウェアは,ケースの中に入っている計算ユニット,記憶ユニット, 通信ユニットなどの電子機器,キーボードやマウスなどの入力機器, モニタ(ディスプレイ)のような出力機器などで構成されます.

どんな機械でも存在しているだけでは何もできません. それを操作することではじめて役に立ちます. たとえば,電卓は計算を自動で行う機器です. ただし何か計算をするには,人間がキーを叩いて計算方法をすべて具体的に指示する必要があります. いくら自動で計算できるとはいえ,電卓だけで大量の計算を正確に行うのは,とても大変です.

コンピュータの場合,ハードウェアはデータを処理するメカニズムを実現しているだけです. ハードウェアは複雑な電卓にすぎません. もし人間がハードウェアを遂一操作しなければならないとすれば,高速に大量のデータを正確に処理することは不可能です.

そこで必要となるのがソフトウェアです. ソフトウェアはハードウェアでの処理を自動化する手段を与えるものです. もう少し具体的にいえば,ハードウェアで計算を行うための処理手順を一つ一つ記述したものがソフトウェアです. コンピュータはソフトウェアで指定されている通りに処理を行います. ソフトウェア(と電気)がなければ,コンピュータで作業を行うことはできません. いま,このページを読むために使っている(はずの)ブラウザやメイルの送受信を行うツール(メイラ),ワードプロセッサなどはすべてソフトウェアです.

一般的な家電製品と違って,コンピュータでは,一つの機械(ハードウェア)で,計算を行ったり,文章を書いたり,メイルの送受信を行ったり,WWWページをみたり,あるいは音楽を聴いたりすることができます. このような多様な動作ができるのもソフトウェア次第でさまざまな処理を行うことができるようになっているためです.

さて,ブラウザやメイラなどのように私たちが直接利用するツール以外にも, コンピュータシステムには,不可欠なソフトウェアがあります. それは,ツールとハードウェアの仲立ちをするソフトウェアで, システムソフトウェアとよばれます. その中核をなすのがOS(Operating System)です. それに対して,私たちが直接利用しているツールをアプリケーション(応用)ソフトウェアとよびます.

MS Windowsやこの授業で用いるLinuxもOSの一種です. OSは,コンピュータを効率的に運用するため, またコンピュータを使いやすくするためになくてはならないシステムの基幹をなすソフトウェアです. たとえば,ノートパソコン,デスクトップパソコン, あるいは大型コンピュータなどの全く異なるハードウェアのコンピュータでも, OSが同じであれば,同じアプリケーションを利用することができます. またいくつものツールを同時に使えるのも, OSがコンピュータを適切に制御しているおかげです.

プログラムとは

プログラムは,ソフトウェアとほぼ同じ意味で使われます. プログラム(あるいはソフトウェア)の実体は,コンピュータに与える処理手順書で, 「まずこうして,次にこういうことをして下さい」 などのようにコンピュータに行わせる処理内容を具体的に示したものです. コンピュータは与えられたプログラムに忠実にしたがって動作します. プログラムがなければ,コンピュータは何もできません. コンピュータは何も考えることはできません. ただ人間が(プログラムによって)指定した通りに処理を行うだけです. プログラムでは「コンピュータができること」を一つ一つ丁寧に指示しておく必要があります.

ところで,パソコンを購入すると,ほとんどの場合はいろいろなプログラム(ソフトウェア)が最初から用意されています. OSを含めて,私たちが普段利用するツール(ワードプロセッサ,ブラウザ,表計算ツール,メイラなど)は,パソコンをすぐに使いはじめられるように用意されているプログラムです. ただし買ったときから使えるからといって,これらのプログラムは自然に生まれるものでもなければ,コンピュータで自動的に作成されるものでもありません. すべてのプログラムは,一つ一つプログラマ(プログラム作成者)によって,手作りされるものです(もちろん,できあがったプログラムはコピーできますので,一台一台のコンピュータのために別々にプログラムを書く必要はありません).

コンピュータといくつかのソフトウェアがあれば,プログラムを作りはじめることはできます. 何も特別なツールは必要ではありません. それ相応の知識(と経験)があれば,プログラムを自分で作ることができるようになります. プログラムが書ければ,コンピュータを自分の思った通りに動かすことができます. 新しいプログラムを書くことは,コンピュータに新しい機能を付け加えることだともいえます. プログラムを書けるようになることで,はじめて真の意味でコンピュータを使いこなせるようになるといえるでしょう.

なお,データの処理手順のことをアルゴリズム(algorithm)といいます. アルゴリズムを具体化して,コンピュータで処理できるように記述したものがプログラムであるともいえます.

ところで,「ソフトウェア」と「プログラム」という言葉の使い分けですが,日置は,「ソフトウェア」といったときには,すでに完成していてすぐに利用できるツールを指すもので,主に利用者の立場で使う言葉だと考えています. 一方,「プログラム」は製作者(プログラマ)の立場で使う言葉で,実際に作成したもの,あるいは作成中のものを指して使う言葉だと考えています.

プログラミング言語とは

プログラムはどのように記述してもよいというものではありません. 他の人に作業を依頼するように通常の文章で作業内容を書いてもコンピュータは理解できません. まず,プログラムを記述する際には処理したい内容の一つ一つの過程を「コンピュータが理解できる形式」ですべて明確に書き下さなければなりません.「だいたいこのような内容で」といったあいまいな記述は許されません.

プログラムは,日本語や英語ではなくプログラミング言語とよばれるコンピュータのために作られた人工の言語の文法にしたがって,厳密に記述しなければいけません. コンピュータは全く融通が利きません. 100万行のプログラムがあったとして,その中でたとえ1文字でも文法にしたがっていないところがあれば,コンピュータはそのプログラムを理解できません.

なお,プログラミング言語に対して,私たち人間が使う日本語や英語などの言語のことを総称して,自然言語とよびます. 世界中に,数多くの自然言語があるように,プログラミング言語も数多く存在します. 代表的なプログラミング言語としては, C,C++,Java,Perl,Lisp,Prolog,FORTRAN等々が挙げられます. そのなかで,ここでは,次に紹介するRubyを用いることにします.

Rubyとは

Rubyは, 「プログラミングをたのしくする」というモットーのもとに開発された新しい言語です. わずらわしい文法事項は少なく,かつ高機能です. 数値的な処理はもちろん,テキスト処理,ネットワークプログラミングも可能です. また新しい言語であるにも関わらず,すでにライブラリ(プログラムの部品)が資産として豊富に蓄えられています. ライブラリを利用することで,本格的なプログラミングも簡単に始めることができます.

もう少しRubyのプログラミング言語としての性格を語るなら, 「オブジェクト指向スクリプト言語」であるということが言えますが,「オブジェクト指向とは...」などと大上段に構えなくても気軽にプログラミングが始められます.

ところで,Rubyは日本で開発された言語で,はじめから日本語がサポートされています (ほとんどのプログラミング言語は,海外で開発されています). Rubyはフリーソフトウェアであり, 無料で自由に手に入れることができます. Rubyを改変することも自由です (ライセンスの詳細).

インタプリタとは

プログラムは,それを記述しただけでは何も起こりません. プログラムの内容にしたがった作業をコンピュータに行わせるには, コンピュータに対して,プログラムを読んで作業をするように指示してやる必要があります. コンピュータにプログラムにしたがって作業をさせることを, プログラムを実行するといいます.

さて,これまでプログラムを記述するのには,Rubyなどのプログラミング言語を用いると説明しましたが, じつは,コンピュータは,そのようなプログラミング言語で記述されたプログラムを,そのまま理解できるわけではありません. コンピュータが唯一理解できるのは,一般に機械語とよばれる言語です. 機械語は,コンピュータのCPU(Central Processing Unit;計算を行うハードウェア)によって異なりますが,いずれもわずか2種類の記号(0と1)のみを使って記述されます. 機械語のプログラムは,0,1がずらずら並んでいるだけのもので,人間にはとても読めるものではありません. なお,機械語と対比させて,一般のプログラミング言語を高級言語ともいいます.

コンピュータが現われた黎明期には,実際に機械語でプログラムを書いていました. しかし機械語でのプログラミングはあまりにも困難で非効率であることから,人間にとって理解しやすいプログラミング言語が開発されていきました. ただし,さきほども述べた通り,コンピュータが理解して実行できるのは機械語のプログラムだけですから,高級言語でプログラムを書くようになると,それと同時に,そのプログラムを機械語に翻訳することも必要になりました. 翻訳作業はもちろん人手で行うのではなく,翻訳のための専用のプログラムを使って行います. 翻訳作業のことをコンパイルといい,翻訳ソフトウェアのことをコンパイラといいます. コンパイラによって翻訳された機械語のプログラムは,コンピュータで直接に実行可能となります.

コンピュータに高級言語のプログラムを実行させる方法は,コンパイラでコンパイルするだけではありません.もう一つの代表的なプログラムの実行方式として,インタプリタとよばれるプログラムを利用する方法があります. インタプリタは,高級言語のプログラムを読んで,それをその場で解釈して,実行できるように作られています. つまり,インタプリタを利用する場合,いったん実行可能プログラムを生成するという段階が不要になります. たとえてみれば,コンパイラがプログラムを機械語に翻訳するのに対して,インタプリタは機械語への同時通訳をしているということができます.

コンパイラ方式とインタプリタ方式を比べると,コンパイルという作業が必要のないインタプリタ方式がより優れていると考えるかもしれません.しかし一般に,インタプリタで直接に高級言語のプログラムを実行するよりも,コンパイラで生成された機械語のプログラムを実行する方が,プログラムの実行を完了するまでの処理時間が短くなります (同時通訳される話を聞く場合と翻訳された文章を読み上げられるのを聞く場合とで,どちらが時間がかかるかを考えてみて下さい). 大規模なプログラムになれば,その違いは顕著になりえます.

Rubyのプログラムは,インタプリタで実行します(インタプリタはrubyといいます).

[プログラミング演習(Ruby) > はじめに]