1. OSSのレキシラジオ
  2. EP13: Node.jsのレキシ〜カフ..
2026-03-09 22:12

EP13: Node.jsのレキシ〜カフェから始まり、分裂と再生を経て世界のインフラへ〜

今週はNode.jsのレキシです。


1人のエンジニアがファイルアップロードのプログレスバーに衝撃を受けた「なぜリアルタイム処理がまともにできないのか」という素朴な疑問から、Node.jsの物語は始まりました。ドイツ・ケルンのカフェで約6か月間の開発を経て、2009年のJSConf EUでスタンディングオベーションを浴びたNode.jsは、npmの誕生やExpressなどの主要モジュールの登場により爆発的に成長していきます。

そんなNode.jsの歴史に迫ります。


https://github.com/nodejs/node

サマリー

Node.jsは、リアルタイム処理への疑問から生まれたJavaScriptサーバーサイドランタイムです。ドイツのカフェで開発され、JSConf EUでのスタンディングオベーションを皮切りに、NPMやExpressなどの登場で急速に成長しました。一時は分裂の危機に瀕しましたが、コミュニティの力で再統合を果たし、オープンガバナンスモデルへと進化。現在も競合との切磋琢磨を通じて進化を続け、フルスタックJavaScriptや開発ツールチェーンの基盤として、世界のインフラを支えています。

