Node.jsのコンセプトとは? ライアン・ダール氏による東京Node学園祭 基調講演(前編)

2011年10月31日

サーバサイドJavaScriptとして話題になっているNode.jsの開発者ライアン・ダール氏が来日。10月29日に都内で開催されたNode.jsのイベント「東京Node学園祭」で基調講演を行いました。

その模様を紹介します。

Node.jsのコンセプトとは?

Node.jsの開発者、ライアン・ダール氏。

fig

このセッションでは、前半でNodeのコンセプトを、後半では来週にもリリース予定のNodeの新バージョンについて紹介します。

このデニス・リッチーの言葉はNodeの特徴を表していて、Nodeとは機能を加えるよりもむしろ取り去ったものです。

fig

いまのOSのインターフェイスのほとんどは、1970年代のテレプリンタのような歴史をひきずっています。ケン・トンプソンとデニス・リッチーが開発したUNIXやCは当時のPDP11のためにデザインされたもので、いまのOSもその歴史上にあるのです。

fig

UNIXの基本概念は、対話的なコマンドラインを作るものでした。lsコマンドを打つとその結果がテレタイプに出力されるといったものです。そして基本概念には、ブロックするシステムコールやプロセスが含まれています。

ブロックするシステムコールを呼び出すと、I/Oが完了するまで戻ってきません。戻ってくるまでどれだけかかるかも分かりません。これが現代のプログラムを非常にやっかいなものにしています。これが私たちがかかえている問題の根本にあるのです。

fig

プロセスは独立性にすぐれた単位ですが、起動時間がかかりメモリも消費するため、コネクションごとに使うのには重すぎます。lsのようなコマンドにはプロセスを使うのが適切でも、数千コネクション、数万コネクションのそれぞれをプロセスで扱おうとすると問題になります。

fig

できるだけ小さなリソースでできるだけ多くのコネクションをハンドリングできることが目的です。

しかしRubyやPython、Javaも1970年代のやり方が残っており、依然としてブロッキングシステムコールを使っています。それらの言語は文法だけが飾り立てられています。(会場ややざわめき)

1970年代のプログラミングモデルを再考しなければなりません。

プロセスで多数のネットワークI/Oを多重化するノンブロッキングソケットは1980年代には開発されていました。

fig

どのプログラミング言語もノンブロッキンングインターフェイスへのバインディングを持っています。しかし、それらは既存のAPIに付け加えられただけで、エキスパートでないと理解も開発も難しいものでした。デフォルトはブロッキングだったため、ノンブロッキングを使う場合でもブロッキングの動作を理解しておかなければならなかったのです。

Nodeのゴールは、ノンブロッキングなネットワークのプログラムをやさしく開発できること。100%ノンブロッキングなインターフェイスを導入することで、それに成功しました。

fig

Nodeの貢献は、ノンブロッキングAPIを発明したことではなく、それだけで開発できる環境を作ったことです。

Nodeの目的は、利便性を高めるのではなくシンプルなモデルの実現です。それによって開発者の生産性がさらに高まるのです。

fig

ここまでが前半の話です。質問はありますか?

(会場)なぜ新しい言語ではなくJavaScriptだったのでしょう?

RubyやPythonなどほかのプログラミング言語はすでに、ファイルシステムへのアクセスやDNSへのアクセスを備えていて、そうするとノンブロッキング用のAPIとそれらを同時に使わなければならなかったからです。

JavaScriptを選んだのは、I/Oをどうするべきという概念が言語になかったから。そしてJavaScriptを選んだおかげで、Nodeがこんなに知られることになったのだと思います。

(会場)どういう考えでNodeを開発したのかは聞けたのですが、ではなぜ「Node」という名前なのかを教えてください。どういう意味が込められているのでしょうか。

Nodeは、「Node in Network」のNode。これは全体の分散システムの中のスモールピースを示していて、まだそれは実現できていないけれど、今後の追加機能では分散したNodeをまとめるようなことができるようにします。

≫続きは「Node.jsの新版について。ライアン・ダール氏による東京Node学園祭 基調講演(後編)」で。

関連記事

Tags: JavaScript プログラミング言語 殿堂入り Node.js

このエントリーをはてなブックマークに追加
ツイート
follow us in feedly





タグクラウド

クラウド / AWS / Azure / Google Cloud
コンテナ / Docker / Kubernetes
クラウドネイティブ / サーバレス
クラウド障害 / 運用・監視

プログラミング言語 / 開発ツール
JavaScript / Java / .NET / WebAssembly
HTML/CSS / Web標準

アジャイル開発 / スクラム / DevOps / CI/CD
ソフトウェアテスト・品質
ローコード/ノーコード開発

データベース / RDB / NoSQL / 機械学習・AI
Oracle Database / MySQL / PostgreSQL
Office / 業務アプリケーション

ネットワーク / HTTP / QUIC / セキュリティ
OS / Windows / Linux / VMware
ハードウェア / サーバ / ストレージ

業界動向 / 働き方 / 給与・年収
編集後記 / 殿堂入り / おもしろ

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本