▪ JAMSTACK-HISTORY / vol.I
1945 — 2026+
VOL. I — A CHRONICLE OF WEB ARCHITECTURE 1945 → ∞
An epic of bottlenecks & abstractions

Web 技術
開発史

黎明の CGI から、Next.js の覇権、
そして WASMMoonBit による次代の革命まで。

Webアプリケーションの歴史は、単なる技術の進歩ではない。それは「開発者のエゴ」と「ユーザーのリアル」、そして「プラットフォームの制約」という、三つ巴のボトルネックを解消するための抽象化のドラマである。
VOLUME
Vol. I — Eight Chapters
SCOPE
81 Years of Web
READING
≈ 18 min
SCROLL TO BEGIN
00
PROLOGUE序章THE GREAT CONTRADICTION

Web歴史を貫く
「大いなる矛盾」

新世代の覇権フレームワークは、常に「それまで開発者が当たり前として耐えていた苦痛」を、新しい抽象化レイヤーで消し去ることで誕生してきた。

tension 開発者のエゴ DX · DEVELOPER ユーザーのリアル UX · END USER 制約 PLATFORM SPEED ⇄ EASE EASE ⇄ SAFETY SAFETY ⇄ SPEED

The three-cornered war
between desire, reality & constraint.

書きやすさ(DX)を求める開発者。実行速度(UX)を求めるユーザー。セキュリティと標準化を強いるプラットフォーム。

この三角形のどの辺をも譲らない緊張が、Web史を貫く唯一の主題である。本書は、その三方を一度に解こうとした挑戦者たちの血統書である。

01
CHAPTER ONE1990s 前半 → 中盤GENESIS

創世記と
「動的」への越境

最初のWebは、ただの静的な学術文書だった。GETというたった一つのコマンドで、サーバーはファイルを返すだけの完全な「死んだ空間」だった。

1.1HYPERTEXT DREAM

ハイパーテキストの夢と「静的」な壁

Webの起源は、情報をリンクで繋ぐハイパーテキストの構想にあった。それは半世紀以上前から胎動していた、人類の集合記憶への執着である。

1945

Memex

ヴァネヴァー・ブッシュが提唱した、個人の記憶を拡張する情報検索のビジョン。

1960

Project Xanadu

テッド・ネルソンによる、双方向リンクと著作権管理を備えた壮大なネットワーク構想。

1991

HTTP/0.9

ティム・バーナーズ=リーがWWWを実装。コマンドは GET ひとつのみ、サーバーはファイルを返すだけ。

1993

CGI 誕生

NCSAのロブ・マクールらが定義。サーバーが外部プログラムを起動し、その出力をHTMLとして返す。SSRの原始的な祖先。

1.2CGI EMERGENCE

CGI 動的の越境

「ユーザーの入力に応じて画面を変えたい」「データベースをブラウザから操作したい」という欲求から、サーバーは初めて外部プログラムへのバイパスを開けた。リクエストを受け取ったWebサーバーが、ファイルを直接返すのではなく、別のプロセスを起動して結果のHTMLを返す。

これは現代のサーバーサイドレンダリング(SSR)の最も原始的な祖先であり、Webが「文書の倉庫」から「計算する機械」へと変容した瞬間でもある。

1.3PERL · MOTHER OF WEB

Perl 「Webの母」となった
テキスト処理の獣

CGIの実行プログラムとして、当時はC言語、シェルスクリプト、そしてPerlなどが競合した。しかし最終的にPerlが圧倒的支持を得て「Webの母」となる。理由はただ一つ ―― 言語構造に完全に溶け込んだ強力な正規表現である。

対抗馬たちの致命的な弱点 ―

