俺には勉強しかない

140字のその先

『この一冊で全部わかるWeb技術の基本』書評

この記事に引き続き、Web技術の初歩的な解説本を読んだ。

エンジニアは3年目だったら、「なぜ○○は動くのか」シリーズとかオライリー出版の本とかを
読んでなきゃいけないのかもしれないけど、
自分は初歩から少しずつ固めていきたい派なので、
当分は初心者向けの本を中心に読んでいく(成長が遅い…)。

何回かこのブログで話してるけど、エンジニアにとってプログラミング技術はそれほど重要じゃないと思う。
下らないと言ってもいい。

全てのプログラミング言語フレームワーク、ライブラリの目的は、
複雑な処理を簡単に書けるようにする事、言い換えれば
誰でもコードを書けるようにする事」だ。

そして、行く行くは「コードを書かずに処理を動かす事」が目的となり、
その目的は十数年後くらいには達成されてしまうだろう、と考えている。

何が言いたいかと言うと、プログラミングというのは誰でも出来るように(既にある程度そうなっている)、
やらなくてもいいように、という方向に常に向かっており、
先細りが見えている「作業」だという事だ。

だからこそ、プログラミングスクールが乱立して、情報学部でもない人達を
数ヶ月の研修だけ施して現場に放り込んでる。

しかし、アーキテクチャや仕組みは違う。
技術の仕組みへの理解力は、時代が進んでも変わらない、
むしろより重要度が増すであろう汎用スキルだ。

ある技術がどういうアーキテクチャで動いていて、
何が優れているのか、どう活かす事が出来るのかを考える事が、
エンジニアの本来の仕事だと思う。
実際はただのIT作業員みたいな人が多いけど。

それと、Webの基礎技術を勉強し始めてから、設計書が読めるようになってきた!

感想

分かりやすかった。
HTMLやHTTP、TCP/IP等の基礎技術や、
RESTful等の設計思想についての解説が、初歩レベルで網羅されていた。

Webシステムの構築と運用の知識についても紹介されているので、
プログラマーだけじゃなくSEを目指す人にも役に立つと思う。

一応、本に記載されていた内容をQA式でまとめてみる。

Q: インターネットって何?

自宅や会社、学校など小さな範囲のネットワークが1つ1つ接続し合い、
1つの大きなネットワークが出来上がった環境。
1つ1つの小さなネットワーク毎にISPが存在し、
ネットワーク内の接続を管理している。

Q: プロトコルって何?

機器同士が通信をするときの、あらかじめ決められた共通のルール・手順
代表的なプロトコルはHTTP、TCP/IPなど。

Q: TCP/IPって何?

TCPはTransmission Control Protocolの略で、データの転送処理を行うためのプロトコル
IPはInternet Protocolの略で、IPアドレスを元にデータの転送先を指定するためのプロトコル

インターネット通信において、この2つは互いに密接に関連してしているため、
TCP/IPとしてまとめて表現される事が多い。

機器同士で実際にデータをやり取りするに当たって、
TCP/IPは通信を4つの階層(レイヤー)に分割し、
それぞれの階層を異なるプロトコルが担当している。

レイヤー名 役割 プロトコル
アプリケーション層(レイヤー4) アプリケーションごとのやりとりを規定 HTTP、SMTPFTP
トランスポート層(レイヤー3) データの分割や品質保証を規定 TCPUDP
インターネット層(レイヤー2) ネットワーク間の通信を規定 IP、ICMP
ネットワークインターフェース層(レイヤー1) ハードウェアに関する規定 イーサネットWi-Fi

何故TCPがインターネット通信に用いられるかというと、
データが確実に相手に届く事を保証してくれるから。
具体的には、TCPには

  • 3ウェイハンドシェイクによるコネクション確立
  • 相手が受け取れなかったデータをもう一度送る再送制御
  • 順番通りに相手にデータを届ける順序制御

の3つの機能によって、確実にデータを届けている。

Q: グローバルIPアドレスとプライベートIPアドレスの違いは?

グローバルIPアドレスはインターネットの通信のために用いられる。
インターネット上で一意である必要があり、自由に設定できない。

プライベートIPアドレスは家庭や会社内といったLAN内の
機器を特定するために用いられる。
自由に設定できるが、インターネット接続時はグローバルIPアドレスに変換する必要がある。

Q: ユーザーが自由に設定できるポート番号は?

49152~65535の範囲内のポート番号(ダイナミックポート)。
範囲によってポート番号の種類や用途が異なる。

範囲 分類 説明
0~1023 ウェルノウンポート 一般的なプロトコル、アプリケーションで使用
1024~49151 レジスタードポート メーカー独自のアプリケーションで使用
49152~65535 ダイナミックポート クライアント側で自由に使える

Q: RESTfulとは?

Webの設計思想。
以下の4つの特徴を持ち、APIの設計によく適用される。
この中でも一番大事なのは「ステートレス性」で、
やり取りが常に一回で完結し、セッション等で内部情報を持たない事を表す。

