Study

WEB+DB PRESS vol.122

特集1 Web技術総整理

Web周りの技術について。

本書に記載されているとおり、今はいろいろラップされている(本書の表現だと高度に抽象化されている)ので、この辺の知識はなくても開発はできる。なので学習としての優先度は低め。復習がてらに読んだ。

1 なぜ基礎技術を学ぶのか

歴史的背景

HTTPはもともと文書だけを記述するように考えられたので、状態管理は持たない(ステートレス)

技術の発展で状態管理が必要になり、後付けでCookieなどで対応するようになった。なので複雑になりやすい。

動的変更が求められるようになってきた -> サーバ通信なしでやる方法としてJacaScript登場

HTMLを動的変更できるようにDOMを規定、DOMの操作は複雑なので各種ライブラリが作られる

2 インターネット

ARPANETの歴史とOSI参照モデルの話。ネットワークエンジニアがなりたての時に書籍で勉強するやつ。

最近はレイヤーの話しなくなったなあ。。。AWS使っていれば、アプリ層とSSL/TLSの概念だけわかっていればいいよね思いながら、復習がてらざっと読んだ。

3 HTTP

ここからは今のエンジニアでも知っておかないといけない話。

HTTP 1.1

現在の主流。

リクエスト/レスポンス単位でコネクションが切れる=ステートレス

リクエスト=リクエスト行、ヘッダー、ボディの3要素で構成。ヘッダーとボディは省略可。ヘッダーとボディは空行区切り。

リクエスト行=メソッド、ターゲット、HTTPバージョンの3要素で構成。

レスポンス=ステータス行、ヘッダー、ボディの3要素で構成。ヘッダーとボディは省略可。ヘッダーとボディは空行区切り。

ステータス行=HTTPバージョン、ステータスコード、メッセージの3要素で構成。

ステータスコードの説明(1xx~5xx)まで乗っていたので、何を使うか迷ったときに読み返せる。(ググればすぐ分かりそうな気もするが・・・)

状態管理のためにCookieを使う。必要なデータをすべてのせると通信効率が悪いので識別子となるデータだけのせる。

Cookieヘッダフィールド: クライアント->サーバ

Set-Cookieヘッダフィールド: サーバ->クライアント

同一コンテンツ送信回避: 無駄な通信を発生させないために同一コンテンツは送らない、ローカルのキャッシュを使う。方法2つ: 最終更新時間でチェック、ユニーク識別子(ETag)、最終更新時間とETagはETag優先、多言語コンテンツの場合はETagにしたほうが良い

Hostヘッダフィールド: バーチャルホストに使える。必須のヘッダフィールド。

HTTP2

HTTP1.1後方互換ありで高速化を目指している。

HTTP3

QUICを使ってHTTP2より高速を目指している。

4 Webサーバ

複数リクエストの処理=prefork型(e.g. Apache)とイベント駆動型(e.g. nginx)

prefork型のC10K問題(クライアント1万台問題)、Webが発展してリクエストが処理しきれなくなった -> イベント駆動型が誕生

静的コンテンツ=同じリソースに対して同じコンテンツを返す、オリジナルのWebサーバが返さなくても別のサーバが返すことができる(CDN)

動的コンテンツ=Webサーバ側で何らかの処理

5 ブラウザ

レンダリングエンジン: htmlを解析して表示するモジュール(Chrome/Edge-Blink, Firefox-Gecko, Safari-WebKit)

DOM: htmlを操作できるようにしたプログラミングインターフェース、Doumentをルートとしたツリー構造

AltJS(alternative JavaScript): 新機能を追加したJSを出力する方法、古いのだとCoffeeScript、今はTypeScript

Wasm: ブラウザ上で直接実行するバイナリ形式、Rustなどで書いてWasmを出力

6 Webアプリケーション

このセクションはただの技術紹介、というより用語集に近かった

フレームワーク

  • サーバーサイド: MVC, WSGI/Rack/Plack
  • フロントエンド: DOM操作のjQuery
  • CSSフレームワーク: Bootstrap

WebAPI: REST, GraphQL

SPA

特集2 Django Ver3

Django3.2LTSのハンズオン。Djangoを最後に使ったのは、2.0出たてで1.1LTSとどっち使うか迷うなってときだったと思う。いつのまにか、3.2LTSまで進んでいたんですね。ざっと見たところ、一般的なMVCで昔とそんな変わっていない印象。

フロントとバック一体型のフレームワーク(フルスタックフレームワークというらしい)って、もう新規開発だと選ばないよねーと思いながら目を通した。ハンズオン記事だが手は動かしてない。

Ver3になって非同期でWebSocketに対応したらしい。いろいろできるようになっているようだけど、WebSoketで作りたいなら、AWSのサーバレスモデルでいいよなと思った。

特集3 RDBMS実装

RustでRDBMSを作ってみるという、ちょっとビックリの特集。

今は暇だし、Rust使ったこと無いし、RDBMSの実装なんてもちろんやったことないしで、ちょっとRustの勉強にちょうどい教材かもと思った。

漫画から学ぶマネジメント

漫画からマネジメントの通ずるものを紹介していくという特集がはじまった。初回は蒼天航路。

特集としては面白いと思うけど、個人的にマネジメントは興味がない。2ページしかなく、半分ぐらいは漫画の紹介。残り半分は漫画のシーンを抜粋してマネジメントに紐付けているようだが、漫画の絵もなく文字だけで辛い。原作を知らないと読む気がしない。漫画は好きだが、蒼天航路は呼んだことない。

速習 Svelt

Vue, React とならぶ新しいフロントのフレームワーク Sveltの紹介記事。スベルト と読むらしい。

仮想DOMが持たないので、React, Vue.js と比較すると、コード量が少なく済むとのこと。フロントはコード量がすぐ多くなってメンテしづらくなるので、普及してくれると嬉しいかも。

機能やライブラリはまだそろっていないので、本番採用にすることはまだできない。個人で遊ぶ程度。

Pythonの連載

今回は数理モデル(数理最適化)の話。例題で、シフトを組むのを数理モデルでやるのがあった。今風で面白そう。こういう案件やってみたいと思った。

他 読んでいないやつ

  • UIの特集

デザインを論理的に説明しているっぽいけど読んでいない。デザイナー向け?

自分一人で何かサービスを作らないといけなくなったら、まとめて読もうと思っているけど、たぶんそんな日は来ない。。。

  • Goの連載

Goはまだ本格的に触っていない。

  • Perlの連載

Perlはたぶんこの先一生さわることはないだろう。。。

  • Java

今回はローカル型推論の話。何か難しそう。もうJavaは、あまり書ける気がしない・・・