C / C++LOW-LAYER HELL
「文字列」というネイティブなデータ型が存在せず、文字配列(char[])とポインタ操作で泥臭くメモリを管理。HTMLを1行結合するだけでもバッファオーバーフローの危険が常に付きまとった。
Shell ScriptLIMITED EXPRESSION
テキスト処理に sedawk などの外部コマンドをパイプで繋ぐ必要があったが、複雑な条件分岐を安全かつ高速に処理する表現力が不十分だった。
sed / awkSINGLE-PURPOSE
テキストのフィルタリングには抜群だったが、DB接続、メール送信、ファイル操作など、Webアプリを構築するための「総合力」が欠けていた
Perl★ FIRST-CLASS REGEX
言語学者ラリー・ウォールは、Perlの文法構造そのものに正規表現を組み込んだ=~(マッチ)や s/検索/置換/ といった演算子が言語レベルで提供され、PCRE(Perl互換正規表現)の仕様は現代のほぼ全言語の祖となった。
cgi-bin/sanitize.pl
# クエリ文字列から悪意あるスクリプトを1行で抹殺する $query =~ s/<script.*?>.*?<\/script>//gi; # 一級市民としての正規表現 — 言語文法に深く溶け込んでいる if ($input =~ /^([a-z]+)=([0-9]+)$/i) { my $name = $1; my $value = $2; # PCREの非貪欲マッチ、後方参照 — すべてこの時代の発明 }

この「HTMLという不規則で汚いテキストを、最も安全に、最も短いコードで、バグなく切り貼りできる」という圧倒的な実利が、PerlをWeb創世記の唯一王に押し上げた。

1.4BOTTLENECK

プロセスのフォーク
創世記の構造的欠陥

PerlによるCGIはWebに双方向性をもたらしたが、根本的に「アクセスのたびにOSがゼロからPerlプロセスを起動(Fork)する」という構造的な欠陥を抱えていた。

リクエスト数に比例した、メモリとCPUの枯渇

掲示板やフォームが頻繁にダウンする原因となったこの「プロセスのフォークコスト」を避けるために、のちにプログラムをサーバー(Apache)に常駐させる mod_perlmod_php が生まれ、サーバーサイド言語の常駐化モデルへと繋がっていく。

❦ ❦ ❦
02
CHAPTER TWO1990s 後半 → 2000sDEMOCRATIZATION

民主化と
表現力の狂騒

オープンソースが結託し、表現力に飢えたクリエイターが立ち上がり、Webは「専門家のもの」から「みんなのもの」へと墜ちていった。

2.1LAMP STACK

LAMPスタック Webの民主化

1990年代後半、オープンソースの強力なエコシステムが結託し、現代Webのインフラ基盤となるLAMPが誕生する。

L
Linux
OPERATING SYSTEM
A
Apache
WEB SERVER
M
MySQL
DATABASE
P
PHP / Perl / Python
LANGUAGE

特にPHPは、「HTMLの中に直接 <?php ... ?> と記述するだけでプログラムが動く」という圧倒的な直感性と、個人のPCで簡単に開発環境を構築できるMAMP/WAMPの普及により、Web開発のハードルを地面まで引き下げた。WordPressなどの誕生を支え、Webの民主化を成し遂げた。

スパゲッティコードの量産

大規模化するとロジックとHTMLが泥沼のように混ざり合い、メンテナンス不能な悲劇を量産する結果となった。

2.2FLASH · A CLOSED EMPIRE

Adobe Flash
表現力の限界突破と「閉じた帝国」の死

当時のHTML/CSSの表現力は貧弱極まりなかった。そこに彗星のごとく現れたのがAdobe Flashである。ベクターグラフィックス、タイムラインアニメーション、サウンド、動画の完全な統合。Flash Playerプラグインさえあれば、OSを問わず寸分違わぬ動作を保証(Write Once, Run Anywhere)した。

Adobe Flash

1996 — 2020 · 享年 24歳

プラットフォーム(ブラウザ/OS)がコントロールできない「クローズドな独自プラグイン」だったため、最終的にスティーブ・ジョブズによるiPhoneでのFlash排除(セキュリティ、重さ、バッテリー消費を理由とする)が決定打となった。