特徴 説明
統一インターフェース 定義・共有されたプロトコルで情報をやり取りする(Webの場合HTTP)
アドレス可能性 すべての情報が一意なURLの構文で示される
接続性 情報にリンクを含めることが出来る
ステートレス性 やりとりは1回ごとに完結し、前のやりとりの結果に影響を受けない

以下のスライドが分かりやすい。

www.slideshare.net

Q: ドメインって何?

IPアドレスの実態。
実際の通信はIPアドレスを用いて行われるが、
IPアドレスは覚えづらいため、人間が覚えやすいように英数字で別名をつけたもの(www.example.com みたいな)。

通信する際は、DNS(Domain Name System)が
ドメインIPアドレスに変換している。

Q: HTTP2.0の機能は?

ストリームによる通信の多重化

ブラウザとサーバ間で「ストリーム」と呼ばれる仮想的な通信経路を複数つくり、
それぞれのストリーム内でやり取りをする事によって、通信速度を向上させる。

バイナリ形式でのやり取り

HTTP1.1ではテキスト形式でデータのやり取りをしていたのを、
HTTP2.0ではバイナリ形式でやり取りする。

そのため、データの変換処理が不要となり、通信効率が上がる。

ヘッダー圧縮

送信済みのHTTPヘッダーを送らない事により、
通信データを削減する。

サーバープッシュ

リクエスト内容を元に、ブラウザがリクエストする前に
サーバが必要と判断したデータを事前に送る機能。

Q: HTTPSは通信リスクにどう対応している?

HTTP通信は、相手にリクエスト/レスポンスが届くまでに複数のサーバを経由する。
そのため、以下の3つのリスクが生じる。

リスク名 説明
盗聴 HTTPリクエスト/レスポンスを第三者に盗み見られるリスク
改ざん HTTPリクエスト/レスポンスを第三者が書き換えてしまうリスク
なりすまし 三者が自分、もしくは通信相手になりすますリスク

HTTPSは、上記のリスクに以下の方法を用いて対応している。

暗号化

通信内容を暗号化し、第三者が中身を解読できないようにする。

メッセージダイジェスト

通信時に、通信内容をハッシュ化したメッセージダイジェストを送信する。
受け取った相手は通信内容をハッシュ化し、
送信されたメッセージダイジェストと比較する事で、改ざんされていない事を確認する。

サーバ証明書

サーバは、信頼のおける第三者機関にサーバ証明書を発行してもらい、
通信時にクライアントに証明書を送信する。
クライアントは、第三者機関に問い合わせ、通信相手が本人である事を確認する。

Q: セッションって何?

一連の関連性のある処理の流れ。
例えば、ショッピングサイトで言えば

商品を選ぶ

買い物かごに入れる

買い物かごの中身を確認する

商品を購入する

の一連の流れを「セッションと呼ぶ」

また、セッションを構成する処理の最小単位を
トランザクション」と呼ぶ。

Q: Webサーバは、ステートレスなHTTPを用いてセッションをどのように管理している?

Webサーバは、クライアント毎にセッションIDを発行し、
以下のいずれかの方法でクライアントとやり取りする。

  • 発行したCookieに含める
  • URLに埋め込む
  • フォームデータに埋め込む

Q: JSONって何?

構造化したデータを表すためのデータ記述言語のひとつ。
他の主なデータ記述言語としてXMLがあるが、
XMLと比較して

  • DOMを使わずにデータにアクセスできる
  • 数値やnullなどの値も扱える
  • サイズが小さい

等のメリットがある。

不満な点

セキュリティに関する記載が少なすぎる。
特に、攻撃方法に対する対策が手短にしか書かれていない。

例えば、最も被害件数が多いSQLインジェクションの対策方法が
この本には書かれていない(ちなみに、サニタイジングプレースホルダである)。

経験の浅いエンジニアが最も足りてない観点がセキュリティだ。
セキュリティはどのシステムでも絶対不可欠な非機能要件であるだけでなく、
受託開発において唯一周期的にお金が発生しうる分野でもある。

よって、この本だけではWeb技術の基本は全ては身に付かない。
別途セキュリティについての書籍を読む必要がある。

あ、もしかして同じシリーズで『セキュリティの基本』みたいなのがあるのかな?
いずれにしても、分かりやすい素晴らしい本でした。


イラスト図解式 この一冊で全部わかるWeb技術の基本


イラスト図解式 この一冊で全部わかるWeb技術の基本【電子書籍】[ 小林 恭平 ]

リファレンス

リンク. 概要
イラスト図解式 この一冊で全部わかるWeb技術の基本 | SBクリエイティブ この本の解説ページ
RFC7540 日本語訳 HTTP2.0のRFC。使われ始めるのはもう少し先だと思う
小さな中小企業とNPO向け情報セキュリティハンドブック[みんなでしっかりサイバーセキュリティ] 無料で見れる最も質の高いセキュリティ教材はこれだと思ってる。