[初心者]CODE 〜コードから見たコンピュータのからくり〜 ①


# はじめに

知る人ぞ知る名著[「CODE コードから見たコンピュータのからくり」](https://www.amazon.co.jp/CODE-%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E8%A6%8B%E3%81%9F%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E3%81%8B%E3%82%89%E3%81%8F%E3%82%8A-Charles-Petzold/dp/4891003383)を読んで、あまりのまとまりの良さに非常に感銘を受けたので、復習も兼ねて簡単なまとめを書いていこうと思います。

（結構ボリュームが多いので、複数回に分けて書いていこうと思っています）

こちらの本に興味があったり、コンピュータの仕組みに興味がある方はぜひ最後までご覧ください。

<br>

**【シリーズ】**

- **[[初心者]CODE 〜コードから見たコンピュータのからくり〜 ①](https://qiita.com/yusuke_blog1026/items/2e60c90f56537a45f2ad)←←←　本記事**
- **[[初心者]CODE 〜コードから見たコンピュータのからくり〜 ②](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5)**
- **[初心者]CODE 〜コードから見たコンピュータのからくり〜 ③**・・・（現在執筆中）
- **[初心者]CODE 〜コードから見たコンピュータのからくり〜 ④**・・・（現在執筆中）




# 対象読者
- コンピュータの歴史に興味ある方
- コンピュータの仕組みについて理解したい人


# 目次

### ①


| 章   | タイトル                 | 備考                                                     | 
| ---- | ------------------------ | -------------------------------------------------------- | 
|  | [はじめに](#はじめに)                 |    
|  | [対象読者](#対象読者)                 |      
| 0.   | [イントロダクション](#0-イントロダクション)   | 本書の概要を説明。全体像をつかめます。    |                                
| 1.   | [親友](#1-親友)                     | モールスコードを例にコードについて基本的な説明。     | 
| 2.   | [コードと組み合わせ](#2-コードと組み合わせ) | コードの個数の規則性から数学の組み合わせ論との関係性について説明。                |                                                          | 
| 3.   | [点字とバイナリコード](#3-点字とバイナリコード)           | 点字を用いてバイナリコードの仕組みについて説明。 | 
| 4.   | [懐中電灯の解剖学](#4-懐中電灯の解剖学)         | 懐中電灯を用いて電気回路の基本的な仕組みについて説明。電気について軽く復習できます。| 
| 5.   | [角を回ってみる](#5-角を回ってみる) | 双方向に情報を伝達する仕組みを懐中電灯の電気回路を用いて作成。またその際にボトルネックとなる点についても言及。                                 | 
| 6.   | [電信とリレー](#6-電信とリレー)       | 現在のコンピュータの基礎となっている「電信」と「リレー」について説明。
                                             


### ②

| 章  | タイトル                         | 備考 | 
| --- | -------------------------------- | ---- | 
| 7.  | [私たちの10個の数字](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#7-%E7%A7%81%E3%81%9F%E3%81%A1%E3%81%AE10%E5%80%8B%E3%81%AE%E6%95%B0%E5%AD%97)               | 位取り記数法について簡単に説明。     | 
| 8.  | [10に代わるもの](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#8-10%E3%81%AB%E4%BB%A3%E3%82%8F%E3%82%8B%E3%82%82%E3%81%AE)                   | 2進数とビットについて説明。     | 
| 9.  | [ちょびっとずつビットで](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#9-%E3%81%A1%E3%82%87%E3%81%B3%E3%81%A3%E3%81%A8%E3%81%9A%E3%81%A4%E3%83%93%E3%83%83%E3%83%88%E3%81%A7)           | 情報をビット単位で伝えることについて説明。ビットが情報の基本単位としていかに便利かということが理解できます。     | 
| 10. | [論理とスイッチ](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#10-%E8%AB%96%E7%90%86%E3%81%A8%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81)                   | ここからがメイン部分。まずは論理学とプール代数について説明。その後、プール代数と電気回路の一体化を猫の真偽テストを通して学んでいく     | 
| 11. | [ゲート](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#11-%E3%82%B2%E3%83%BC%E3%83%88)                           | 論理ゲートについて説明。4つの基本論理ゲートを中心に学んでいく     | 
| 12. | [2進数加算器](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#12-2%E9%80%B2%E6%95%B0%E5%8A%A0%E7%AE%97%E5%99%A8)                      | 論理ゲートを組み合わせることで算術計算を自動で実行させることができる機械を作る。ここは現代コンピュータの基礎となっている部分でもあるので重要。     | 
| 13. | [でも引き算はどうする？](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5#13-%E3%81%A7%E3%82%82%E5%BC%95%E3%81%8D%E7%AE%97%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8B)           | 引き算を通してコンピュータが負の数をどのように扱っているのか？を見ていく     | 

### ③
現在執筆中です。

### ④
現在執筆中です。

<br>
<br>

# 0. イントロダクション
- **現代においてコンピュータの仕組みを知る必要性を感じる場面は多い**。


- 例えば、パソコンの売買にはストレージとメモリという概念を理解して**「あのアプリケーションを使用するには少なくとも何ギガバイトくらいのストレージが必要だ」**といった知識を持っていることが期待される。
- こういった**"仕組み"**を抽象的にではなく、深く理解できるようになるとともに、**先人たちの多くの知恵と努力の結晶として、コンピュータが生まれたという事実**を正しく認識し、比喩の妨げなしにそれ自体をそのまま美しいものとして評価できるようになることを本書は目的としている
- またコンピュータは昔に比べて随分と複雑になっているが、その根本は基本的に同じであるため、**その技術の歴史を知ることで現代のコンピュータを理解することは比較的容易になる。**

<br>
<br>

# 1. 親友

## モールスコード
- **長短二種類の点滅を用いて、各文字を表す方法。**（実際に伝える際は「長い点滅」「短い点滅」など言わず、「ダッシュ」「ドット」と呼ぶ）


- 二種類の点滅でやり取りするためコード体系は複雑だが、使用する分には非常に効率が良い
- モールスコード自体はコンピュータと無関係だが、**コードの性質を理解する事はコンピュータの内部構造を知る上で必須。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/78d09283-0e01-80df-a27e-746e1a33019d.png)



## [コード](https://e-words.jp/w/%E3%82%B3%E3%83%BC%E3%83%89.html)
- **[コード](https://e-words.jp/w/%E3%82%B3%E3%83%BC%E3%83%89.html)という言葉は通常、人と機械の間で情報を伝達するための仕組みを意味している。**もっと簡単にいうと、**伝達の手段**を指す言葉。


- また人間と機械の間だけでなく**人間同士でもコードは用いられる。**実際、人間はコミュニケーションの土台として多くのコードを無意識のうちに使用している
- 例えば、何か言葉を言う時に発する「音」というのは、同じ人間であれば聞くことができるし、さらにその意味がわかる人にとってはコードとなる。（これを通常**「話し言葉」**と呼んでいる。）
- 一方、手紙などのように文字を書いて情報を伝えるためのコードも存在する。このコードは手書きの文字として表れたり、本に印刷されたりする。（これは通常**「書き言葉」**と呼ばれる）
- そして、多くの言語では（日本語もそう）話し言葉と書き言葉の間にはっきりとした対応関係がある。
- また、音を聞いたり、話したりできない人々のためには別の工夫されたコードが編み出され、例として**手話や点字**が存在している

## コードの使い分け
- このように私たちは様々なコードを使用してコミュニケーションをしている。**この理由としては状況に応じて使いやすいコードが異なっているからである。**


- 例えば、話し言葉のコードは当然紙面上には保存できないため、文字を書いてコミュニケーションを図りたい場合は書き言葉のコードを使うことになる。
- 逆に暗闇の中で相手と情報を交換したい場合は、書き言葉は役に立たず、話し言葉が必要となる
- **これはコンピュータとのやり取りでも同様のことが言えて、数値や音声、音楽、画像、動画の保存であったり伝達には、様々な種類のコードが使われている。**
- そしてコンピュータは人間の言葉や文字をそのまま理解できないので、人間のコードを扱うことは不可能であり、**独自のコードが必要となる。**

## モールスコードの深掘り
- モールスコードもその名の通り、一種の**コード**であり、**これは暗闇で静かに遠くの相手と情報を交換したい際に利用される。**


- 例えばモールスコードを懐中電灯で送る場合を考えてみる。この場合、ドット（短い点滅）はスイッチを素早くオン/オフし、ダッシュ（長い点滅）は少し長くオンにしておくことにする。
- すると、例えばAを送るには素早くオン/オフし、次にゆっくりとオン/オフすることになる。（先の表を参照。）
- またこの時、ダッシュの長さは、ドットの長さの約３倍となるように定めておくと、より円滑にコミュニケーションを図れる。（ドットが1秒、ダッシュが3秒といったイメージ）。
- さらにドットとダッシュの間のポーズ、文字同士の間のポーズ。単語同士の間のポーズを入れるとなお効果的。例えば、ドットとダッシュの間はドット1つ分、文字同士の間はダッシュ1つ分、単語同士の間はダッシュ2つ分といったイメージ。
- **このようにモールスコードをお互いが理解していれば、懐中電灯1つで"親友"とコミュニケーションを取れるし、また普通に話す代わりにモールスコードで話すこともできるようになる。**例えばドットを「ディ（dih）」、ダッシュを「ダ（dah）」と発音することにする。そうすれば、**書き言葉をドットとダッシュだけにしたのと同じように、話し言葉を母音2つだけで置き換えることが可能になる**

## バイナリコード
- <code>**ここまで見てきたモールスコードで重要なのは"2"である。</code>**


- つまり、**2種類の点滅や2つの文字、2つの母音など、とにかく何でも2つの異なるものがあれば、それらをうまく組み合わせてあらゆる情報を伝えることが可能になるのである。**
- このように構成要素が2つのコードのことを**バイナリコード**と呼ぶ。モールスコードも当然バイナリコードとなる。

<br>
<br>

# 2. コードと組み合わせ

## コードの整理
- 先ほどまで見てきたモールスコードはアルファベット順に整理されていると少しわかりづらい。もっとモールスコードに適した整理の仕方がある


- それは、**コードに使用されているドットとダッシュの数に応じてコードをグループ分けすることである。**
- 例えば、ドット1個もしくはダッシュ1個を含むモールスコード列はEとTの２文字だけ。
- このように整理していくと、以下のように整理できる。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/58e3f863-b189-0529-a46e-fce0bd87d1d8.png" width=70%>

- これはモールスコードを**樹形図**のような形に表したもので、**ドットとダッシュの各列から生じる文字列を表している。**例えば、「ドット-ドット-ダッシュ」というコードに対応する文字を調べたい場合、まずドットを選び、次に矢印に沿って左に移動しながら再度ドットを選び、その後にダッシュを選ぶ。最後のダッシュに示されているUがこのコードの文字になる


- このような表をモールスコード定義時に使用していれば、コードを作る上で「ドットとダッシュの列が不必要に長くなる」といった問題を回避することが可能になる

## コードの個数
- 先ほどの整理された図には実は明確な規則性が存在する。**それは、ドットとダッシュの個数とコードの個数との間にあるもの。**


- 例えば、ドットとダッシュの個数が1つの場合は2個、2つの場合は4個、3つの場合は8個、4つの場合は16個...というように各コードは増えていくのだが、**その増え方は実は２倍ずつ。**
- これは、各行のコードは全て前の行のコードにドットもしくはダッシュをつけたものであることを考えると当たり前である。
- そして、これを少し別の書き方をしてまとめると以下のようになる

| ドットとダッシュの個数 | コードの個数 | 
| ---------------------- | ------------ | 
| 1                      | 2^1          | 
| 2                      | 2^2          | 
| 3                      | 2^3          | 
| 4                      | 2^4          | 

- つまり、<code>**「コードの個数＝2^（ドットとダッシュの個数）」**</code>ということが言える。（**この2の累乗はコードについて理解する際には頻繁に登場する。**）

## コードと組み合わせ論
- さて少し復習になるが、モールスコードは構成要素がドットとダッシュの2つであるため、バイナリコードである。


- そしてこれに似ているものとして**コイン**がある。
- コインもモールスコードと同様に、表が出るかあるいは裏が出るかの２通りしか存在していないため、**ある種バイナリな物体と言える。**
- **そしてコインの裏表の組み合わせについてはみなさんも馴染みが深い高校数学の確率や場合の数などで登場する。**例えば、コインを4回投げた時に、裏が2回出る確率は？など
- **つまり先ほど私たちがバイナリコードの分析で行ったことも、これらと似た数学の単純な作業と同じなのである。**（コインを4回投げた時に裏表の出方は何通り存在するか？みたいな問いに答えるイメージ）
- このように**「コードがどのように組み合わせられたり、分解されたりするのか？」**を分析するためには数学の組み合わせ論の考え方が必要不可欠なのである

<br>
<br>
      
# 3. 点字とバイナリコード
## 点字
- **サミュエル・モースがモールスコードを発明する前にも、実は書き言葉の文字を別の解釈可能なコードに置き換えた人物が存在していた。**


- 彼の名前はルイ・ブライユで、**いわゆる点字と呼ばれるコードを生み出しのが彼である。**
- 当時盲人の教育における大きな課題の一つとして、印刷された本が読めないことがあり、なんとかしてこの障害を乗り越えようと先人たちは必死に色々なことを試していたが、なかなかうまくいかなかった。
- 例えば、バランタン・アユイという人物は紙の上の文字を触って読めるように文字をそのまま浮き出させるシステムを考案していたが、これは非常に使いづらくあまり浸透しなかった。
- なぜ先人たちの試みがうまくいかなかったのか？というと、彼らはみな**「アルファベットで書かれた文字はアルファベットの文字としてそのまま伝わらなければいけない」**というパラダイム（固定観念）に縛られていたからである。
- つまり**文字Aは、Aのように見え感じなければいけなかったと思い込んでいたのである。**
- しかし、**実際は目の見えない人々にとっては印刷されたアルファベットとは全く異なる別のコードを使った方が都合が良いのだった。**
- このことに気づいたブライユは、**厚紙の上に点と線を盛り上げたパターンを用いる「夜間書法」**にヒントを得て、現在の点字の基本的な部分を作り上げた

## 点字の基本
- 点字では、通常の書き言葉で使用される全ての記号（特にアルファベット、数字、句読点）が2×3のます内のいくつかの凸点としてコード化されている。そしてこれらの点には通常、1から6までの数字が番号として振られている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/2eceda3b-6875-cfdb-8a0f-7447c9d8b516.png)

- ここからわかることは、**点字の個々の点というのは全て平らまたは凸になっているということ。つまり、<code>バイナリコード</code>なのである。**


- 従ってブライユ式の点字体系は2^6=64個のコードを表すことができる
- またこのブライユ式の点字コードにおいて、アルファベットは以下のように表される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/ff1b07a0-4867-9906-1de7-0ca429def979.png)

- これが点字の基本形である

## 点字の拡張
- ルイ・ブライユの時代以降、**点字コードは様々に拡張され、現在よく使われるのはグレード2の点字。**


- このコードは6つのマスを有効に活用し、文字を速くよめるようにするために、様々な短縮形が用いられている
- 例えば、以下のように頻繁に用いられる単語にはそれぞれ単独でコードが割り当てられている

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/db2cc2a6-2f25-c6d0-a342-ac8de1f249ff.png" width=70%>

- このようにこちらの体系は先ほどのブライユ式の基本形からかなり拡張されているが、**中でも特徴的なのが数符と大文字符である。**


- **数符とは、単語の一部でない場合、次にくるコードを数字として解釈しなければならないことを意味し、また大文字符は単語の一部でない場合には後続の文字が大文字であることを意味するもの**である。
- 前者のような後に続くコードを文字→数字に変えるコードを<code>**「シフトコード」**</code>と呼び、後者のような後に続く文字（1文字）を小文字→大文字に変換するコードを<code>**「エスケープコード」**</code>と呼ぶ。
- エスケープコードの由来はコード列のいつもの平凡な解釈から「逃れて（escape）」新しい解釈に移ることからきている。
- シフトコードは、シフトの取り消し用コードが現れるまで、意味が変わることに注意
- こうすることで、より解釈に幅を持たせることが可能になり、文脈に応じてコードに様々な役割を付すことも可能になる
- こうしたシフトコードやエスケープコードは**書き言葉をバイナリコードで表現する際によく用いられる。**


<br>
<br>

# 4. 懐中電灯の解剖学
## 電気を学ぶ意味
- コンピュータは電子機器であるため、内部の仕組みを理解するには**電気について学ぶことが必要**


- 幸い、コンピュータの内部で電気がどのように使われているかを理解するには基本的な概念を理解するだけで充分
- 例として今回は最も単純な電気製品の一つである**懐中電灯**を題材に考えてみる

## 懐中電灯
- 懐中電灯の構造は非常にシンプルで、**電池と電球、スイッチ、導線**さえあればいい


- これらを組み合わせて以下のようなものを作ればひとまず懐中電灯ぽいものが作れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/c031c1d6-6160-f9d7-aba6-391f44deccac.png)
※引用元 [「やさしい電気回路」](https://hegtel.com/flashlight.html)

<br>

- ここからわかることは回路は**サイクル**だということ


- そもそも電気を使用するものはどんなものでもその中身は**「電源」と「負荷」**で構成されている
- 「電源」というのは、電池やコンセントに来ている電気のように、**エネルギーを供給するところ**で、「負荷」というのはそのエネルギーを利用して光を出したり熱を出したり音を出したりというような**様々な「仕事」をするところ**
- 今回の懐中電灯の場合、**図のように電池が「電源」、豆電球が「負荷」ということになる**
- そしてさらに電源には図のように**プラスとマイナスの二つの端子**があり、このため**「電流」は電源のプラス端子から出て行ってその後導線を通ることで負荷にたどり着き、そして再び電源のもつマイナスの端子に戻ってくることができる**
- つまり、<code>電流が流れる道は必ず電源から出て電源に戻ってくる、という1周する経路になる。電源と負荷からなるこういったものを**「回路」**と呼ぶ
- また当然この電球が点灯するのは、回路がちゃんと連続してつながっている時だけであり、どこかが途切れると電球は消える。
- スイッチを使用するのは**こうした回路の連続性を制御し、豆電球の動きをコントロールすることが目的**である

## 電子論
- 電気の動きを理解するためには**電子論**を用いることが必要


- 電子論では電気は電子の動きに由来する
- そもそも全ての物質は原子（厳密には素粒子）からできており、**原子は中性子、陽子、電子という３種類の粒子でできている。**
- その原子は以下のような構造になっている（ただし実際に原子が見えるほど強力な顕微鏡があったとしてもこうは見えず、これはただの便利なモデルに過ぎない）


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/1c806b10-108b-496b-a0f9-f586c674f343.png" width=60%>

- 図に示した原子はリチウム原子であり、電子を３個、陽子を３個、中性子を４個持っている


- また**陽子と電子は電荷と呼ばれる特性を持っている**
- 陽子は＋の電荷を、電子はーの電荷をもつ。（中性子は中性であり、電荷を持たない）
- この＋とーの記号は算術的な意味ではなく、**単に陽子と電子がある意味で反対である**ということを意味している。
- そしてこの反対の特性により、**陽子と電子は様々な相互関係を持つ**
- まず陽子と電子は同じ個数で存在するときに最も安定していて、もし不均衡があるとそれを自分たちで修正しようと働く
- - さらにもう一つの関係としては、反対の電荷は引き付け合い、同種の電荷は反発するというものがある。
  - しかし図をみると陽子、中性子が互いに引き合っているように見えるのだが、これは同種の電荷の反発よりも強い作用が働いているからである。
  - これをいじると電気よりもはるかに強力な核エネルギーが得られる
- このように通常は陽子と電子は互いに引き合い、同数個存在することにより安定しているが、**場合によっては「電子が原子から追い出される現象」が起こる。**
- そしてこれがきっかけで、**電気**が発生するのである。

## 静電気
- 例えば身近に電気が発生している例としては、冬場ドアノブに触れようとしたときに「バチっ！」とする現象がある。これは**静電気**と呼ばれるもの。


- 先ほど述べたように原子は状況によっては電子を放したり、逆に電子を受け取ったりすることがある。
- そしてこの電子の**「放しやすさ」**や**「受け取りやすさ」**というのは原子の性質に由来しており（イオン化エネルギーとか電気陰性度とかその辺りの話。）、**「放しやすい」原子と「受け取りやすい」原子が衝突したり擦れあったりすると、電子は原子から追い出される**
- 例えばゴムやポリエチレンなどは負に帯電しやすい性質があり、これを身につけていると体に徐々にマイナスの電荷が溜まっていく。すると電気が流れやすい金属でできたドアノブに体が触れると、たまった電子がその物体に流れ出る。この瞬間に「バチっ！」という音がし、静電気が発生する
- これも電子を放出しやすい原子と電子を受け取りやすい原子が衝突した結果である


## 懐中電灯の回路の仕組み
- 懐中電灯の回路内の電気は先ほどの静電気のように突発的に生じるものではなく、もっとうまく制御されている。


- 電球の光はずっと安定して点灯し続けていて、電子があるところから別のところに急に飛ぶことがない。
- ではどうしてこのようにうまく制御されているのだろうか？
- **それは回路内の原子は隣の原子へきれいに電子を受け渡しているからである**
- つまり、**ある原子が電子を隣の原子に奪われると、別の隣の原子から電子を奪い、さらにその原子はまた別の隣の原子から電子を奪う...**ということを規則的に繰り返しているのである。
- しかし、この電子のリレー現象は自然に起きるわけではない。ただその辺のものを適当に繋ぐだけでは当然電気は発生しない。
- このリレー現象を成立させるには、**「回路を巡る電子の動きを促進する何か」**が必要なのである。
- まず兎にも角にも電気を発生させるものが必要で、それは先ほども述べた通り「電池」である
- - 電池の仕組みは複雑でなかなか理解しづらいものだが、ざっくり説明すると内部で化学反応を起こし、マイナス端子（陰極）に余剰な電子を生み出し、プラス端子（陽極）に電子不足の状態を生み出すものである。
  - つまり、**化学エネルギーを電気エネルギーに無理やり変換しているものである**
- しかし、残念ながら**この化学反応は電池の陰極から余剰な電子を奪って陽極に戻す何らかの「道」がなければ進まない、つまり電池に何も接続されていない場合ほとんど何も起こらないのである。**（実際起こるケースもあるが、その場合非常に高い電圧が必要になる。雷がいい例。）
- 反応が起きるのは、**電気回路が存在して電子を陰極から奪って陽極に供給する場合だけである**
- このために用いられるのが**「導線」**である。**つまり導線を用いて電気回路を作ることで、導線が電池に化学反応の「道」を提供しているのである。**
- こうすることで回路は電池の陰極から電子を奪い陽極に届けられるようになり、電池内の化学反応が続く限り電気が発生し続けるのである。
- 先ほど例に出した回路の場合、電子は反時計回りに移動する

## 導体と絶縁体
- - ここで少し根本的な疑問が浮かび上がってくる。
  - そもそも導線はなぜ必要なのだろうか？空気中を「道」と見立てることができれば、導線は必要ないのではないのだろうか？（空気中にも様々な原子が存在しており、それらの原子を利用すれば電子の受け渡しは可能そうに見える）


- 答えは**「実際流れることは流れるけどなかなか実現が難しい」**である。
- つまり、**電気は空気中を流れることは可能なのである。よく見かける雷も空気中に電気が流れる何よりの証拠である。**
- だけど雷を見て分かる通り**電気はそう容易に空気中を流れるわけではない。**
- 先ほどの「電子論」でも述べたように原子には電子を放しやすいものや受け取りやすいものが存在しており、これは原子の性質に由来している
- これを踏まえると、例えば原子内の離れたところに電子がひとつだけある場合その原子は電子は放出しやすいということが言えそうである。
- こういった原子で構成された物質は電気の運搬を容易にするので**「導体」**と呼ばれている。金属などがその典型。
- そして当然電子を放出しやすいものがあれば電子を放出しにくいものもあり、この中で特に電気を通さないものを**「絶縁体」**と呼ぶ。空気もこの絶縁体の一種であり、ゴムやプラスチックもその典型例である。（ただし電圧が充分高ければほとんどどんな物質でも電気を通すことが可能）
- こういった背景があり、**電池を使った回路を作成する際は導線が必要なのである。**


## 抵抗/電圧/電流
- 先ほどほとんど電流を流さない物体を絶縁体と呼ぶことを説明したが、このように電流を通しにくい性質のことを**「抵抗」**と呼ぶ。簡単にいうと**電流の流れを「止める」性質**と考えればよい


- 絶縁体であるゴムやプラスチック、さらに乾いた空気などは非常に高い抵抗を持っているということが言える
- - また**一般的に抵抗は長ければ大きくなり、太ければ小さくなるという性質を持つ。**
  - これは電気回路を水路と考えるアナロジーを利用すれば容易に想像がつくだろう
  - 抵抗がどうしてこういった性質があるのか？を知りたい方は[こちらの記事](https://wakariyasui.sakura.ne.jp/p/elec/dennryuu/o-mu.html#teikou)を参考にすると良いでしょう。
- 次に「電圧」について考えてみる。
- - 電圧は一般的に仕事をするポテンシャルを表している。
  - 簡単に例えると、何かしらのものを高い建物から落とすと、衝撃が発生するが元々地面に置いてあるものは衝撃は発生しない。
  - つまり、高いものは（仕事をする）ポテンシャルが大きく、低いものはポテンシャルが小さいと言える。これと同じことが電気の世界にもあるイメージ。（ここも後に説明するアナロジーで理解できる）
- そして通常電池の両端には電圧が発生している。
- - 最後に電流は回路を実際に走り回っている電子の個数に関係している。具体的にはある特定の位置に毎秒どのくらい電子が流れるか？によって電流の値は決まる
  - 電流の定義について詳しく知りたい方は[こちらの記事](https://wakariyasui.sakura.ne.jp/p/elec/dennryuu/dennryuu.html#syousai)などを参考にしてください。高校物理の復習です。



## オームの法則
- 先ほど述べた抵抗/電流/電圧の間には**「オームの法則」**と呼ばれる有名な関係が成り立つ


- 例えば以下のような電気回路を考えた場合（電源に「電池」、負荷に「抵抗器」を使用）、次の式が成り立つ。

　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/20acdc74-3767-9e32-e5e5-249c69f5a383.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/3865aa8e-b9c8-606b-608c-4882dddd99c4.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/664a8341-0eed-52e7-ae85-acb762fc56cd.png)

※引用元　[「KIT 物理ナビゲーション」](https://w3e.kanazawa-it.ac.jp/math/physics/high-school_index/electricity_and_magnetism/electric_current_and_electric_resistance/henkan-tex.cgi?target=/math/physics/high-school_index/electricity_and_magnetism/electric_current_and_electric_resistance/ohms_law.html)

- このオームの法則を直感的に理解するには、**水の流れをアナロジー（比喩）**として用いると良い


- つまり、**電流を水の流れる量、電圧を水源のある高さ、抵抗を水路の細さと考える**
- こう考えると「水源の位置が高いほど、水が流れやすい（＝Vが大きいほどIが大きい）」といったことや「水路が細いほど水が流れにくい（＝Rが大きいほどIが小さい）」といったことが直感的に理解可能である
- つまり、電流は電圧に比例し、抵抗に反比例するということである。

## 電球
- 次に電球の仕組みについて見てみる


- まず先ほどのような電気回路を作成し、電流を流した場合、抵抗には熱が発生する。
- **これが電球の仕組みの大切な部分を担っている**
- ではなぜ熱が発生するのか？というとまず導線や抵抗の中身は以下のようになっており、電流を流すことによりこれらの中を電子が移動する
- しかし、図からも分かる通り電子は移動中に導体中の他の陽イオンにぶつかってしまい、激しく振動させる
- これにより熱運動が発生。温度が上がり、熱が発生する。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/c5783e18-69c5-2512-78a7-3582d4b88a8d.png)
※引用元　[「わかりやすい高校物理の部屋」](http://wakariyasui.sakura.ne.jp/p/elec/ene/jyu-ru.html)

- 白熱電球の場合、内部にフィラメントと呼ばれる細い線がある。このフィラメントの中を電子が動いた際に生じる熱が電球を発光させている
- 電球の仕組みについて詳しく知りたい方は[こちらの記事](https://stonewashersjournal.com/2014/07/30/lightsofhuman/)を参考にすると良いでしょう。

## スイッチ
- 最後に最も重要な部品である「スイッチ」について。


- このスイッチは電気が回路に流れるかどうかを制御していて、例えばスイッチを閉じれば電流が回路に流れる
- ここからスイッチは閉じているか開いているか？のどちらかであり、さらにそれにより電流は流れるか流れないかのどちらかであり、そして電球は光るか光らないかのどちらかであるということが言えそうである。**つまり懐中電灯というのはモースやブライユの発明したバイナリコードのように中間がないのである。**
- ここからも分かる通り、電気にとって「区別しやすい」状態の数というのは2であり、さらにこの2つの状態というのはバイナリコードでも分かる通り様々なものを表現する上でも非常にやりやすいのである。
- **このバイナリコードと電気回路との類似性はコンピュータの仕組みを考えていく上で非常に重要になる**

<br>
<br>


# 5. 角を回ってみる
## 双方向電信システム
- 夜中に懐中電灯を用いてモールス信号で会話を行う方法はお互いの家が向かい合っている場合うまくいくが、隣り合っている場合などには不向き


- さっきまで説明してきた懐中電灯内の回路の知識を用いれば、電灯を自作することができ、これにも対応できるのでは？
- 具体的には以下のようなものを作り上げれば双方向電信システムが構築され、懐中電灯なしにモールス信号で通信が可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/48d7145c-2a17-7b31-66dd-75d0139ffe98.png)


- 片方の電球を自分の家に、もう一方の電球を友人の家に置き、スイッチのオン/オフにより電球を点灯させれば通信可能になる

## 導線のコストダウン

- しかし、一方でこの回線は少々導線の無駄遣いがすぎる


- 例えば、以下のように導線部分を共有すれば減らせるだろうし、またあるいは地球という大きな導体を用いてアースすればもっと減らせる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/0d9bc66c-ab34-a57f-3bb3-e431a74ee2c8.png)

## 導線の長さの問題

- こうした電気回路を用いることで懐中電灯では真っ直ぐ見通せるところでしか通信できなかったものが、**角を回っても通信できるようになる**


- そして懐中電灯ではある程度の距離の制約が存在していた（距離が長くなれば当然暗くなってしまう）が、**こちらでは距離の制約もなくなる**
- しかし、この距離の制約を完全に消すことは果たして本当にできるのだろうか？
- 導線は電導体ではあるものの、**やはり距離が長くなればなるほど抵抗が増すのもまた事実であり、その長さにも限界が恐らくある**
- この解決策として、例えば導線を太くし抵抗を小さくしたり、電圧を大きくするなどを試してみても、やはり導線を無限に伸ばすことは難しい。
- 実際150年前に人々がアメリカとヨーロッパを横断する最初の電信システムを作ろうとした時のも同様の問題に直面した
- その際この電信システムの限界距離はせいぜい数百マイルほどであった。これではニューヨーク〜カリフォルニア間の数千マイルにも遠く及ばない
- **この問題を見事に解決したのがリレーと呼ばれる装置なのだが、これがのちのコンピュータの基盤となる**

<br>
<br>

# 6. 電信とリレー

## 電信
- 先ほども登場した電信、このシステムを最初に作り上げたのはモールスコードの発明者でもあったサミュエル・モース。


- 近年私たちが使用している世界的な即時通信というのは、比較的最近発達したものであり、1800年代初期には即時かつ長距離通信の両立は不可能だった
- 即時通信の場合は声の届く範囲または目で見える範囲が限界だった。
- また長距離通信には手紙が用いられ、非常に時間がかかった
- **こうした「即時かつ長距離通信」を実現させるため電信は発明された**
- 電信の仕組みはシンプルで**「電線の一端で何かをすると、もう一端で何かが起こる」ということを利用する**
- 電信の詳しい仕組みについては[「こちらのサイト」](https://www.power-academy.jp/electronics/familiar/fam02100.html)に載っていますので、そちらを参照してください。
- これはまさに前章の電気回路を用い双方向電信システムと原理的には同じである
- しかし、唯一違うのはモースは電球を使用できなかったということである。**残念ながら実用的な電球の発明は彼の死後の1879年までなかった。**
- そのためモースは代わりに**「電磁気」**という現象に頼ることにした
- つまり、鉄の棒に細い導線を巻きつけたものを用意し、導線に電流を流すことにより磁場が発生するいわゆる「電磁石」と呼ばれるものを利用するのである
- そもそも電荷が動くと磁場が発生し、例えばソレノイド（導線を密に長く巻いた円筒形のコイル）に電流を流すと以下のような磁場が発生する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/13a38376-3f21-4e04-cf6d-f59a0511da71.png)
※引用元　[「わかりやすい高校物理の部屋」](https://wakariyasui.sakura.ne.jp/p/elec/ryuujiba/ryuujiba.html)

- このソレノイドに鉄心を組み込むと、内部の鉄心が磁化されて磁石のような働きをし、これを「電磁石」と呼ぶ。


- つまり、電磁石に電流を流すと磁力が発生し、他の鉄片などを引きつけるようになり、逆に電流を止めると磁力を失うことになる

## 電信とサウンダ
- この電磁石の仕組みを利用して電信は作られたが、当初の電信の仕組みは少々複雑であった。


- これは「電信システムにより紙の上に実際に何かを書かなければならない」という固定観念があったからである。つまり、電信には「紙と文字が必要」と思い込んでいたのである
- イメージとしては、一端にスイッチを入れると電流が流れてもう一端の方に磁力が発生し、その磁力によりペンを制御し、紙にドットとダッシュを記していくイメージ。そしてモールスコードを読める人がそのコードを文字に置き換えていく
- - しかし、しばらく経つとモールスコードをわざわざペンと紙を用いて記す必要がないことに気づいた。
  - つまり、ペンが上下動する際に発生する音を聞くことでコードを書き換えられることに気づいた。
  - このペンの機構はすぐに以下のような「サウンダ」という音響式受信機に取り入れられた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/624f9bf7-cd90-d4ea-ac48-8eb560fb0659.png" width=70%>

- サウンダは送信側で電信キーが押されるとサウンダの電磁気が可動棒を引き下げ「カタッ」という音をたて、キーが離されるとぼうが元の位置に戻り今度は「コトッ」音を立てるという仕組みである。


- これにより素早い「カタコト」がドット、遅い「カタッコト」がダッシュとなり、音を聞くだけで文字に置き換えることが可能になった
- そしてこのサウンダ、送信キー、電池、導線を用いることで先ほど作成した双方向電信システムに似たような電信を作ることができる
- これにより人々は初めて「即時かつ長距離通信」が可能になったのである。**そして非常に興味深いのはこれはバイナリコードを用いた通信であったことである。**

## リレー
- しかしこの電信も先ほどの導線の長さの問題をクリアできたわけではなかった。つまり、**導線の長さを長くすればするほど抵抗も大きくなるため遠くと通信することが難しかったのである**


- この解決策として次に考えられたのが**「中継システム」**を採用することであった。つまり、今回の電信システムの場合約200マイルごとにサウンダと送信キーを設置し、人間が電文を受けて再送するのである。こうすればどれほど遠くの相手であっても電文を届けることが可能になる
- ここで最初のうちは人間が電文全体を受け取ってから再送するという仕組みで動かしていたが、徐々にサウンダのカタカタする音と同時に文字を書き留め、電文が終わったらキーを使って再送するようになった。
- そしてさらに慣れてくれば全部聞き取ることなく聞きながら送るということもできるようになった
- しかし、これも実は非効率的である。ある時、この再送側の人間は「サウンダ」と「キー」を連動させることはできないだろうか？と考えた。つまり、**人間の手を借りずに再送することはできないだろうか？と考えた。**
- 例えばサウンダが上下動する度に送信キーを押し込むような仕組みを作れれば良さそうである
- この仕組みのもと発明された装置が**「リレー」**である。
- リレーは入ってくる電流を使って電磁石を動かし、金属製のレバーを引き下げる。これはサウンダと非常によく似ているのだが、唯一違う点はバーが出て行く導線に電池をつなげる「スイッチ」の一部として使用されている点である。
- これにより、中継地点で弱い入力電流が「増幅」されて強い出力電流となって出ていくのである。イメージとしては以下のような感じでどんどん入力電流をリレーして繋げていく感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/751055/3fabf622-81a3-b8ae-0823-80a6cad63dc3.png)


- このリレーは非常に画期的な発明であり、中でも注目すべきは**中継地点のスイッチ**である。**このスイッチは人間の手ではなく電流によって作動するスイッチであり、そしてこれは実はコンピュータの大部分を作ることでさえ可能にした。**



<br>
<br>

# -1. つづく

- **[[初心者]CODE 〜コードから見たコンピュータのからくり〜 ②](https://qiita.com/yusuke_blog1026/items/307fdf81ca42f3cca9b5)**

- **[[初心者]CODE 〜コードから見たコンピュータのからくり〜 ③]()**・・・（現在執筆中）

- **[[初心者]CODE 〜コードから見たコンピュータのからくり〜 ④]()**・・・（現在執筆中）