Node.jsの誕生とその革新性
こんにちは、OSSのレキシラジオです。このポッドキャストでは、エンジニアであり、健康診断に怯えているhentekoが、毎週一つのOSSプロジェクトを取り上げて、そのプロジェクトにまつわる歴史を紹介する番組になります。
実はですね、直近で健康診断がありまして、毎年この時期になるとちょっとソワソワするんですよね。事前準備とかがとにかくめんどくさくて、まあいろいろ考えると憂鬱なんですけど、
皆さんも健康診断ちゃんと受けてますからね。エンジニアって不規則な生活になりがちなので、気をつけていきたいなと思っております。
さて、今週のテーマはNode.jsについてです。今回はNode.jsの歴史について見ていけたらなと思うんですが、
Node.jsって何かというと、JavaScriptをサーバーサイドで動かすためのランタイム環境です。
普段皆さんのウェブブラウザで動いているJavaScriptってあると思うんですけど、あれをサーバー側でも動かせるようにしたのがNode.jsです。
Node.jsの特徴は何かというと、ノンブロッキングIOと呼ばれるアーキテクチャを採用しているところです。
これは簡単に言うと、ファイルを読み込んだり、データベースに問い合わせをしたりといった時間のかかる処理を待っている間も、他のリクエストを処理できるというような仕組みになっています。
今日は、例えば皆さんがNPMインストールというコマンドを打ったりとか、あとはVSコードを開いたり、スラックやディスコードを使ったりしているかなと思うんですけど、
実はこれ全部Node.jsのエコシステムの上に成り立っています。
Stack Overflow Developer Survey 2024では、最も使用されているウェブテクノロジーとして40.8%の開発者が使っているというような調査結果も出ています。
さて、そんなNode.jsなんですけど、このNode.jsがどうやって生まれて、どんなドラマを経て今の姿になっていったのか。
今日はですね、2009年に生まれてからの約17年の歴史を追ってきたらなと思っております。
まずNode.jsの物語の始まりからお話ししていけたらなと思います。
時は2005年頃まで遡ります。
あるエンジニアがFlickrという写真共有サービスでファイルアップロードのプログレスバーがリアルタイムに動くデモを見たんですね。
当時のウェブ技術ではアップロードの進捗をリアルタイムに表示すること自体がとても難しかったです。
それが実際に動いているのを見て衝撃を受けたというような形です。
このエンジニアがライアン・ダールさんというような方です。
ダールさんはですね、そこからなぜ既存のウェブフレームワークではこういったリアルタイムな処理がまともにできないのかというような問いを持ち始めます。
そして、もし全てがノンブロッキングだったら、IOの完了を一切待たなかったらというような素朴な疑問がNode.js誕生への道を切り開いていくことになります。
そしてですね、当時のウェブサーバーの常識ってどうだったかというと、
Apacheに代表される1リクエスト1スレッドモデルが主流でした。
これは例えでいうとですね、1人のお客さんに1人のフロアスタッフが月切りで対応するレストランみたいなものです。
100人来たら100人のスタッフが必要で、1万人来たらもうパンクしてしまうような感じですね。
これがC典型問題と呼ばれていた課題です。
ダールさんが構想したNode.jsはこれとは全く違いました。
1人のフロアスタッフが注文を次々と受け付けて、裏のキッチンルームが料理を作り、できたら番号で呼び出すというような方式でした。
フロアーは1人でも裏方が平行して動くから大量の注文を捌ける。これが軌道系IOのイメージです。
さて、ダールさんはですね、この仕組みを作るためにどの言語を使うかいろいろ検討することになるんですけど、
シーア、ハスケル、ルアといった言語を試していくんですけど、最終的に選んだのはJavaScriptでした。
これ面白いのが選ばれた理由なんですよね。
JavaScriptにはサーバーサイドIOの常識がなかったからです。
他の言語にはすでに軌道系の仕組みがあったんですけど、既存のライブラリとの相性問題に苦しんでいました。
つまり、軌道系で書きたいのに周りのライブラリが同期前提で動いているというようなジレンマがあったというわけです。
JavaScriptはですね、その点白紙のキャンバスでした。
サーバーサイドの常識が何もなかったからこそ、最初から全てを軌道系前提で設計できました。
何もないっていうことが最大の武器になるて、すごく逆説的なお話かなと思います。
そして2008年9月にGoogleがV8エンジンをオープンソースとして公開しました。
Chromeのために作られた超高性能なJavaScriptエンジンが誰でも使えるようになったというような形です。
そしてこれが決定打でした。
ダールさんはドイツケルンでノードJSの開発にボットしていきます。
シリコンバレーの豪華なオフィスではありませんでした。
ヨーロッパのマジカドのカフェで約6ヶ月間開発をしていました。
Appleのガレージのように、やはりこういった偉大なプロダクトが最初に生まれる場所ってだいたい想像と違うかなと思いますね。
そして2009年の2月16日、GitHubへの最初のコミットが行われます。
そこからわずか数ヶ月後の11月、ベルリンで開催されたJS Conf EEA 2009にて、
ダールさんは約150人の徴収の前に立ちます。
JavaScriptで抱えたIRCサーバーのデモをその場でダールさんは披露しました。
わずか数行の高度で高性能なネットワークサーバーが動いているというような形でした。
会場が静まり返りました。
そして次の瞬間、JS Conf史上初のスタンディングオベーションが巻き起こりました。
150人の拍手の歓声が巻き起こって、それはまだ小さなカンファレンスの一場面に過ぎませんでしたけど、
でもこの瞬間からNode.jsの歴史は確かに始まりました。
今皆さんが使っているNode.jsは一人のエンジニアが、
なぜウェブフレームワークはリアルタイムな処理をまともに扱えないんだと思ったことから始まったというような形です。
偉大な技術の出発点で意外のほど身近な疑問から、身近な課題から始まっているというような形ですね。
爆発的な成長とエコシステムの拡大
さてJS ConfEUでスタンディングオベーションを受けたNode.jsはここからどんどん成長していきます。
まずJointというクラウドインフラ企業がスポンサーに名乗りを出て、DARさんをフルタイムで雇用することになりました。
これでDARさんは生活を気にせずにNode.jsの開発に集中できるようになりました。
でもですね、Node.jsの爆発的な成長を支えたのはDARさん一人ではありません。
ここが大事なポイントかなと思います。
Isaac Schulterさんというような方がいまして、この人がコードを共有して再利用する仕組みがなければどんなに優れたランタイムを効率すると考えていました。
そこで開発されたのがNPM、Node Package Managerです。
2009年の9月に開発が始まって、2010年1月には最初のリリースがされました。
NPMって何かというとパッケージマネージャーですね、その名の通り。
他の人が作ったライブラリを簡単にインストールして使えるようにする仕組みです。
先行するパッケージ管理の仕組みに触覚されて作られたというような形になっています。
ここで例えを使うとですね、NPMはセブンイレブンの物流のようなものです。
セブンイレブンの強さって商品の魅力だけじゃないですよね。
全国に確実に商品を届ける物流の仕組みがあの強さの本質です。
NPMもまたNode.jsの強さの本質でした。
2011年にNode.jsのデフォルトパッケージマネージャーになって、エコシステムの爆発的な成長をもたらしました。
他にもすごい仲間たちが次々と現れます。
TJ Holloway Checkさんです。
この方はですね、本当にすごくて、ExpressやMocha、Jadeなどの
といったNode.jsエコシステムの主要モジュールを約2年間で次々と作り上げていきました。
たった一人で商店街の半分の店を出したみたいな驚異的な生産性です。
初期のNode.jsが使い物になるレベルになったのは、この方の貢献が非常に大きいところがあります。
それからBert Welderさん。この方はWindows対応とLibUIの開発に尽力しました。
2011年、マイクロソフトの協力を得てNode.jsをWindows上でも動かせるようにしました。
それまでLinuxだけで動いていたNode.jsをWindowsユーザーという巨大な市場にも届けたというわけで、利用者を一気に広げるような重要な出来事でした。
そしてFelix Geisendorferさん。この方はFormidableというファイルアップロードのためのライブラリを開発しました。
これって実はまさにDARSAの限定の課題を解決するツールでした。
Flickrのプログレスバーから始まった問題を仲間が解決してくれたというような形になります。
そしてこの時期、企業もどんどんNode.jsを採用し始めます。
LinkedInがRuby on RailsからNode.jsの移行を含むアーキテクチャ全体の見直しによって、サーバー台数を30台から3台に削減に成功します。
そしてPayPalがJavaからNode.jsに移行して開発速度が2倍に、Uberも本番環境にNode.jsを投入した最初期の企業の一つになりました。
ケルンのカフェで一人のエンジニアが書き始めたソフトウェアが、数年後には世界の大手企業のインフラを支えていたというようなわけです。
これすごいですよね、単純に。そしてコミュニティも活発に形成されていきます。
ミケアル・ロジャーズさんが主催するノードコンフが開催されて、2013年にはノードスクールが始まって、後に165以上の都市に展開されるまで成長していきます。
潤文前半に見えますよね、ここまで。でもですね、ここから波乱が待ち受けています。
ガバナンス問題とIOJSへの分裂
旧政庁の裏でですね、プロジェクトのガバナンス、つまり誰がどうやってプロジェクトの方向性を決めるかというような問題がじわじわと蓄積していきました。
リーダーシップの異常を見てみましょう。2012年1月にダールさんからスキャルターさんへ、2014年1月にスキャルターさんからTJ・フォンティンさんへ引き継がれます。
でもここに問題がありました。3人全員がジョイエントと関係を持っていたんです。
V8エンジンの更新が遅いだったり、新しい開発者がプロジェクトに参加しにくいだったり、オープンソースプロジェクトなどに一企業の移行でプロジェクトの方向性が決まってしまうというような問題が発生していました。
これはですね、町内会の会長がずっと同じ家族から選ばれ続けているような状況で、悪意はないのかもしれないんですけど、
でもですね、他の住民には自分たちの街なのにというような思いがどんどん募っていきました。
ノードJSという革命は仲間を集めて、NPMという土壌を育て、世界中に広がりました。
でもその裏でですね、プロジェクトの舵取りをめぐる不満が静かに、しかし確実に積み上がっていったんです。
そして2014年中盤、ジョイエントに雇用されていない有力な開発者たちがついに行動を起こします。
ノードフォワードというイニシアティブを結成して、改善を求めて動き始めました。
ジョイエントは対応としてアドバイザリーボードを設立するんですが、これはあくまで助言機関に過ぎませんでした。
意見は聞くけど、最終的な決定権は今まで通りジョイエントが握ったままです。
根本的な解決にはなりませんでした。
そして2014年12月、ついにその時が来ます。
フィオドル・インダ・トニーさんがノードJSのコードをフォーク、つまりソースコードをコピーして、
独立したプロジェクトとして開発を始める形で、IOJSというプロジェクトを誕生させました。
インダ・トニーさんはノードJSのTLS、SSLの実装を担当していたコアメンバーです。
自分が愛し育ててきたプロジェクトの未来のために、あえて分裂という苦渋の決断を下しました。
これは本当に重い決断だったかなと思います。
そしてここが衝撃的なんですけど、IOJSのテクニカルコミッティ、つまり技術委員会のメンバーを見るとですね、
ベン・ノールドハウスさん、バート・ベルダーさん、アイザック・スキャルターさん、ネイサン・ラジリッチさん、トリバー・ノリスさんというような
ノードJSを作り上げてきた中心メンバーがずらっと名をつながれているんですよね。
これはクーデターではありませんでした。自分たちのプロジェクトを自分たちの手に取り戻すというようなための行動だったんです。
IOJSはオープンガバナンスモデルを採用して、最新のV8エンジンを積極的に取り込み、2015年1月にIOJS 1.0をリリースします。
再統合とコミュニティによる再生
さてここまで、普通ならここで物語は暗い方向に進みそうですよね。
分裂したプロジェクトは二度と戻り戻らないというのが、オープンソースの世界のよくあるパターンです。
でもですね、ノードJSコミュニティは違いました。ここがこの物語で一番感動的なところかなと思います。
フォークからわずか約10ヶ月後のことです。2015年2月、JoyentはLinuxファウンデーション参加にノードJSファウンデーションを設立すると発表しました。
IBMやPayPal、Microsoftが支援に名乗りを挙げました。そして2015年5月、IOJSのメンバーが新しいファウンデーションへの参加を投票で決定します。
そして2015年9月、ノードJSバージョン4.0がリリースされます。これが歴史的な再統合の瞬間です。
この統合で最も重要だったのは、実はコードの統合ではありませんでした。ガバナンスの統合でした。
IOJSが先駆けて導入したオープンガバナンスモデル、コラボレーター制度の開放、LTS技術サイクルの確立、これらが統合後のノードJSに引き継がれました。
分裂は破壊じゃなかったんですよね。より良い形で生まれ変わるための痛みを伴う再構築でした。
明治維新のように一度既存の体制を壊して作り直したことで近代化が加速しました。
ノードJSは一企業の所有物からコミュニティ全体のものになりました。
サプライチェーンリスクと創設者の後悔
ただ、再統合後の試練は続いていきます。2016年3月、LeftPad事件が起きます。
これ知っている方もいるかもしれませんね。わずか11行のパッケージがNPMから削除されただけで、バベルやリアクトなどの世界中のビルドが壊れてしまいました。
これ例えるなら、ある小さなネジ工場が突然営業を止めたら、自動車も家電も建築も全部ストップしてしまうようなものです。
サプライチェーンの一番小さな部品が全体を止め得る恐ろしさをソフトウェアの世界に突きつけた事件でした。
さらに2018年11月にはイベントストリーム事件。週200万ダウンロードの人気パッケージに悪意あるコードが仕込まれました。
攻撃者は最初、善良な貢献者を装って信頼を獲得してから権限を得て、ビットコインウォレットを標的とした攻撃コードを埋め込んだのです。
庁内会の活動に熱心に参加して信頼を得た人が、ある日こっそり街の金庫の鍵を複製していたようなものですね。
NPMの便利さの裏にあるリスクを世界に知らしめました。
そして2018年6月、JSコンフEU2018、覚えていますかね。
数年前の同じJSコンフの舞台でスタンディングオベーションを受けた男がですね、今度は自分の作品への公開を語りに戻ってきました。
ライアン・ダールさんがテンシングスアイリグレートアバートノードJS、ノードJSについて公開している銃のことというような講演を行いました。
特に印象的だったのはプロミスに関する公開です。
2009年6月にプロミスを追加したのに、2010年2月に削除してしまいました。
ダールさん自身の言葉で、愚かにも。
もしプロミスを残していたら、ノードJSの始動機プログラミングの歴史は全く違うものになっていたかもしれません。
コールバック時刻が長期化して、サードパーティーのプロミスライブラリが乱立し、最終的にES2015までプロミスが標準化されるまでの長い遠回りをしてしまいました。
そのすべてがこの小さな決断に端を発していました。
また、セキュリティモデルの欠如、ノードJS、ノードモジュールの設計、モジュールシステムの跡付けなど、
ダールさんはこれらの反省をもとにDEのという新しいランタイムを発表しました。
自分が作ったものの限界を誰よりも正直に語れる人ってなかなか少ないかなと思うんですけど、
成功に酔わずに過ちを認めて次の一歩を踏み出すっていうその姿勢こそがですね、ダールさんが技術者として尊敬される理由なのかもしれないなと思いました。
競争による進化と現在のNode.js
そして2019年3月、オープンJSファウンデーションが設立されます。
ノードJSファウンデーションとJSファウンデーションが統合して、特定企業に依存しない体制が完成されました。
ノードJSはですね、フォークによって死にかけたんじゃなくてフォークによって救われました。
一見破壊的に見えた行動がプロジェクトのガバナンスを根本から改善し、より健全な組織に生まれ変わらせました。
OSSは誰か一人のものではなくコミュニティ全体で守り育てるものです。
この教訓がノードJSの歴史を教えてくれる最も大切なメッセージかもしれませんね。
最後に現在のノードJSとその未来についてお話したいなと思います。
ザールさんの公開から生まれたディーノ、そして2021年に登場したJavaScriptコアエンジンとジグゲングによる超高速ランタイム版、
ノードJSの周りに新たな競合が現れたんですね。
でもこの競争がノードJSの進化を加速させたんですよね。
これはですね、トヨタが初代プリウスでハイブリッド市場を切り開いた後、
テスラが完全電気自動車で参入してその刺激を受けてトヨタ自身もEVの開発を加速させた構図に似てるかなと思います。
競争は敵じゃなくて進化の最大のドライバーでした。
ディーノやバンに刺激されてノードJSは猛烈な勢いで進化を始めます。
特に象徴的なのがTypeScriptのネイティブサポートです。
これまでTypeScriptをノードJSで動かすにはTSノードやTSXといった別のツールを入れる必要がありました。
バージョン22.6で実験的に始まってバージョン23.6ではデフォルトで有効になりました。
外部ツールなしで.tsファイルを直接実行できるようになったというような形です。
これってかなり大きい変化かなと思います。
他にもですね、ディーノが示したデフォルトセキュアという思想を吸収したパーミッションモデルや
サードパーティーのテストフレームワークなしで使える組み込みテストランナーなど
開発者体験を大きく改善する機能が次々と追加されています。
ここで面白いのが、DARさんが公開からディーノを作ってそのディーノの影響で
ノードJSが進化したというようなことなんですよね。
創設者が離れた後もプロジェクトは生き続けて創設者自身が作った虚構から学びながら進化し続けている。
この円環の美しさがノードJSの物語を特別なものにしているかなと僕は思っています。
Node.jsが変えた世界と未来
さて、ノードJSが変えた世界を少しだけ振り返ってみましょう。
まずフルスタックJavaScript、ノードJSの登場によってフロントエンドもバックエンドも同じJavaScriptで書けるようになりました。
フロントエンドとバックエンドは別の世界という常識を溶かしました。
今ではNext.jsのようなフレームワークでサーバーサイドレンダリングまで含めてJavaScript一本で開発できるデザインになっています。
NPMの規模はもうすっさまじくて、約220万以上のパッケージ、月間750億ダウンロードがされています。
世界最大のソフトウェアレジストリかなと思います。
2020年3月にはNPMインクがGitHub、つまりマイクロソフトに買収もされました。
フロントエンド開発のツールチェーンもWebpackからByte、ESLint、Prettiernaまで含めて全部ノードJSの上で動いています。
皆さんが普段使っている開発ツール、ほぼほぼすべてノードJSの恩恵を受けているかなと思っています。
そしてElectron。これはノードJSとChromiumを組み合わせたデスクトップアプリのフレームワークなんですけど、
皆さんが毎日使っているVSCodeやSlack、Discode、これ全部Electron製なので、つまりノードJSのエクスシステムの上に立っていると言えます。
ひどきプログラミングの進化も見逃せません。
Callback地獄からPromise、そしてAsync AwaitでDARさんが愚かにもPromiseを削除した2010年からAsync Awaitが当たり前になった現在まで、
技術は一人の手で着実に良くなっていっています。
その歴史がここにあるかなと思います。
皆さんが今日ですね、NPMインストールと打つとき、その裏には17年の歴史があると。
一人の、なぜウェブフレームワークやリアルタイムな処理を扱えないのかというような素朴な疑問から始まり、
仲間が集まりNPMという畑が育ち、分裂と再生を経て、競合と切磋琢磨しながら進化をし続けてきました。
ノードJSの物語はですね、OSSの力、つまり世界中のエンジニアがもっと良くしたいという気持ちで繋がって、
技術を前に進めてきた力の物語かなと思います。
さて、ということで今回はノードJSの歴史を見てきました。
皆さんはこの話を聞いて何が一番印象に残りましたかね。
僕は個人的にはダールさんが9年後に同じ舞台で自分の作品への後悔を語れたこと、
そしてその後悔から生まれたディーノが巡り巡ってノードJS自体を進化させたという物語が本当に好きかなと思います。
次にですね、NPMインストールと打つとき、ちょっとだけこの歴史のことを思い出してもらえたら嬉しいかなと思います。
さて、今回のお話は以上となります。
もし少しでも今回のお話がためになったなと思ったら、お聞きのプラットフォームでの高評価とフォローの方をお願いします。
また、XなどでハッシュタグOSSの歴史ラジオをつけて感想をつぶやいてもらえると、僕のモチベーションになりますので、ぜひよろしくお願いします。
次回はですね、データの可視化やダッシュウォード作成で使われるオープンソースのBIツールリダッシュの歴史について見ていけたらなと思います。
それではまた次回お会いしましょう。バイバイ。
22:12

コメント

スクロール