独自の重量ランタイムは、オープンな標準規格の進化に最終的に敗北する ―― これがWebの鉄則として刻まれた。
2.3RAILS · CONVENTION

Ruby on Rails(2004)
開発者の幸福と「規約」の確立

2004年、DHHが提唱したRuby on Railsは、Web開発の進め方を根本から変えた。設定より規約(CoC)DRY(Don't Repeat Yourself)、そしてMVCモデルの標準化。スタートアップが1秒でも早くプロダクトをローンチするための「DX(開発体験)」の概念を、初めて確立した。

マルチページの白画面という新たな苦痛

スマホ時代(モバイルファースト)の到来とともに、サーバーサイドでページ全体を生成して返す「MPA」の画面遷移(白画面)が、ユーザー体験の新たなボトルネックとなった。

❦ ❦ ❦
03
CHAPTER THREE2000s 中盤 → 2010s 前半ASYNC & STRUCTURE

非同期と
構造化の闘争

画面遷移という「白い無」から逃れたい。その執念が、Webを一度「魔法」のように見せ、再び「混沌」へと引き戻した。

3.1AJAX · JQUERY

Ajax と jQuery
ページ遷移からの脱却

2005年、Google Mapsの登場は「白画面を挟まないWeb体験」を世に提示し、世界に衝撃を与えた。Ajax(Asynchronous JavaScript and XML)は、ページ遷移を行わずにバックグラウンドでサーバーと通信し、画面の一部だけを書き換えた。

翌2006年、jQueryは狂暴なほどバラバラだった各ブラウザ(特にInternet Explorer)のDOM操作APIや非同期通信を、たった1つの統一的な書き方で吸収した。

命令的DOM操作の再びの泥沼

UIが複雑化するにつれ、「ボタンAを押したら、要素Bを隠して、要素Cを活性化して、データをサーバーに送って…」という命令的なコードが絡み合い、メンテ不能なスパゲッティへ回帰した。

3.2ANGULARJS

AngularJS
双方向データバインディングという「甘い毒」

2010年、Googleが放ったAngularJSは、JS側のデータ(Model)と画面(View)を同期させる「双方向データバインディング」という魔法の仕組みを提示した。どちらかが変われば自動でもう一方も変わる。理想的な世界だった。

無限再計算ループという地獄

画面の要素が増え、データフローが複雑化すると「何が原因でデータが変わったのか」を追跡することが不可能になり、ループや深刻なパフォーマンス低下を引き起こした。

❦ ❦ ❦
04
CHAPTER FOUR2013 → 2010s 後半DECLARATIVE

宣言的UIの革命と
SPAの限界

「JSの中にHTMLを書くなんて汚い」と大炎上したReactが、わずか数年でWebのデフォルトを完全に書き換えた。これはコペルニクス的転回だった。

4.1REACT · VIRTUAL DOM

React(2013)
仮想DOMのコペルニクス的転回

Facebook(当時)が放ったReactは、これまでのすべての「データバインディング」や「DOM操作」の常識を破壊した。単方向データフロー。データは上から下へ流れるだけ。状態(State)が変われば、UIはそれを投影して「再描画」される。

宣言的UI ― 「状態Aのとき、画面はこうあるべきだ」という最終結果だけを記述する。仮想DOM ― メモリ上に仮想のDOMツリーを作成し、変更前後の差分だけを実DOMに適用する。

declarative · ui
// 命令的(jQuery時代) $('#counter').text(count); $('#btn').attr('disabled', count > 10); // 宣言的(React以降)— 結果だけを記述する return <div> <p>{count}</p> <button disabled={count > 10}/> </div>;

覇権獲得の鍵は2つあった。第一に、Facebook/Instagramという動かぬ証拠。第二に、React Nativeの「Learn Once, Write Anywhere」が経営層に刺さる強烈なコスト削減アピールとして機能したことだ。

4.2SPA · THE WALL

SPAの壁 滑らかさの代償

React、Vue、Angular2+によるSPAは、リッチなデスクトップアプリのような体験をもたらしたが、新たなトレードオフに衝突した。

初期表示の遅さ(LCPの悪化)

ブラウザが巨大なJavaScript(bundle.js)をダウンロードし、パースして実行し終えるまで画面に何も映らない。真っ白な画面。

SEO / OGPの致命傷

クローラーがJSを実行できない場合、中身が空っぽのサイトと判定され、検索順位やSNSシェアの表示で絶望的な不利益を被った。

❦ ❦ ❦
05
CHAPTER FIVE2010s 後半 → PRESENTHEGEMONY

Next.jsの覇権と
現代ウェブの歪み

「すべてを詰め込んだモンスター」となった結果、現代の開発者は再び、見えない苦痛に耐えることを強いられている。

5.1RE-INTEGRATION

Next.js サーバーとクライアントの「力」の再統合

ZEIT(現Vercel)が開発したNext.jsは、SPAの「滑らかなUX」と、PHP/Railsのような「サーバーサイドの利点」を合体させた。Zero ConfigでJS疲弊から開発者を救い、SSG/SSR/ISRのハイブリッドレンダリングを提供し、git pushするだけのVercelデプロイで開発・公開フローを一本化した。

5.2FOUR ACHILLES HEELS

Next.jsが抱える4つのアキレス腱

すべてを詰め込んだ結果、現代の開発者は再び、「見えない苦痛」に耐えることを強いられている。

Hydration
—— 究極の二度手間

サーバーでレンダリングしたHTMLを送っても、そのままではボタン一つ動かない。裏で巨大なJSをDL・実行し、構造を「合体(Hydration)」させる必要がある。サーバーとクライアントで全く同じ計算を2回回す、リソースの無駄。

Performance ∝ 1 / JavaScript Payload

キャッシュの
ブラックボックス化

App Router以降は4つの独立したキャッシュ層(Request Memoization, Data Cache, Full Route Cache, Router Cache)を持つ。Revalidationのタイミングが極めて不透明で、「コードを変えたのに画面が更新されない」バグのデバッグに開発者は膨大な時間を奪われる。

ベンダーロックイン
—— "Vercel税"

ISR、画像最適化、エッジミドルウェアなどは、Vercelのインフラで動かすことを前提に最適化されている。AWSやGCPでのセルフホストは著しく難しく、価格改定や仕様変更に依存せざるを得ない構造的依存が強まっている。

'use client'と
メンタルモデルの断絶

「このコードはサーバーで動くのか、クライアントで動くのか」を常に脳内デバッグし、'use client''use server'の境界線を綱渡りしなければならない。「手軽にWebを作る」という初心からの著しい逸脱。

❦ ❦ ❦
06
CHAPTER SIX2020sALTERNATIVE WARS

生態系の百花繚乱
「オルタナティブ」の闘争

Next.js一強に対する不満を抱えた天才たちが、それぞれに異なる哲学を掲げて挑んだ。しかし、Reactという巨大な惑星の重力は、誰も振り切ることができなかった。

6.1CHALLENGERS

四人の挑戦者たち

Remixby React co-founders
WEB STANDARDS
+ DECOUPLED
▲ MERIT

Loader & Action の美しさ。ブラウザ標準 <form> と HTTP の POST/GET でデータミューテーションが完結し、Redux などの状態管理ライブラリが不要に。完璧なNested Routingは Next.js App Router の土台となった。

▼ BOTTLENECK

Vercelの莫大な投資と広告宣伝の前に、初期有料ライセンスのRemixはコミュニティ拡大スピードで敗北。Shopify買収後、React Router (v7+) へ合流する形で看板を下ろした。

Sveltecompiler-first
ZERO RUNTIME
COMPILE TO VANILLA
▲ MERIT

let count = 0 と書くだけで状態になる驚異的なシンプルさ。コンパイル時に純粋な命令的JSへ変換し、ブラウザに送るJSサイズは劇的に小さく、実行速度も爆速。

▼ BOTTLENECK

npmに存在する何百万ものReactコンポーネント、デザインシステム、チャートライブラリのエコシステムの壁。Svelte 5の「Runes」導入が、初期の「究極のシンプルさ」を愛していた層に揺らぎをもたらした。

Qwikby Miško Hevery (Angular)
RESUMABILITY
HYDRATION = 0
▲ MERIT

サーバーで実行したJSの実行状態をHTMLにシリアライズして埋め込む。ブラウザは1バイトもJSを動かさずに即座にインタラクティブ。初期JSダウンロード量は実質「0」

▼ BOTTLENECK

コンパイラがJSを細切れにするため、関数を $(() => ...) という特殊な記号で囲み続ける必要がある。脳に強烈な違和感(メンタルモデルの乖離)。Qwik Reactでブリッジしても結局Hydrationが発生し、本来の恩恵が相殺された。

SolidJSsignals + JSX
REACT-LIKE
FINE-GRAINED
▲ MERIT

見た目はReactそのものでJSX採用。だが内部は仮想DOMを使わず、Signalが変わった箇所「だけ」をピンポイントで書き換える。「Reactの皮を被った超高速エンジン」。

▼ BOTTLENECK

Reactでは「関数が毎回再実行される」のに対し、Solidは「関数は1回しか実行されない」。普通のJSのクロージャやオブジェクトのデストラクトでリアクティブ性が失われる。「そっくりなのに原理が真逆」という致命的なギャップ。

6.5LESSONS MATRIX

生態系の戦いが残した教訓

FRAMEWORK
CORE CONCEPT
PROBLEM SOLVED
WHY IT COULDN'T WIN
Next.js
ハイブリッド全部入り
SPAとSSRの二者択一
複雑性、Hydrationの無駄、ロックイン
Remix
Web標準 + 疎結合
Next.jsのブラックボックス化
資金力・マーケティングの敗北、合流
Svelte
コンパイラ化(No-DOM)
仮想DOMの実行オーバーヘッド
エコシステムの貧弱さ、書き方の過渡期
Qwik
Resumability
Hydrationによる初期ロードの遅さ
記述($)の不気味さ、Reactとの親和性
SolidJS
React風JSX + Signals
仮想DOMの不要な再レンダリング
Reactとの微妙なメンタルモデルのズレ
6.6SURVIVORS

Astro と TanStack
生き延びた者たちの戦略

Astroparasitic symbiosis
ISLANDS
ARCHITECTURE

「Reactエコシステムを敵に回すと、どんなに優れていても勝てない」という歴史の教訓から、「既存のReactを敵に回さず自社に吸い込む(BYOF)」という賢利な戦略で大成功。ページ全体は「JS 0バイト」の軽量HTMLとして出力し、動的な部分だけを「島」として部分的にハイドレーション。

TanStacktype-safe, explicit
CONTROL
RECLAIMED

Next.jsの「勝手に色々やってくれるブラックボックス」への疲弊に対し、「すべて開発者が明示的にコントロールする、完璧な型安全と疎結合」を掲げて急成長。TanStack StartはViteベースで特定インフラにロックインされず、Next.jsの複雑さに疲れた層を吸収中。

6.8SECURITY CRISIS

Node.js / npm のサプライチェーン攻撃

現代のWeb開発のもう一つの暗部が、「最小特権の原則の欠如」によるサプライチェーン攻撃である。

たった1つのライブラリ乗っ取りで、全アセットが流出する構造

Node.js環境下では、npm install した文字数カウント用のささやかなライブラリですら、デフォルトであなたのサーバーのファイルシステム、ネットワーク、環境変数(APIキーやDBパスワード)へのフルアクセス権限を持ってしまう。構造的脆弱性が日増しに深刻化している。

❦ ❦ ❦
07
CHAPTER SEVEN2026 → BEYONDTHE FUTURE

未来への跳躍
WASM と MoonBit

Next.jsが「Node.jsとReactの統合」だったとすれば、次のパラダイムは「ユニバーサルなポータブル実行環境」「WASM特化言語」による、真のゼロトラスト・超軽量フレームワークである。

7.1WASM · WASI

WebAssembly & WASI
セキュア・バイ・デザインの盾

WASMはブラウザやエッジで動く高速なバイナリ形式である。これまでのNode.jsのセキュリティ限界を根本から解決する。

鉄壁のサンドボックス

デフォルトでは、ファイル・ネットワーク・メモリ外へのアクセス権限が「0」。明示的に与えなければ何もできない。

ケーパビリティ管理

スマホアプリのように「このWASMには特定のフォルダ読込みだけを許可」といった、厳密な最小特権管理が可能。

ポータビリティ

Cloudflare Workers、Fastly、自前サーバー、AWS。インフラを問わず100%同じ動作を保証。ベンダーロックインの完全崩壊。

7.2MOONBIT

MoonBit
WASM時代のために生まれ落ちた寵児

従来のWASM開発(C++、Rust、Go)はコンパイル後のバイナリが肥大化し、Webで使うには重すぎた。MoonBitは、最初から「WASM(およびWasmGC)」のためにゼロから設計された新世代言語である。

From scratch.
For the WASM era.

型安全と極上のDX

Rustのようなモダンな型安全性を持ちながら、所有権やライフタイムのような「難解さ」を排除し、TypeScriptのようにサクサク書ける。

驚異のコンパイル速度

コンパイル速度はミリ秒単位。出力されるWASMバイナリは従来言語より劇的に小さく、Webのロード速度を阻害しない。

真の一体化

WASMだけでなくJSやNativeへのコンパイルも可能。Luna UI、Rabbita、SolなどのフロントFW・SSRフレームワークの実験が既に開始。

7.3MULTI-RUNTIME ISLANDS

マルチランタイム・アイランド
現実的な移行パス

「Next.jsの次」のフレームワークがキャズムを越え、デフォルトになるための現実的な道。それはAstroの戦略をWASM上に移植した「マルチランタイム」である。

▪ WASM CORE
フレームワークのコアや全体のレイアウトは、超軽量・超安全な MoonBit / WASM で記述。型エラーゼロ、ハック不可能なゼロトラスト基盤。
▫ JS ISLAND ① (React)
既存のReactコンポーネントを、そのまま「JSの島」として埋め込む。膨大なnpm資産はそのまま稼働。
▫ JS ISLAND ② (Legacy)
レガシーjQueryすらも、サンドボックス化されたJS島として安全に共存。
▪ SIGNAL BRIDGE
WASMエンジンとJSエンジン双方を、シグナルベースの通信ブリッジが調停。両者を同時に走らせる。

これにより、開発者は既存のコードを捨てるリスクを一切負わずに、セキュリティが重要で高頻度アクセスな部分から、段階的に「WASMの島」へ移行していくことができる。

✺ ✺ ✺
∞ EPILOGUE ∞

次なる「大発明」への問い — The pendulum swings back —

Webの進化の振り子は、「記述を楽にする(Rails / React)」と「実行を速く・安全にする(CGI / WASM)」の間を往復し続けている。Next.jsが「Reactを延命させるための巨大な設定の塊」になった今、振り子は再び「実行時のシンプルさと安全性」へと揺り戻り始めている。

" インフラは地球上のどこでもよく、設定ファイルは存在せず、AIが型エラーなしで1ミリ秒でUIを生成し、かつ絶対にハックされないWeb開発体験を、私たちはどう設計するか? "
歴史のバトンは、今あなたの手にある。