JavaScript 〜10日間の突貫工事からWebを制覇した、雑草の王〜

2026-11-05 / シリーズ「言語の履歴書」第3話

📄 本日の履歴書:JavaScript(ジャバスクリプト)

氏名: JavaScript(ジャバスクリプト)
生年月日: 1995年12月4日(現役31歳)
出身地: アメリカ ネットスケープ・コミュニケーションズ
生みの親: ブレンダン・アイク
現住所: 地球上のすべてのWebブラウザ、サーバー、スマホアプリ、IoT機器
性格: 超フレンドリー、お調子者、寛容すぎて何でも許す、泥臭い生命力
座右の銘: 「動けばよかろうなのだ」「Any application that can be written in JavaScript, will eventually be written in JavaScript.(アトウッドの法則)」
得意技: 画面を絶対に固まらせない非同期処理(イベントループ)、DOM操作
弱点: 「'1' + 1 = '11'」なのに「'1' - 1 = 0」になる狂った暗黙の型変換

1. 素朴な疑問:なぜ「“1” + 1 = “11”」なのに「“1” - 1 = 0」なの?

やあ、みんな! 僕の名前は「JavaScript(ジャバスクリプト)」。親しみを込めて「JS」って呼んでくれよな!

僕の教科書を開いたプログラミング初心者が、開始10分で頭を抱えて発狂する**「伝説の珍現象」**がある。 コンソール画面を開いて、こう打ち込んでみてほしい。

"1" + 1   // 答え: "11" (文字列の合体!)
"1" - 1   // 答え: 0    (普通の引き算!?)
[] + []   // 答え: ""   (空の配列同士を足すと、なぜか空の文字列!?)
[] + {}   // 答え: "[object Object]" (急に宇宙語!?)

「なんじゃこりゃあああ!? 足し算では文字として繋げるくせに、引き算では勝手に数字に直して計算するのかよ! 支離滅裂だ! ふざけるのもいい加減にしろ!」

あはは、怒るのも当然だよね。 第2話で登場したお堅いエリート幹部の「Java」先輩なら、こんなデタラメなコードを書いた瞬間に「型が一致しません!」と真っ赤な顔で怒鳴りつけて、コンパイルすら通してくれない。

なのに僕は、どんなにめちゃくちゃな計算を渡されても、絶対にエラーを出さずにニコニコしながら無理やり答えを返してしまう。 なぜ、こんな狂った仕様が残っているのか? そして、なぜこんな「欠陥だらけ」と言われた言語が、いまや世界中のプログラミング言語ランキングで1位を独走し、地球上のあらゆるITサービスを支配しているのか?

その裏にある、僕の壮絶すぎる「雑草のような人生ドラマ」を聞いてほしい。


2. 誕生の歴史:わずか「10日間」で作られた突貫工事の奇跡

時計の針を、1995年5月に戻そう。 当時、インターネットの黎明期を切り拓いていたブラウザ会社「ネットスケープ」は、強大なマイクロソフトとの血みどろのブラウザ戦争(第1次ブラウザ戦争)の真っ只中にいた。

当時のWebページは、文字と画像がペタッと貼ってあるだけの「ただの動かない電子ペーパー」だった。 創業者のマーク・アンドリーセンは考えた。 「ボタンを押したらフワッと動いたり、入力フォームのチェックができるような、軽快で簡単なスクリプト言語がブラウザの中に今すぐ欲しい!」

その無茶振りを一身に背負わされたのが、僕の生みの親である天才プログラマー、ブレンダン・アイクだった。 会社から彼に与えられた開発期間は、なんと―― 「10日間」。

JavaScriptの生みの親ブレンダン・アイクの肖像写真
JavaScriptの生みの親ブレンダン・アイク。1995年、ネットスケープでわずか10日間の突貫工事で原型を作り上げた。写真:Darcy Padilla(CC BY-SA 3.0/Wikimedia Commons)
1995年5月:ネットスケープ社「10日後にデモを見せろ!」 間に合わなければ会社が潰れる! ブレンダン・アイクが不眠不休で爆走し、わずか10日間で完成! 初期名称:Mocha → LiveScript マーケティングのひらめき:当時大ブームの「Java」の人気に便乗! 名前を「JavaScript」に改名して世に放流!🔥

Javaとは「インドカレーとインド洋」くらい関係ない!

10日間だぞ!? 普通、プログラミング言語の設計なんて何年もかけて学者たちが議論するものだ。 彼は、Schemeという言語の思想、Selfという言語のプロトタイプ、そしてC言語の見た目をミキサーに放り込み、不眠不休の10日間で僕の原型(Mocha)を書き上げた。

