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学園祭 基調講演(後編)」で。

関連記事

あわせて読みたい

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




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

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

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

最新記事10本