【連載】へっぽこエンジニアが「Webを支える技術」を要約してみた（第2章）

# はじめに
自分はWebの基礎を固めないままエンジニアとして過ごしていました。
そのことに焦燥感を感じることが多いため、今回 [技術評論社](https://gihyo.jp/book) から出版されている [Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)](https://gihyo.jp/book/2010/978-4-7741-4204-3) を要約する連載することにしました。

今回は第2章の要約となります。

[前回 - 【連載】へっぽこエンジニアが「Webを支える技術」を要約してみた（第1章）](https://qiita.com/sasanda_panda/items/b1f74cb8ee27f7f47df3)
[次回 - 【連載】へっぽこエンジニアが「Webを支える技術」を要約してみた（第3章）](https://qiita.com/sasanda_panda/items/4c558152713cb945eccc)

# 対象読者
「はじめに」を読んで心当たりのあるエンジニアの方。

# 第2章 Webの歴史
## 2.1 Web以前のインターネット
- インターネットの起源は1969年に構築された全米をつなぐネットワークのARPANET
- 全ての文字が英数字だった
- TCP/IPによる転送だけでなくバケツリレー式のUUCPによる転送も存在したため遅延があった

## 2.2 Web以前のハイパーメディア
### Memex - ハイパーメディアの起源
- 1945年に構想された情報システム **(構築はされていない)**
- 現在のWebの考え方に近く、電気的に接続した本やフィルムを相互リンクさせる

### Xanadu - ハイパーメディアという言葉の誕生
- 1965年に「ハイパーテキスト」と「ハイパーメディア」という言葉が考案された

#### ハイパーテキスト
- 文字情報中心の文書を相互リンクさせる概念

#### ハイパーメディア
- 音声や動画など多様なメディアを相互リンクさせる概念

### HyperCard - 初の実用的なハイパーメディア
- 1987年にAppleが開発した
- 「カード」と呼ばれる文書を単位として相互リンクさせ、  
  HyperTalkという言語で実行できるスタンドアロンなWebサービス

### Web以前のハイパーメディアの問題点
- 単方向リンクしかサポートしていない
- リンクが切れる可能性がある
- バージョン管理や情報引用の機能がない
- **しかし、必要最低限のリンク機能だけというシンプルさがWebを成功に導いた**

## 2.3 Web以前の分散システム
### 集中システムと分散システム
- 1970年代以降コンピュータの小型化と性能向上が顕著になり、  
  複数のコンピュータを組み合わせて処理分散し、  
  全体の性能向上を図る手法が登場した

### RPC - 他のコンピュータの機能を利用
- RPC = Remote Procedure Call
- 分散システムを実現するための技術の1つで、  
  リモートサーバで実行しているプログラムをクライアントから呼び出すことができる

### CORBA、DCOM - 分散オブジェクトへの進化
- CORBA = Common Object Request Broker Architecture
- DCOM = Distributed Component Object Model
- オブジェクト指向の考えを基に、関数呼び出しだけでなくオブジェクト自体をリモートに配置する「分散オブジェクト」という技術が考案された
- 非常に複雑な仕様で互換性がなかった

### Web以前の分散システムの問題点
- RPCベースのシステムの問題点は以下の通り

#### 性能劣化の問題
- ネットワーク越しの関数呼び出しは時間がかかる
- 関数の粒度が小さいので呼び出しの回数分さらに時間がかかる

#### データ型変換の問題
- プログラミング言語ごとにサポートするデータ型が異なる

#### インタフェースバージョンアップ時の互換性の問題
- 機能追加に伴ってサーバのインタフェースを更新すると、  
  古いクライアントに対して買い互換性を保てない

#### 負荷分散の問題
- サーバ上にクライアントのアプリケーション状態を保存するため、
  サーバ間にその情報を共有する必要がありそれぞれのサーバに負荷がかかってしまう

## 2.4 Webの誕生
- 1990年にハイパーメディアを用いたインターネットベースの分散情報管理システムとしてWebの提案書が書かれた
- 1993年に公開されたMosaicというブラウザがWebの普及を一気に加速させた  
  文字だけでなく画像も情報として追加できた

### ハイパーメディアとしてのWeb
- 不特定多数の情報をリンクさせ合うことでシステムを大規模化させやすいという利点
- リンク切れをおこしやすいという欠点

### 分散システムとしてのWeb
- クローズドなネットワーク環境ではRPCが優れていたが、  
  オープンなネットワーク環境ではWebが優れていた
- クライアントとサーバ間のインタフェースをシンプルなHTTPで固定したことで、  
  様々なデバイスやブラウザでWebサービスへアクセスできた

## 2.5 Webの標準化
### Webの仕様策定
- クライアントとサーバ間の相互運用性を求められたため、  
  HTTP、URI、HTMLの標準化が求められるようになった
- Web以前のインターネット標準はIETFのRFCと呼ばれる技術仕様だったが、
  Webがあまりにも急速に普及したためIETFの仕様策定が追いつかなくなった
- そこでW3Cが設立され、  HTTP、URI、HTML、CSSなどの標準化が行われた

### RESTの誕生
- REST = Representational State Transfer
- 2000年に命名されたアーキテクチャスタイル
- HTTPはハイパーテキスト以外に「リソースの状態(State)」の「表現(Representation)」を転送しているという考え

## 2.6 Web APIをめぐる議論
- SOAPという分散オブジェクト寄りの考えが生み出されたが、  
  実装の複雑さと運用面に難があることからシンプルなRESTの方が広まっていった

## 2.7 すべてがWebへ
- RESTの普及とともに、UIはWebで統一され始めた
- エンドユーザーはWebだけを意識するようになった

# 今回のうろ覚えワード
- **TCP/IP**  
  TCP = Transmission Control Protocol  
  IP = Internet Protocol  
  安全性重視でインターネットっぽいやり取りするときに使用される通信手順や規約のこと
- **UUCP**  
  UUCP = UNIX to UNIX copy  
  UNIXマシン間で情報をやり取りするときに使用されるプログラムのこと
- **スタンドアロン**  
  ネットワークから切り離されているコンピュータのこと
- **IETF**  
  インターネット関連の標準化を行なっている団体のこと

# 感想
- インターネットとWebの違いを意識したことがなかった
  - **インターネット**  
    世界中のコンピュータをつなげている大規模な通信網のこと
  - **Web**  
    インターネットを介して情報を公開閲覧する仕組みのこと
  

# 参考
- [TCP/IPとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word1540.html)
- [UUCPとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word14723.html)
- [スタンドアロン (standalone)とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word1255.html)
- [IETFとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11362.html)
- [Webとは何なの？インターネットとの違いとは？意味をザクッと簡単説明！ | 拝啓、覆面のパンダ夫婦です](https://fukumen-panda.com/web-description)