🌍

【要約と感想】 Webを支える技術 ①概要・歴史 編

2023/04/08に公開

Webを支える技術

https://amzn.to/43ei8em

最近、Webサーバ周りの技術に関わることが多くなり、そもそもHTTPというプロトコル自体のまとまった知識がなかったので、「Webを支える技術」を読んでみました。

書店でも見かけていたし、Amazonでの評価も非常に高かったので即ポチりしたんですが、届いた本の奥付を確認してビックリ、なんと2010年の本で、初版のまま更新がありませんでした。
情報が古くて参考にならないのではないか、今読んでも意味があるのか?と思いつつ、まぁ都度ググって補足していこうというつもりでいました。

読んでみたざっくりの感想

結論としては、非常に勉強になりました。
HTTPの歴史、というかWebの歴史から学ぶことができ、技術の発展を垣間見ることができました。
また、HTTPというプロトコルが長い年月を経て今なお現役で利用されている理由を理解することができ、HTTPのまとまった知識を得る、という一番の目的も達せられたと感じています。

当初の懸念通り、情報が古くなっていた部分もありましたが、当時の技術としてはこれが使われていたのだな、と参考にすることができます。
「この情報は古いかもしれないな」と思ったりしたら、MDNのHTTPに関するページを適宜参照して補完するのが良いと思います。(というかこのページ自体が素晴らしくまとまっているので、これも一通り読むのがおすすめです。)
https://developer.mozilla.org/ja/docs/Web/HTTP

おことわり

以下、あらかじめおことわりしておきます。

  • 「Webを支える技術」について、すべては紹介できませんが、バッサリと端折りつつ、私が面白いと思った部分について感想を交えつつ紹介していこうと思います。
  • すべてが感想的な語り口になってしまうとどうも伝わりにくい気がしたので、書籍に書かれている内容に関しても、あえて私自身が話し手の立場のような口調で書いています。
  • 内容の信憑性に関しては保証出来かねます。

そもそも「Web」って何?

Webとはなんですか?いざ聞かれるとなんといっていいかわからなくなりますよね。
本書では色々な観点からWebという言葉が語られていましたが、一言でいうと以下の説明が私にはしっくりきました。(本書内の言葉ではないのですが)
https://ds-b.jp/media/what-is-web/

Webとは、インターネット上のさまざまな情報(テキスト・画像・動画など)の閲覧を可能にするシステムのことです。

つまり、Webというのはインターネットという広大な海の上にある、超大規模な情報システムであるとも言えると思いますが、このWebには「ハイパーメディアシステム」と「分散システム」という2つの側面があります。

ハイパーメディア

ハイパーメディアとは、テキスト、画像、映像といった情報を、ハイパーリンク(リンク)によって結び付けている仕組みのことを言います。
今では当たり前のようにリンクによって情報から情報へ飛んでいけるようになっているわけですが、例えば書籍などを考えてみると、引用があってその内容を読みたいとしても、引用先の書籍をまた用意しないと参照できないわけで、情報からすぐさま他の情報に飛ぶことはできないわけです。
Webではこの画期的な仕組みによって、非常に効率的に情報を取得することができるようになっています。

分散システム

コンピュータができた当初は、一つの大型コンピュータで大規模な計算を行う、いわゆる「集中システム」でした。
その後、メインフレームと呼ばれるコンピュータが開発され、様々な用途で使用されるようになりましたが、その頃もまだ複数の端末を一つのメインフレームに接続し、処理はメインフレームが集中して行う、という構成でした。
https://ja.wikipedia.org/wiki/メインフレーム

メインフレーム(英: mainframe)は、主に企業など巨大な組織の基幹情報システムなどに使用される大型コンピュータを指す用語[1]。汎用コンピュータ、汎用機、大型汎用コンピュータ、ホストコンピュータ、大型汎用機 などとも称される[2][3]。

しかし、Webではインターネット上に無数のサーバが分散して存在しており、クライアントからのリクエストに対してそれぞれのサーバが処理を行います。
また、ユーザは世界中にいます。
つまり、世界中のユーザは、1台のコンピュータでは到底扱いきれないような膨大な情報を手に入れることができるようになっています。
これも、ハイパーメディアと同じように、Webの大きな特徴の1つと言えます。

Webの用途

少し別の観点で、今後はWebの用途について考えてみます。

我々が普段使っているようにWebサイトを見て情報を仕入れたり、モノを買ったり色々なことができますよね。非常に便利です。
これは、ユーザのためのWebと言えます。

一方で、エンジニアの視点で考えると、Web APIを利用してアプリケーションを開発したりもできます。
https://e-words.jp/w/Web_API.html

Web APIとは、HTTPなどのWeb技術を応用して、あるコンピュータで動作しているソフトウェアの機能を、ネットワークを通じて他のコンピュータから利用できるようにする仕組み。
これは、ユーザのためのWebに対して、プログラムのためのWebと言えます。