そして、世に出る直前、大人の事情(マーケティング)で歴史に残る「最悪の混乱」が起きた。 当時、サン・マイクロシステムズが発表したばかりの「Java」が世界中で大ブームを巻き起こしていた。 それに目をつけた経営陣がこう言ったんだ。 「Javaにあやかって、名前を『JavaScript』に変えよう!」

断言しておくけれど、僕(JavaScript)とJava先輩の間には、血縁関係も技術的な共通点も1ミリもない。 「メロン」と「メロンパン」くらい違う。「インド」と「インド洋」くらい関係ない。 ただの売名行為で名前をパクられたせいで、その後の30年間、世界中の何億人もの初心者が「JavaとJavaScriptって何が違うの?」と混乱し続けることになったんだ。


3. 概念の芯:僕がブラウザの中でやっている「たった2つの仕事」

突貫工事で生まれた僕だったけれど、ブラウザの中で果たすべき役割は最初から極めて明確だった。 それが**「DOM操作」と「イベントループ」**だ。

① 画面の積み木を組み替える「DOM操作」

HTMLで書かれたWebサイトは、ブラウザの中で**「DOM(Document Object Model)」**という木の枝のようなデータ構造(積み木)に変換されている。 僕の仕事は、この積み木をリアルタイムにいじくり回すことだ。

👆 クリック! ユーザーがボタンを押した (イベント発生) ⚡ JavaScriptが感知 イベントリスナーが 合図をキャッチ 🧱 DOMを書き換え! 文字の色を赤に変える ポップアップを差し込む

僕がいなければ、現代のWebサイトは「リンクをクリックするたびに画面全体が真っ白になって次のページを読み直す」という昔の退屈な世界に戻ってしまう。 Twitterのタイムラインが下へスクロールするだけで無限に新しいツイートを読み込めるのも、僕が裏でDOMの積み木をせっせと足し続けているからだ。

② 画面を絶対にフリーズさせない「イベントループ」

僕には、C言語やJavaと違って**「手が1本(シングルスレッド)」**しかない。同時に2つの計算をすることはできないんだ。

普通に考えれば、巨大な画像やデータをサーバーから読み込んでいる間、手が塞がってしまって画面のボタンが一切押せなくなる(フリーズする)はずだよね。 それを防ぐために僕が身につけた必殺技が、**「イベントループ(非同期処理)」**だ。

① 🏃 JavaScript → ⏱️ ブラウザの助っ人(Web API)に通信を丸投げ 僕は絶対に立ち止まらない!次の作業(マウス操作など)を即座にこなす ② (3秒後)通信完了!「コールバック関数」が待ち行列に並ぶ 待ち行列=📋 タスクキュー ③ 手元の仕事が空っぽになった瞬間、行列から拾って画面に描く! これが「イベントループ」

僕は、時間のかかる通信作業を頼まれたら、ブラウザの通信係(Web API)にポイと丸投げして、自分はその場ですぐに次の仕事(マウスのスクロールやキーボード入力)に戻る。 そして、通信が終わったという合図が届いたら、自分の手が空いた瞬間にサッと結果を受け取って画面に反映させる。

この「絶対に立ち止まらない、軽快なワンマンオペレーション(イベントループ)」のおかげで、僕は非力なシングルスレッドでありながら、スマホの画面を滑らかに動かし続けることができるんだ。

触って試す:イベントループの実行順体験

⏱️ イベントループの実行順体験

下の小さなプログラムを「次へ」ボタンで1ステップずつ実行します。setTimeoutは「0ミリ秒後」に設定済み。それでもタイマーの中身は最後にしか出てきません。コールスタックとタスクキューの動きで追ってみましょう。

console.log('スタート');
setTimeout(function () {
  console.log('タイマーの中身');
}, 0);
console.log('おわり');
コールスタック(空)
Web API(タイマー係)(待機中)
タスクキュー(空)

🖥️ コンソールの出力


4. 怒涛の歴史:バカにされた「オモチャ」から世界の覇権へ

信じられないかもしれないけれど、最初の10年間、僕は世界中のプログラマーから**「あんなものは言語じゃない。画面に雪を降らせるだけの危険なオモチャだ」**と見下され、嫌悪されていた。

セキュリティはガバガバ、ブラウザごとに挙動がバラバラ、少し複雑な処理を書けばコールバック関数の巣窟(コールバック地獄)になってコードが読めなくなる……。 しかし、2000年代中盤から、**僕の運命を劇的に変える「3つの巨大な革命」**が立て続けに起きた。

