この記事では「プログラミング言語はどこに書くのか?」という質問にわかりやすく回答します。
質問に答えながら「書いたプログラムが動く仕組み」についても詳しく説明します。
プログラミング言語はどこに書くのか?
プログラミング言語は「テキストファイル」に書きます。
テキストファイルに書き出すことさえできれば、何を使って書いても大丈夫です。
たとえば、Windowsの「メモ帳」やMacの「メモ」アプリケーションを使ってプログラムを書くこともできます。
プロのITエンジニアやプログラマは「コードエディタ」と呼ばれるアプリを使ってプログラムを書くことが多いです。
コードエディタには「Visual Studio Code」「Atom」「Vim」「Emacs」などいくつかの種類があります。
コードエディタを使ってプログラムを書くと、プログラムが色づけされて読みやすくなったり、プログラムを書くときにヒントを出してくれたりして、とても便利だからです。
プログラミング言語を書くときの流れ
プログラミング言語は、テキストファイルに書き出すことができれば「どこに書いてもいい」とお伝えしました。
このことをよく理解するために、プログラミングの流れを説明しましょう。
プログラミングは以下の流れで行います。
- テキストファイルにプログラムを書く
- 「コンパイラ」や「インタプリタ」という仕組みを使ってテキストファイルを「コンピュータが理解できる言葉」に翻訳する
- 翻訳されたプログラムが動く
「コンパイラ」や「インタプリタ」といった見慣れない言葉が出てきましたね。
これらについては後で説明するので、いまは気にしないでください。
ここで重要なのは「翻訳されたプログラムが動く」というところです。
プログラミングとは「コンピュータに命令をすること」です。
そして、プログラミング言語とは「命令をするための言葉」です。
あなたが「テキストファイル」に書いたプログラムを、コンピュータはそのまま理解することができません。
テキストファイルをコンピュータが理解できる形に翻訳してあげて、それをコンピュータが処理するのです。
このことについて、もっとわかりやすく説明しましょう。
テキストファイルに書いたプログラムが動く仕組み
テキストファイルに書いたプログラムを、コンピュータはどのようにして理解するのでしょうか?
ここでコンピュータの仕組みについて簡単に学びましょう。
コンピュータは電気で動く機械
まず、コンピュータは「電気で動く機械」です。
機械なので、電気が「流れていないか(OFF)」か「流れている(ON)」の2つのことしかわかりません。
コンピュータでは「電気が流れていない状態」を「0」、「電気が流れている状態」を「1」として扱います。
OFFが「0」で、ONが「1」ですね。
コンピュータの中には電気回路があり、ONとOFFをスイッチで切り替えることができます。
たくさんのスイッチをON/OFFすることでコンピュータは、命令を理解するのです。
例として、4つのスイッチがあると考えてみましょう。
4つのスイッチはそれぞれ「ON/OFF」できます。
「ON」を「1」、「OFF」を「0」とすると、以下のようなスイッチがすべてOFFの状態を「0000」という数字で表せます。
- 1つ目のスイッチがOFF→「0」
- 2つ目のスイッチがOFF→「0」
- 3つ目のスイッチがOFF→「0」
- 4つ目のスイッチがOFF→「0」
反対に、すべてのスイッチがONの状態は「1111」という数字で表せます。
- 1つ目のスイッチがON→「1」
- 2つ目のスイッチがON→「1」
- 3つ目のスイッチがON→「1」
- 4つ目のスイッチがON→「1」
3つ目のスイッチだけがONだったら「0010」という数字で表せます。
- 1つ目のスイッチがOFF→「0」
- 2つ目のスイッチがOFF→「0」
- 3つ目のスイッチがON →「1」
- 4つ目のスイッチがOFF→「0」
このようにして、0と1の組み合わせを作ると、全部で16パターン(2の4乗=16)の組み合わせをつくることができます。
- 0000
- 0001
- 0010
- 0011
- 0100
- 0101
- 0110
- 0111
- 1000
- 1001
- 1010
- 1011
- 1100
- 1101
- 1110
- 1111
コンピュータに人間の言葉をしゃべらせるには?
ここで「0000」を「あ」、「0001」を「い」、「0010」を「う」…、というように数字の列を文字に当てはめてみましょう。
こうすることで、コンピュータに「人間の言葉」を使わせることができます。
- 0000 → あ
- 0001 → い
- 0010 → う
- 0011 → え
- 0100 → お
- 0101 → か
- …
たとえば、コンピュータに「かかお」と表示させたければ、この対応表を使って「0101 0101 0100」という命令を出せば「かかお」と表示できます。
「0101」が「か」で、「0100」が「お」だからです。
「いか」ならば「0001 0101」、「おかか」なら「0100 0101 0101」と命令すれば、それぞれ表示できます。
もっと多くの文字をコンピュータで扱うには?
こうして「0」と「1」の組み合わせを使って、コンピュータに命令を出すことができます。
しかし、スイッチが4つだけでは、コンピュータは平仮名の「あ」から「た」までしか扱えません。
スイッチ4つで作れる「0」と「1」の組み合わせは16パターン(2x2x2x2)しかないからです。
ここで、スイッチの数を32個に増やしてみましょう。
スイッチが32個あれば、400万パターン以上(2^32 = 4,294,967,296)の組み合わせを作ることができます。
コンピュータが400万種類以上の文字を扱えるようになるのです。
こうすれば、ひらがなの50音はもちろん、漢字や数字、アルファベットも使えるようになります。
私たちが普段使っているコンピュータでは、32〜64個のスイッチを使うことができます。
スマホやタブレットも同じです。
これらのスイッチを上手くの組み合わせて使うことで、文字や画像、音声、動画も表現できるようになるのです。
0と1だけで、どうやって画像を表示する?
さて、スイッチが32個あれば、たくさんの種類の文字を扱えることがわかりました。
しかし「画像や動画も本当に「0」と「1」だけで表示できるの?」と思った方もいるかもしれません。
ここでは「0」と「1」の組み合わせを使って、どのようにして画像を表示できるのか説明しましょう。
ここでは「4×4」のマス目に並べたライトを思い浮かべてください。
あなたは暗闇にいて「4×4」マスのライトは白色に光ります。
ライトはそれぞれにON/OFFできるとします。
ライトをONにするには「1」で、OFFにするには「0」と命令するとしましょう。
「4×4」マスを上から順に「1100 0100 0111 0101」と命令して光らせてみましょう。
このような馬の画像を作ることができます。
数字を入れるとこうです。
このようにして「0」と「1」の2つの数字の組み合わせだけで、コンピュータに画像を表示させることができます。
私たちが使うコンピュータでは、このような「0」と「1」の組み合わせではなく、RGB(Red, Green, Blue)の3色のライトについて、それぞれ256段階(0から255までの数字)で明度を変えて色を表現します。
たとえば、赤はRGBでは「RGB(255, 0, 0)」と表すことができます。
Red(赤)が255(最大値)で、Green(緑)とBlue(青)は0(最小値)という意味です。
赤だけが最大なので、ライトは赤色に見えるというわけです。
0から255までの数字は、「0」と「1」のスイッチが8個あれば表すことができます。
8個あれば、そのON/OFFの組み合わせで「2の8乗 = 2x2x2x2x2x2x2x2 = 256パターン」を表せるからです。
こうして「0」と「1」の組み合わせを使って、コンピュータで赤色を表現できます。
では、青色をRGBで表現するにはどうすればいいでしょうか?
答えは、RGB(0, 0, 255)です。
Red, Green, Blueの組み合わせで、Blueだけが最大値の255なので、青になるというわけです。
それでは、RGB(128, 0, 128)はどんな色になるでしょうか?
Red(赤)と、Blue(青)が128ずつなので、赤と青が混ざった色になります。
つまり、答えは「紫」です。
コンピュータではこのようにして色を表現します。
このような色の表現と、マス目を「0」と「1」で表現する考え方を組み合わせれば、次のようにして、色あざやかなカラー画像を作ることができます。
以下はRGBの組み合わせで亀を表現した画像です。
さらに、画像を時間の流れに合わせて変化させれば動画になります。
パラパラ漫画と同じですね。
このようにして、コンピュータは0と1の組み合わせで、文字や画像や動画を表現できるのです。
プログラミング言語はコンピュータに命令をするための言葉
さて、ここまで「コンピュータはどのようにして動いているのか」について話してきました。
「0」と「1」の組み合わせで、コンピュータに文字や画像を表示できるという話でした。
しかし、コンピュータに命令をするのにわざわざ「00010010, 00000100, 00000000 ….」というふうに指示していたら、私たち人間にとって大変ですよね。
先ほどの亀の画像の、一番左上のマスを青くするだけでも「00000000, 00000000, 11111111」という命令を書かなくてはいけません。
亀のイラスト程度ならまだしも、写真のように細かくてきれいな画像や、リアルタイムに動くゲームは、このような命令では作れません。
命令するのがあまりに大変だからです。
ここでプログラミング言語の出番です。
プログラミング言語は「コンピュータに命令をする」ための言語です。
この記事の冒頭で、コンピュータに「かかお」と表示させるために「0101 0101 0100」という命令をしたのを覚えていますか?
「かかお」という平仮名3文字のために「0101 0101 0100」と命令するのは大変でした。
しかし、プログラミング言語を使えば、次のように書くだけで「かかお」と表示できます。
print("かかお")
これはPython(パイソン)というプログラミング言語を使って、コンピュータに「かかお」と表示させる例です。
「print(“”)」という見慣れない表記はあるものの「print」という英語と、「かかお」という日本語を使って命令できます。
「0」「1」と文字の対応表を使って書かなくていいのです。
亀の画像を表示させるにはこうします。
from PIL import Image
image = Image.open("./kame.png")
image.show()
英語に慣れないと難しそうに見えるかもしれませんが、
①「Image(画像)ツールで『kame.png』という画像をopenして(開いて)」
②「image(開いた画像)をshow(見せて)」
という命令をしているだけです。
これをテキストファイルに書くだけで「亀の画像をコンピュータに表示させる」命令の完成です。
さきほどのように「00000000, 00000000, 11111111, 00000000, 00000000, 11111111, 00000000, 00000000, 11111111, ….」のように「0」と「1」の羅列をするよりは、ずっと簡単ですね。
プログラミング言語を使えば、こんな風に人間にもわかりやすい言葉でコンピュータに命令を出せるようになるのです。
プログラミング言語をコンピュータの言葉に翻訳する
このようにプログラミング言語を使えば、人間にとってわかりやすい言葉で命令ができます。
しかし、コンピュータはプログラミング言語をそのまま理解することはできません。
なぜなら、コンピュータは電気で動く機械なので「0(OFF)」と「1(ON)」しか扱えないからです。
「0101 0101 0100」のような「0」と「1」の羅列は理解できますが「print(“かかお”)」のような人間の言葉(プログラミング言語)は理解できないのです。
そのため、プログラミング言語をコンピュータが扱えるように「翻訳する」作業が必要になります。
ここで「0101 0101 0100」のようなコンピュータが扱う言葉を「機械語」といいます。
機械の言葉なので「機械語」ですね。
一方で「print(“かかお”)」のような人間が命令を出す言葉が「プログラミング言語」でした。
つまり、コンピュータに命令するには、プログラミング言語を機械語に翻訳しなければならないわけです。
プログラミング言語を機械語に翻訳をするために「コンパイラ」や「インタプリタ」という仕組みが使われます。
コンパイラもインタプリタも、プログラミング言語を機械語に翻訳する仕組みです。
たとえば、私たちがテキストファイルに「print(“かかお”)」というプログラムを書きます。
このテキストファイルを「インタプリタ」という翻訳機にかけましょう。
そうすると「インタプリタ」(翻訳機)は、コンピュータに「かかお」と表示するように「0」と「1」でできた命令を作って、コンピュータに渡してくれます。
こうして、コンピュータの画面に「かかお」と表示できるのです。
プログラミング言語にはいろいろな種類がある
ところで、私たちが話したり書いたりする言葉には「日本語」「英語」「中国語」「スペイン語」などいろいろな言語がありますよね。
同じようにプログラミング言語にも「Python(パイソン)」「JavaScript(ジャバスクリプ)」「Ruby(ルビー)」「PHP(ピーエイチピー)」「C言語」「C#」「C++」「Java(ジャバ)」「Fortran(フォートラン)」など、たくさんの種類があります。
それぞれ、人間にとっての読み書きのしやすさ、コンピュータにとっての翻訳しやすさなど、特性が異なります。
ITエンジニアやプログラマーは、プログラミングの目的や作るものによって言語を使い分けます。
ただし、どのプログラミング言語でも「テキストファイルに書く」という点は同じです。
テキストファイルにプログラムを書き、それをコンパイラやインタプリタといった翻訳機にかけることでコンピュータに命令ができます。
こうして、コンピュータが命令に従って動いてくれるので、私たちはYouTubeを見たり、マップで近くのお店を探したり、ゲームをしたり、InstagramやTikTokに投稿したり、コンピュータの勉強ができたりするのです。
まとめ
この記事では「プログラミング言語はどこに書くのか?」という問に答える形で、コンピュータが動く仕組みについて解説しました。
コンピュータのプログラミングに少し詳しくなれたのではないでしょうか。
最後に少しおさらいしましょう。
- プログラミング言語はテキストファイルに書きます
- テキストファイルに書き出せれば、メモアプリでもコードエディタでも何を使ってもOKです
- テキストファイルを機械語(0と1の羅列)に翻訳してはじめてコンピュータに命令できます
- 翻訳は「コンパイラ」や「インタプリタ」という仕組みがやってくれます
- プログラミング言語にはいろいろな種類がありますが、どの言語でも「テキストファイルを機械語に翻訳して動かす」仕組みは同じです
さて、これで「プログラミング言語をどこに書くのか」という疑問が解決しましたね。
もし興味があったら、Pythonなどの簡単なプログラミング言語を書いて動かしてみることをオススメします。
やってみることで理解がもっと深まりますよ。
コメント