この記事について
- 目的:書籍「作りながら学ぶWebシステムの教科書」の学習ログ
- 立場:学習メモ(誤りの指摘歓迎)
- 検証環境:macOS 15 / UTM (ARM) / Ubuntu Server 24.04
学習背景
私は2025年8月から日本酒を扱うスタートアップにTechとして関わることになりました。その勉強会で指定された本が「作りながら学ぶ Webシステムの教科書」です。
学習開始時のスキル
- 学校の授業でPythonを使ったデータ分析を行った経験があり、簡単な分析ならできる
- Webの仕組みについては何も知らない
- Udemyで [Web Developer Bootcamp] を受講中のため、HTML、CSSについて基本的な理解がある
課題図書を第3章までざっと読んだものの、理解が十分でないと感じたため、以下の入門書を先に読みました。
図解が多く非常にわかりやすく、HTTPSなどのプロトコルや仮想化について、説明できるほどではないものの「なんとなくイメージが掴める」レベルまで理解を深めることができました。
また、同じ著者による書籍のため説明が重複する部分もありますが、むしろ学習内容を思い出す助けになりました。
5時間ほどでざっと読めるので、この入門書から本書(課題図書)に進む流れは、初心者にとって非常におすすめだと感じます。
第1章 重要度が増すWebシステムとは
Webシステム
- WebブラウザーやWebサーバーを使って実現される情報システムのこと
- Webブラウザーによって汎用化され、ITインフラとなった
- APIによって利用が拡大
クライアントがWebサーバーにリクエストを送信、レスポンスを受信する過程を経て、Webブラウザーにコンテンツが表示されている。スマートフォンやパソコン単体でコンテンツは表示されないし、ネットワークにつながっている必要がある。
APIとは、プログラムのためのインターフェースである。たとえば、郵便番号を入力して住所が自動入力されるが、これはAPIがWebサーバーにリクエストを送信、その結果をクライアントに返答して表示されている。
構成要素
- 大きくソフトウェアとハードウェアに分けられる
- ハードウェアは、パソコン、サーバー、ネットワーク機器など
- ソフトウェアは、OS、ミドルウェア
Webシステムの発展
技術の進歩によってWebコンテンツはリッチなものに。Webサーバーは用意されたコンテンツを送るだけでなく、CGIやSSIによって動的なコンテンツを提供するようになり、Webアプリケーションサーバーと呼ばれるようになった。Web上の通信で使用するプロトコルも進化し、より速く、信頼性の高いものになっている。
第2章 Webシステムの基本
プロトコル
Webコンテンツは、クライアント(利用者の端末)とWebサーバーの間でやり取りされて表示される。そのためには、通信の手順や規格が定められており、これをプロトコルと呼ぶ。
クライアントがWebサーバーと通信する際には、データの送受信を階層的に処理する仕組みが使われる。下位の層でデータを伝送し、その上位の層でデータをアプリケーションに渡すという流れが積み重なって、最終的にWebブラウザに表示される。
代表的なプロトコルには、HTTP/HTTPS(アプリケーション層)、TCP(トランスポート層)、IP(ネットワーク層)、Ethernet(データリンク層)などがある。これらは階層ごとに役割が分かれており、基本的に隣り合った層のプロトコル同士でやり取りする。役割は重複せず、互いに補完し合うことで通信全体を実現している。
これらのプロトコルは、IETFによって標準化されているため、世界で円滑にデータ通信を行うことができている。
Ethernet
物理層とネットワーク層をやり取りする。
Ethernet通信には、Ethernetアダプター(LANカード)が必要である。これには、世界に1つしかないMACアドレスが割り当てられており、これによってコンピューターを識別する。
また、Ethernetではデータを一定の大きさに分割して送受信される。
IP
インターネット通信で使用される基本的なプロトコル。
Ethernetの1フレームには格納できるデータの大きさに上限があるため、IPは必要に応じてデータを小さな単位(パケット)に分割し送信する。
また、IPは宛先アドレスをもとにルーティングテーブルを参照して通信経路を決定する。ルーティングテーブルには「どのネットワークがどの方向(次のルーター)にあるか」という情報がまとめられており、それによって世界中のどの端末とも通信できるようになっている。
*私はEhternetでそれぞれの端末に固有のMACアドレスがあるのなら、わざわざIPを使わずにMACアドレスを利用して通信できるのではと考えた。しかし、MACアドレスだけでは「同じネットワーク(LAN)の中」でしか直接通信できない。そのまま利用すると、大規模な通信網ではアドレス管理が煩雑になり、全体を効率的に運用できない。
そこで、IPアドレスが導入されることで、ネットワーク全体を階層的に分けて整理できる。IPアドレスによって宛先が「どのネットワークに属する端末か」を効率よく仕分けできるため、結果として世界規模でも通信が円滑に行える。
TCP
トランスポート層で使用される。Webサーバーに届いたデータをアプリケーションに正しく渡す役割を担う。
IPにによる通信では、パケットが確実に届くことを保証していない。そのため、TCPでは信頼性を向上されるために様々な機能がある。
- 再送制御:パケットが欠損した場合に再送を行う
- 再送タイムアウト:一定時間内に応答がなければ再送を開始
- シーケンス番号:パケットに通し番号をつけ、順序通りに再構成する
- スリーウェイハンドシェイク:通信開始時に3回のやり取りで接続可能か確認する
また、TCPではポート番号をふってどのアプリケーションにデータを渡せば良いか区別する。
一方、TCPはスリーウェイハンドシェイクなどの信頼性機構により遅延が発生する。Youtubeや通話など、多少データが欠損しても問題がない場合、転送効率を求めてTCPの代わりにUDPが使用される。
HTTP/HTTPS
アプリケーション層で使用されるプロトコル。
クライアント(Webブラウザなど)がリソースを要求し、Webサーバーがそれに応答することで、アプリケーションレベルの通信が行われる。
HTTPにはバージョンがあり、以下のように進化してきた:
- HTTP/0.9:テキストのみを返す非常にシンプルな仕様
- HTTP/1.0, 1.1:ヘッダ導入や持続的接続など、現在も広く利用されている基盤
- HTTP/2:バイナリ化、ストリーム多重化により効率的な通信を実現
- HTTP/3:TCPではなくQUIC(UDPベース)を利用し、遅延の低減と信頼性向上を両立
また、HTTPSはHTTP通信にTLSによる暗号化・認証・改ざん検知を加えたもので、現在のWebでは事実上の標準となっている。
*TCPとHTTPの役割が被ってるのではと疑問におもった。HTTPはデータをどの形式で何を送るかを決める。TCPはデータをどう確実に届けるかを考える。HTTPがやり取りするデータはTCPの上ニに乗る。つまり、HTTPは郵便物で、TCPは配達員だと理解すると腑に落ちた。
第3章 Linuxの基本
第4章
以下9/8までに全章終わらせる予定です。