① 2005年:Ajax革命(Googleマップの衝撃) 画面をリロードせずに地図がヌルヌル動くぞ!? ② 2008年:Chromeの「V8エンジン」爆誕 JavaScriptの実行速度が突然100倍に跳ね上がった! ③ 2009年:Node.jsの登場 ブラウザの檻を脱走し、サーバーサイドへ進出! 世界中のエンジニアが JSに熱狂!🚀

革命①:AjaxとGoogleマップの衝撃(2005年)

当時の常識では、地図サイトを動かすには、東へスクロールするたびに画面全体を再読み込み(リロード)して何秒も待つのが当たり前だった。 そこに突如現れたのが「Googleマップ」だ。 ドラッグすると、画面が一切チラつくことなく、無限に滑らかに地図がついてくる。世界中のエンジニアが腰を抜かした。 「どうやってるんだ!?」 種明かしをすれば、僕(JavaScript)が裏でこっそりサーバーと通信して画像を取得し、DOMを書き換えていただけだった(Ajax)。 この瞬間、僕は「オモチャ」から「Webに不可欠な最高峰のエンジン」へと格上げされたんだ。

革命②:Google Chrome「V8エンジン」の速度破壊(2008年)

Googleが自前で開発したブラウザ「Chrome」に搭載されたJavaScriptエンジン「V8」。 こいつが、僕の実行速度を一気に**「数十倍〜100倍」**へと引き上げた。 Java先輩と同じように、動かしながらリアルタイムで機械語に焼き直す(JITコンパイル)技術を極限まで突き詰めたことで、僕は「C言語にも迫るスピード」を手に入れてしまったんだ。

革命③:Node.jsによる「ブラウザからの脱走」(2009年)

「こんなに速いなら、ブラウザの中だけに閉じ込めておくのはもったいない。パソコンやサーバーの上で直接動かそうぜ!」 天才エンジニアのライアン・ダールが、V8エンジンを引っこ抜いて作ったのが**「Node.js(ノード・ジェイエス)」**だ。

この瞬間、僕はブラウザの檻を破壊して外の世界へ脱走した。 サーバーのバックエンドも、TwitterのAPIも、Slackのデスクトップアプリも、スマホアプリ(React Native)も、果てはゲーム機やIoT家電まで、**「JavaScriptさえ書ければ、フロントからサーバーまで世界中のすべてを1人で開発できる」**という無敵の全能感を獲得したんだ。


5. カオスの調教:救世主「TypeScript」の登場と完全なる世界征服

だが、僕が世界中を飲み込むにつれて、かつての「10日間の突貫工事のツケ」が巨大な牙を剥いた。 Webアプリが何百万行という巨大なシステムに巨大化するにつれ、「型がない(何でも代入できてしまう)」という僕の優しさが、世界中でバグの温床になったんだ。

「数字が入っていると思ったら文字列だった!」 「undefined(未定義)のプロパティを読み込もうとして画面が真っ白になって落ちた!(Cannot read property of undefined)」

世界中の開発者が、僕の自由すぎるカオスに悲鳴を上げていた2012年。 僕を救うために立ち上がったのは、かつて僕を潰そうとした宿敵・マイクロソフトだった。 彼らが送り込んできた最高の相棒。それが**「TypeScript(タイプスクリプト)」**だ。

コンパイラが型チェックを済ませて脱がせる 🛡️ TypeScript 人間が書くコード 型をピシッと指定し ミスはコンパイル時に検知 🏃 生のJavaScript ブラウザへ届くときには いつもの僕に戻る! 🌐 世界中のブラウザで 高速に実行!✨

TypeScriptは、僕の上に**「厳格な型の鎧(ルール)」**を優しく着せてくれた。 開発者がプログラムを書くときは、Java先輩のように厳密にミスを検知して助けてくれる。 そして、いざブラウザへ届けるときには、その鎧を脱ぎ捨てて、軽快な僕(JavaScript)の姿に戻って走り出す。

この最高の相棒を手に入れたことで、僕の弱点は完全に消滅した。 今や、世界最大のプログラム部品の共有広場「npm」には数百万個のライブラリが並び、宇宙探査機から銀行のフロントエンドまで、僕たちのコードが動いていない場所は地球上に存在しない。

「10日間のやっつけ仕事で作られた、欠陥だらけの言語」。 そうバカにされながらも、誰よりも人々の声に耳を傾け、失敗をバネにして進化し続けた雑草の僕が、気づけば世界のWebを1人で背負う王様になっていた。 これだから、プログラミングの世界は最高に面白いんだ!


📝 3行で頭に入る「試験・実務の要点まとめ」


確認クイズ

📝 確認クイズ(3問)