書籍感想:「Webを支える技術」から学んだことと実務へのヒント
はじめに
『Webを支える技術』は、HTTPやURI、RESTといったWebの基盤を構成する要素を、歴史的背景から設計思想まで解説している一冊です。
書籍リンク
読み進める中で、「当たり前だと思っていた仕様やルール」が、実は明確な目的と哲学のもとに設計されていることに気づきました。特に、RESTやHTTP通信の章は、今後の開発で指針となる内容でした。
各部ごとの概要を紹介し、最後に総括と今後活かしたいポイントをまとめます。
第1部 Web概論
Webを支える基盤が、HTTP・URI・HTMLという三本柱です。HTTPは通信の仕組み、URIはリソースの識別、HTMLは情報の構造化とリンクを担い、Webを「ハイパーメディア」と「分散システム」として機能させています。
その誕生の背景には、ハイパーメディアや分散システムの試行錯誤がありました。Web以前に提案されたMemexやHyperCardなどの構想・実装はその複雑さがネックとなり普及しませんでしたが、1990年代に提案されたWebは、軽量で普遍的な仕組みによって両者を統合しました。これによりWebは一気に拡大し、標準化の進展とともに、単なる実装から 設計原則(REST) へと発展していきます。
REST(Representational State Transfer)は、Webの設計原則を体系化したアーキテクチャスタイルです。その中核はリソース指向にあり、URIでリソースを一意に識別し、その表現(Representation)をHTTPを通じてやり取りすることで状態を変化させます。
RESTは6つの制約で構成されます。①クライアント/サーバ分離による役割の明確化、②サーバのステートレス性、③キャッシュの活用、④統一インタフェースによる操作の簡潔化、⑤階層化システムによる拡張性、⑥必要に応じたコード配布(コードオンデマンド)です。
これらにより、RESTはシンプルで拡張性が高く、疎結合なシステム連携を実現します。今日のWeb APIの多くがRESTを採用しているのは、その普遍性と実用性の高さに起因します。
第1部の結論は、Webが成功した理由はその 「単純さと普遍性」 にある、という点です。HTTP・URI・HTMLという基本技術の組み合わせと、RESTという設計思想が、Webを世界中に浸透させました。
第2部 URI
URIはWebにおける リソース識別の基本 であり、HTTP通信やシステム連携の根幹を支えます。単純かつ柔軟なリソース識別を実現するために、絶対URIと相対URI、%エンコーディング、文字コード、スキームなどの最低限の仕様が用意されています。
設計面では 「クールなURIは変わらない」 という原則が重視され、拡張子やメソッド名、セッションIDを含めず、リソースを名詞で表現することが推奨されます。ユーザビリティやSEOも考慮しつつ、変更時にはリダイレクトで既存利用者への影響を最小化することが重要です。
第2部を通して、URIは単なる文字列ではなく、Webの基盤を支える長期的に安定したリソース識別子であることを学ぶことができます。これを意識した設計が、持続可能なWebサービス構築の鍵となります。
第3部 HTTP
HTTPはWebの基盤を支えるプロトコルで、 クライアントとサーバ間でリソースをやり取りする仕組みです 。TCP/IPのアプリケーション層に位置し、URI同様シンプルで汎用性が高いことが特徴です。HTTPはリクエストとレスポンスからなるメッセージで通信を行い、ステートレスであるため各リクエストは独立しています。この設計により拡張性やシンプルさが保たれ、必要に応じてCookieやセッションで状態管理を補えます。
HTTPメソッドはリソース操作を定義し、CRUD操作と対応します。代表的なGET、POST、PUT、DELETE、HEAD、OPTIONSは安全性やべき等性の概念に基づき整理され、システムの安定性と拡張性を支えています。POSTを用いたPUT/DELETE代替や条件付きリクエストも利用可能で、Web設計の柔軟性を高めます。
ステータスコードはレスポンスの結果を示し、1xx~5xxに分類されます。200 OKや404 Not Foundなどの主要コードを正しく使うことはエラー処理やユーザビリティに直結し、設計段階から意識する必要があります。
HTTPヘッダは補助情報を伝える重要要素です。日時、MIMEタイプ、言語タグ、コンテントネゴシエーション、Content-Length、認証、キャッシュ制御、持続的接続など多岐にわたり、効率的かつ拡張性の高い通信を実現します。
第3部を通じ、HTTPは単なる通信手段ではなく、Webの成功を支える設計思想であることが説明されます。 メソッド、ステータスコード、ヘッダを正しく理解し活用することが、信頼性と拡張性のあるWebサービス構築に不可欠 です。
第4部 ハイパーメディアフォーマット
第4部ではWebサービスやWeb APIの設計に使用できるハイパーメディアフォーマットを複数取り上げています。本記事では、そのうちのHTMLとJSONに絞って概要を紹介します。
HTMLはWebページを構成するマークアップ言語で、テキストや画像、リンクなどを組み合わせ、情報を構造化します。文書はヘッダとボディで分かれ、メタ情報とコンテンツを明確に区別します。
リンクはHTMLの最重要機能で、<a>要素でのアンカー、<link>要素による関連付け、フォームやオブジェクト埋め込みを通じて、ユーザ操作や外部リソースとの接続を実現します。さらに、rel属性を用いたリンク関係の意味付けなどにより、HTMLは「人に見せる文書」でありながら「機械が理解できるデータ」としても機能します。結果として、HTMLは Webの基盤であり続けるハイパーメディアフォーマット と位置づけられます。
JSONは軽量で可読性の高いデータ交換フォーマットで、REST APIなどのWebサービスで広く利用されています。オブジェクトや配列、文字列、数値、ブーリアン、nullといった基本型に加え、日時やリンク情報も表現可能です。
HTMLは「人間に見せるWebページ」を中心に、JSONは「機械が扱いやすいデータ交換」を中心に据え、双方が連携することでWebは文書とデータ双方のハイパーメディアネットワークとして機能します。Web設計者はこの二つのフォーマットの特性を理解し、適材適所で使い分けることが重要です。
第5部 Webサービスの設計
第5部では、Webサービス設計の具体的手法としてリソース指向アーキテクチャ(ROA)を軸に解説されています。
まず読み取り専用サービスの設計が示されます。提供するデータを特定し、それをリソースに分割してURIで命名することが基本です。郵便番号、地域、検索結果などを例に、直感的で一貫性のあるURI設計が重要とされます。さらに、リソース間をリンクやフォームで結ぶことで探索的利用を促す設計が推奨されます。加えて、存在しないURIや不正なリクエストへの適切なエラーハンドリングも、開発者に優しいAPIに不可欠です。
次に、書き込み可能サービスの設計が扱われ、リソースの作成・更新・削除をどのように提供するかが課題となります。作成方法はファクトリリソース(新しいリソースを作るためのPOST先)やPUT、更新はバルク更新や部分更新といった多様なアプローチが紹介されます。また、バッチ処理やトランザクション、排他制御(楽観的・悲観的ロック)により信頼性を確保しつつ、複雑さとのバランスを取ることの重要性が強調されています。
最後に、リソース設計の導出方法が解説されます。関係モデル(ER図)、オブジェクト指向モデル(クラス図)、既存Webサイトの情報アーキテクチャといった複数の視点からリソースを設計する手法が示され、どの方法も有効であるとされています。最終的に強調されるのは、リソースを中心に粒度やリンク関係を適切に設計し、利用者にとって理解しやすく拡張性の高いAPIを実現することです。
読了後の総括
Webの技術仕様の背後にある歴史や思想を知ることで、「なぜこの仕様に決まったのか」を知ることができました。
特に、RESTやURI設計の原則は、長く使えるWebサービスを作る上で欠かせない指針だと感じました。
これは単なる知識以上に、設計や実装の判断基準を持つと思っています。
また、Webの発展の歴史において、機能過多のものが普及せずにシンプルなものが生き残った点も興味深いところでした。
普段のコーディングやDB設計においても、よりシンプルな実装にこだわることで寿命の長いロジックを生み出せると感じました。
個人的に業務で活かしたいポイント
RESTの6つの制約を満たす設計を意識する
RESTアーキテクチャには「クライアントサーバ」「ステートレス」「キャッシュ可能」「統一インタフェース」「階層化システム」「コードオンデマンド」という6つの制約があります。これらを意識して設計することで、拡張性・スケーラビリティ・保守性の高いWebサービスが実現できます。特にキャッシュ利用はパフォーマンス改善に直結します。
URIは永続性を意識して設計する
URIはリソースを識別する「住所」であり、利用者や外部システムとの約束事です。短期的な技術的都合でURIを頻繁に変更すると、既存のブックマークや外部連携が破綻してしまいます。そのため、内部の実装技術やフレームワークの変化に依存しない形で設計し、できるだけ永続性を持たせることが重要です。安定したURIは、サービスの信頼性や長期的な利用価値を高める基盤となります。
HTTPヘッダを積極的に活用した機能拡張
HTTPヘッダは単なる通信の付随情報ではなく、サービスの表現力を拡張する重要な仕組みです。キャッシュ制御、認証情報、など、機能拡張をHTTPヘッダ経由で行うことで、URIの肥大化やAPI仕様の複雑化を防げます。また、独自ヘッダを適切に設計することで、クライアントに追加情報を提供しやすくなり、サービスの拡張性・効率性を大幅に高められます。
Discussion