今ではアプリケーションにおいてWeb APIの活用は当たり前で、Webはユーザのためだけではなく、プログラムのためにもなくてはならない存在になっています。

Webがない時代

今では生活になくてはならないWebですが、時代を遡ってみると、初期のインターネットにはWebという仕組みがありませんでした。
インターネットというのは、元々はアメリカの大学や研究機関のみの間で構築されたネットワーク(ARPANET)から始まっており、当初はWebというものがなかった、つまりは、テキスト、画像、映像などの様々な情報をやりとりするような仕組みはなかったのです。
https://e-words.jp/w/ARPAnet.html

ARPANETとは、1969年に米国防総省の高等研究計画局(ARPA、現在のDARPA)が導入したコンピュータネットワーク。各地に分散した大型コンピュータ同士を通信回線で相互接続したもので、後のインターネットの原型となった。

私はそもそも、インターネットとWebをほぼ同義として認識してしまっていた気もしており、改めて明確に区別しなくてはと調べてみました。
すると、あくまでインターネットとはネットワーク(通信網)のことであり、その上で情報をやり取りする仕組みをWebというのだなと、と理解を整理することができました。
https://ja.wikipedia.org/wiki/インターネット

インターネット(英: the Internet)は Internet Protocol を用いて接続されたコンピュータからなる、世界規模の情報通信網である[1]。

Webの誕生と普及

Webの誕生は1990年。
スイスのCERNという研究所で働いていたティム・バーナーズ=リー氏がWebの案を考え、自らクリスマス休暇にブラウザとWebサーバを完成させたというエピソードがあります。
https://ja.wikipedia.org/wiki/ティム・バーナーズ=リー

その後、Webは徐々に普及していきますが、それをさらに加速させたのが、1993年に公開された「Mosaic」というブラウザです。
https://ja.wikipedia.org/wiki/NCSA_Mosaic

それまでは、ブラウザ単体では文字情報しか扱えませんでしたが、Mosaicは画像を混在させることができるようになり、Internet ExplorerやFirefoxなどの源流になりました。

Mosaicの出現によって、Webはどんどん普及していきます。
また、本書では触れられていませんが、1995年には一般向けに販売されたOSである「Microsoft Windows 95」がリリースされるわけなので、それも相まってだと思います。
https://ja.wikipedia.org/wiki/Microsoft_Windows_95

インターネットが一般に広まりはじめた時期に、業務用だけでなく、一般家庭にも急速な普及を見せた画期的なOSで、パソコンを爆発的に普及させる原動力となった。

RESTの誕生(Webのアーキテクチャスタイル)

そして2000年になると、またWebの普及において欠かすことができない重要人物が出てきます。
アメリカのカリフォルニア大学の大学院生だった、ロイ・フィールディング氏です。
https://en.wikipedia.org/wiki/Roy_Fielding

ロイ・フィールディング氏は、Webの創成期からWebで利用するソフトウェア(Apache httpd等)の実装に携わってきており、その経験をもってティム氏らとともにHTTP/1.0、HTTP/1.1の仕様策定に関わりました。
そして、まだ大学院生だったので、自分が関わっているWebシステムが、なぜこんなに大規模なのに成立できているのかを分析し、その結果としてWebのアーキテクチャスタイル(設計思想)を「REST」と名付け、2000年に自分の博士論文の中で発表しました。

私自身、RESTという言葉は、良く目にする一方でいまいち理解できていませんでしたが、以下を組み合わせた設計思想のことをいいます。

  • クライアント/サーバ
  • ステートレス(状態を持たない)
  • キャッシュ(一度取得したリソースをクライアント側で使いまわす)
  • 統一インターフェース(HTTPという一つのインターフェースでやりとりする)
  • 階層化システム(ロードバランサ、プロキシ等で階層化する)
  • コードオンデマンド(クライアント側でコードを実行させる)

これを一つ一つ深掘りするのは別の機会にします。
ここでは申し訳ないくらい非常にざっくりいってしまいますが、RESTは「できる限りシンプルにする」という思想と言えます。

そして、Web自体が基本的にはこのRESTに則っているだけでなく、我々が新たなWebシステムやWeb APIを作成するときにも、このRESTをベースすることが重要だとされています。
RESTに則って実装されたものを「RESTfulである」と表現したりもします。

ここまでのまとめ

  • Webには「ハイパーメディア」と「分散システム」という大きな2つの特徴がある
  • Webは、ユーザ(人間)だけでなく、プログラムのためにも重要な存在である
  • インターネットとは世界規模のネットワークであり、Webとはその上で稼働する大規模な情報システムである
  • ティム・バーナーズ=リー氏によって、Webが誕生
  • ロイ・フィールディング氏によって、WebのアーキテクチャスタイルであるRESTが誕生
  • できる限りシンプルにRESTfulなシステムは、Webシステム全体を良い方向へ導く

「【10分で読める要約と感想】 Webを支える技術 ②URI 編」に続きます。

Discussion