プロになるためのWeb技術入門
https://gihyo.jp/assets/images/cover/2024/thumb/TH160_9784297145712.jpghttps://gihyo.jp/assets/images/cover/2010/9784774142357.jpg
目次
第1章 技術の学び方
1.1 技術の学びはなぜ難しくなったのか
1.1.1 要件の多様さと複雑さ
1.1.2 技術的選択肢の増加と進化
1.1.3 クラウドサービスの普及による要求スキルの広がり
1.2 「技術の引き出し」を作ろう
1.2.1 歴史を知って「点」の理解を「線」にする
1.2.2 技術のつながりを把握して「線」の理解を「面」にする
1.2.3 技術の「面」を階層としてとらえ「立体」的に理解する
第2章 Webシステムの全体像
2.1 Webシステムの構造
2.2 Webコンテンツ
2.3 クライアントサイドの構成要素
2.3.1 デバイス
2.3.2 Webブラウザ
2.3.3 HTTPクライアント
2.3.4 レンダリングエンジン
2.3.5 JavaScriptエンジン
2.4 サーバサイドの構成要素
2.4.1 Webサーバ
2.4.2 Webアプリケーションのはじまり
2.4.3 Webアプリケーションの実行方式
2.4.4 Webアプリケーションのソフトウェアスタック
2.5 ネットワークとインターネット
2.5.1 大量アクセスをさばくロードバランサ
2.5.2 CDNで縮まる世界
2.5.3 ネットワークに対する理解は必要か
2.6 Webシステムの実行環境と開発環境
2.6.1 クライアントサイドの実行環境
2.6.2 サーバサイドの実行環境
2.6.3 Webシステムの開発環境
2.7 Webシステムを実現するための技術
第3章 WWWの基本要素とその発展
3.1 World Wide Webの始まり
3.1.1 WWWの基本要素
3.1.2 連続的変化の維持
3.2 URIとハイパーリンク
3.2.1 Memexとザナドゥ
3.2.2 リンクの単純化
3.2.3 ハイパーメディアの実現
3.3 HTTP
3.3.1 HTTPを試してみよう
3.3.2 HTTP設計時の工夫
3.3.3 スキーム
3.3.4 フォーマットネゴシエーション
3.4 SGMLから生まれたHTML
3.4.1 汎用マークアップ言語・SGML
3.4.2 SGMLと文書構造
3.4.3 論理構造と体裁の分離
3.5 CSSによる視覚情報の分離
3.5.1 WWWの普及とブラウザ戦争
3.5.2 CSSの考え方
3.5.3 CSSのさまざまな指定方法
3.5.4 さまざまなCSSセレクタ
3.6 データ構造を記述するXML
3.6.1 データ表現に適さないHTML
3.6.2 XMLの登場
3.6.3 スキーマによるデータ構造の規定
3.6.4 XHTMLの登場と衰退
3.7 HTML5策定とHTML Living Standardへの統一
3.7.1 WHATWGの発足
3.7.2 HTML 5の登場
3.7.3 HTML Living Standardへの統一
第4章 HTTPクライアントとHTTPサーバ
4.1 Webアプリケーションの根本を学ぼう
4.1.1 フレームワークに隠されたWebアプリケーションの本質
4.1.2 Webアプリケーションの根本はシンプル
4.2 最小のHTTPサーバを実現する
4.2.1 ncコマンドで実現するHTTPサーバ
4.2.2 リクエストの待ち受け
4.2.3 レスポンスの返却
4.2.4 パイプによるサーバ実行の効率化
4.3 レンダリングエンジンの働きを確認する
4.3.1 レスポンスを保存してブラウザで開く
4.3.2 HTMLファイルの準備
4.4 HTTPクライアントをブラウザに変更する
4.4.1 仕組みを理解して問題解決に役立てよう
4.4.2 正しいレスポンスを返す
4.5 動的なコンテンツの生成
4.5.1 fortuneコマンドによる動的コンテンツ
4.5.2 CGIの登場
4.5.3 テンプレートエンジンの元祖・SSI
4.5.4 テンプレートエンジンへの進化
4.6 Webアプリケーションへの発展
第5章 URLとHTTP
5.1 URLの基本構造
5.1.1 スキーム
5.1.2 ホスト
5.1.3 パス
5.2 URLの詳細構造
5.2.1 ユーザとパスワード
5.2.2 ポート
5.2.3 オーソリティ
5.2.4 クエリ
5.2.5 フラグメント
5.2.6 URLに使える文字
5.2.7 パーセントエンコーディング
5.3 HTTPの基本
5.3.1 HTTPリクエスト
5.3.2 HTTPレスポンス
5.4 HTTPリクエストの実践
5.4.1 サーバが受信したリクエストを確認しよう
5.4.2 GETリクエストの確認
5.4.3 POSTリクエストの確認
5.4.5 GETとPOSTの使い分け
第6章 従来型のWebアプリケーション
6.1 GoによるWebアプリケーション
6.2 Goによる簡単なWebサーバの作成
6.2.1 文字列を返すアプリケーション
6.2.2 ファイルの内容を返すアプリケーション
6.3 ToDoアプリケーションで学ぶ基礎
6.3.1 アプリケーション本体(main.go)
6.3.2 テンプレートファイル(todo.html)
6.3.3 ToDo項目の追加
6.4 Webアプリケーションの画面遷移
6.4.1 画面遷移の問題点
6.4.2 リダイレクトによる安全な画面遷移
6.4.3 Post-Redirect-Getの実装
6.4.4 Post-Redirect-Getの動作確認
6.5 Webアプリケーションの状態管理
6.5.1 ステートレスなHTTP
6.5.2 ブラウザの情報保管庫「クッキー」
6.5.3 セッションの考え方
6.5.4 セッションの実装
6.5.5 セッション管理不備の危険性
6.6 セッションとユーザ管理
6.6.1 ユーザ認証の必要性
6.6.2 ユーザ認証に対応したTiny ToDo
6.7 ユーザ認証の実装
6.7.1 セッション情報を保持する構造体
6.7.2 セッションを管理する構造体
6.7.3 ユーザ情報を保持する構造体
6.7.4 ログイン画面の表示
6.7.5 /loginのリクエストハンドラ
6.7.6 認証処理
6.7.7 Post-Redirect-Getでのメッセージ受渡
6.7.8 ハッシュ値によるパスワードの照合
6.7.9 認証のチェック
6.8 Webアプリケーションの複雑性をカバーするフレームワーク
6.8.1 Webアプリケーションの複雑さ
6.8.2 Webアプリケーションフレームワークが提供する機能
6.8.3 Webアプリケーション・フレーワークの裏側を知ろう
第7章 SPAへの進化
7.1 SPAへの潮流
7.1.1 従来型Webアプリケーションの問題点
7.1.2 Ajaxによるブレイクスルー
7.2 JavaScriptの起源と発展
7.2.1 JavaScriptの誕生
7.2.2 クライアントサイドJavaScriptとサーバサイドJavaScript
7.2.3 簡単なクライアントサイドJavaScript
7.2.4 Document Object Model
7.2.5 イベントドリブンプログラミング
7.2.6 JavaScriptの不遇
7.2.7 JavaScriptの発展
7.3 Tiny ToDoのUIを改善する
7.3.1 編集のUIを考える
7.3.2 JavaScriptによる編集UIの改善
7.4 サーバとの非同期通信
7.4.1 form要素によるPOSTリクエストの送信
7.4.2 同期通信と非同期通信
7.4.3 XMLHttpRequestによる非同期通信
7.4.4 Fetch APIによる非同期通信
7.5 Tiny ToDoに非同期通信を実装する
7.5.1 ToDoリストの管理方法を改善する
7.5.2 Fetch APIによるToDoの更新
7.5.3 編集処理の実装
7.5.4 編集処理の動作確認
7.6 JSONによるデータ交換
7.6.1 XMLとJSON
7.6.2 ToDoの追加をJSONでやりとりする
7.6.3 ToDoリストをJSONで返す
7.6.4 SPA化されたTiny ToDoの動作確認
7.7 フラグメントによる状態の表現
7.7.1 変化しないURLの課題
7.7.2 フラグメントによる状態表現
7.7.3 Tiny ToDoでのフラグメント活用
7.8 SPAの課題とサーバサイドレンダリング
7.8.1 初期のSPAが抱えた課題
7.8.2 History APIによる画面遷移とルータ
7.8.3 サーバサイドレンダリングへの回帰
第8章 Web API
8.1 APIのWeb化
8.1.1 URLの役割の変化
8.1.2 APIとはなにか
8.1.3 ネットワーク越しのAPI
8.1.4 SOAPに頼らないWeb APIの課題
8.2 REST
8.2.1 RESTの登場と論争
8.2.2 RESTとWeb API
8.3 リソース指向アーキテクチャ
8.3.1 アドレス可能性
8.3.2 接続性
8.3.3 統一インターフェース
8.3.4 ステートレス性
8.3.5 RESTful Web API
8.4 Tiny ToDoのWeb API設計
8.4.1 ToDoのリソース設計
8.4.2 リソースに対する操作の抽出
8.4.3 ToDoリストの取得
8.4.4 ToDo項目の新規追加
8.4.5 ToDo項目の編集
8.4.6 ToDo項目の削除
8.4.7 Tiny ToDo Web API仕様のまとめ
8.4.8 HTTPメソッドとCRUD
8.4.9 HTTPメソッドの「安全」と「べき等」
8.5 Tiny ToDoのWeb API化
8.5.1 ToDoの追加
8.5.2 ToDoの編集
8.5.3 サーバサイドのWeb API化
8.5.4 パスパラメータの解析
8.6 Web APIの公開
8.6.1 Web APIを直接呼び出す
8.6.2 API公開で広がるWebの世界
8.6.3 クロスオリジン通信
8.6.4 同一オリジンポリシー
8.6.5 CORSによるクロスオリジン制限の回避 8.6.6 CORSに対応したTiny ToDo
8.7 再注目されるRPCスタイル
8.7.1 APIの粒度
8.7.2 小粒度APIの課題
8.7.4 GraphQL
第9章 サーバプッシュ技術
9.1 サーバプッシュ技術の歴史
9.1.1 メタリフレッシュによる疑似サーバプッシュ
9.1.2 通信量の削減
9.1.3 Ajaxによるポーリング
9.1.4 Comet(ロングポーリング)
9.2 Server-sent eventsによるプッシュ配信
9.2.1 チャンク転送
9.2.2 Server-sent events
9.3 Server-sent eventsの実践
9.3.1 Tniy ToDoをSSEに対応させる
9.3.2 SSEの実装(クライアント側)
9.3.3 SSEの実装(サーバ側)
9.4 WebSocket
9.4.1 WebSocketの登場
9.4.2 WebSocketの概要
9.4.3 WebSocketのハンドシェイク
9.5 WebSocketの実践
9.5.1 WebSocket通信の確認
9.5.2 WebSocketの実装(クライアント側)
9.5.3 WebSocketの実装(サーバ側)
9.5.4 WebSocketの課題
付録A コンピュータの基礎
A.1 2進数と16進数
A.1.1 2進数を扱いやすく表現する16進数
A.1.2 16進数の利用例
A.2 テキストとバイナリ
A.2.1 テキストデータとバイナリデータ
A.2.2 テキストデータの符号化方式
A.2.3 テキストとバイナリの効率
A.3 文字コード
A.3.1 文字の取り扱いの難しさ
A.3.2 符号化文字集合
A.3.3 フォント
A.3.4 Unicode
A.3.5 文字符号化方式(エンコーディング)
A.3.6 文字符号化方式はなぜ生まれたか
A.3.7 改行コード
A.4 Base64エンコーディング
A.5 ハッシュ値
A.5.1 ハッシュ関数の特徴
A.5.2 ハッシュ値の用途
A.6 IPアドレスとドメイン名
A.6.1 IPv4アドレスとIPv6アドレス
A.6.2 ドメイン名とDNS
A.7 TCP/IP
A.7.1 通信レイヤ
A.7.2 TCPコネクション
A.7.3 UDP
A.7.4 ポートとファイアウォール
A.8 標準入力と標準出力
A.9 構造化データの表現
A.9.1 CSV/TSV
A.9.2 プロパティファイル/INIファイル
A.9.3 XML
A.9.4 JSON
A.9.5 YAML
付録B WSLのインストール
B.1 環境の確認
B.1.1 Windowsのバージョン確認
B.1.2 仮想化支援機能の有効化確認
B.2 WSLのインストールと実験の準備
B.2.1 WSLとUbuntuのインストール
B.2.2 ncコマンドのエイリアス設定
B.3 WSLの使い方
B.3.1 WSLの起動と終了
B.3.2 ディストリビューションの再インストール
付録C Go言語入門
C.1 Goのインストール方法
C.1.1 Windows環境へのインストール
C.1.2 macOS環境へのインストール
C.2 はじめてのGoプログラム
C.2.1 hello, worldを表示するプログラム
C.2.2 プログラムの実行
C.2.3 実行ファイルのビルド
C.2.4 Goプログラムの基本要素
C.2.5 A Tour of Go
C.2.6 Go Playground
C.3 Go学習時の注意点
付録D 補足資料
D.1 telnetコマンドのインストール方法
D.1.1 Windows環境へのインストール
D.1.2 macOS環境へのインストール
D.2 サンプルコードのダウンロードと実行
D.2.1 サンプルコード
D.2.2 サンプルコードの実行
D.2.3 利用ポートが重複して起動できないときの対処
D.2.4 プログラムを修正したときの実行方法
おわりに
謝辞
索引