NodeJS とは何ですか?
Node ランタイムプラットフォームには、JavaScript で書かれたプログラムを実行するために必要なすべてのものが含まれています。
もし Java について知っているなら、Node.js の定義にはいくつかの共通点があります。
Node.js は V8 JavaScript エンジン 上に構築されたプラットフォームであり、C++ と JavaScript で書かれています。このプラットフォームは、Ryan Lienhart Dahl によって 2009 年に開発されました。
Node.js は、初期の JavaScript 開発者が、もともと ブラウザ上でのみ動作するもの だった JavaScript を、独立したアプリケーションとして PC 上で動作させる ことができるように拡張したことによって誕生しました。
これにより、JavaScript は ウェブサイトとのやり取り以外 にも多くのことができるようになりました。
これは、Node.js の公式サイト に掲載されている定義です。
最初の部分については既に理解しているので、次の部分を見てみましょう。
I/O(Input/Output) とは、ファイルの読み書きや API への HTTP リクエストなど、データの入出力に関する処理のことを指します。
I/O 操作は時間がかかるため、他の処理をブロック(妨げる)する可能性があります。
たとえば、user1 と user2 のデータを取得して画面に表示する 場面を考えてみましょう。
この処理には時間がかかりますが、本来 両方のデータ取得は同時に実行できるはず です。
ブロッキング処理 では、user1 のデータが画面に表示されるまで user2 のデータ取得は開始されません。
もしこれが ウェブサーバー だった場合、新しいユーザーごとに 新しいスレッド(Thread) を開始しなければなりません。
しかし、JavaScript はシングルスレッド(1 つの処理が終わるまで次の処理を開始できない) なので、この方法は適していません。
ここで ノンブロッキング I/O(Non-blocking I/O) の登場です。
ノンブロッキング処理 を使用すると、user2 のデータ取得を user1 の処理を待たずに開始できます。
つまり、両方のリクエストを並行して処理することができます。
これにより、複数のリクエストを同時に処理できるため、マルチスレッドの必要がなくなります。
以下は、JavaScript のイベントループ がどのように動作するかを簡単に説明したものです。
npm
npm とは、Node.js のパッケージ管理システムであり、多くの ライブラリ を提供しています。
これらのライブラリを活用することで、アプリケーションの開発を より速く、より効率的に 行うことができます。
require
には 3 つの役割 があります。
fs
や http
など)を読み込む。require
は、指定されたパスのモジュールを読み込み、module.exports
を返します。
Node モジュール とは、再利用可能なコードのブロック です。
モジュールを作成すれば、異なるアプリケーションでも簡単に再利用 できます。
また、Node.js には組み込みのモジュール があり、追加のインストールなしで使用できます。
V8 は、Google が開発したオープンソースの JavaScript エンジン であり、C++ で書かれています。
JavaScript → V8(C++) → Machine Code(機械語)
V8 は、ECMA International によって定められた ECMAScript(ECMA-262) の仕様に従って動作します。
この仕組みにより、V8 を C++ コードに組み込むことで、C++ が JavaScript を理解しやすくなる という利点があります。
P.S.: Greg Bulmash 氏によると、V8 以外にも Mozilla の SpiderMonkey や Microsoft の Chakra など、他の JavaScript エンジンも存在します。
Node.js では、アプリケーション内で発生するイベントを処理することができます。
イベントには、以下の 2 種類 があります。
libuv
というライブラリを使用(例:ファイルの読み取りが完了したとき)。試しに、Node.js で "Hello World" を表示 してみましょう。
app.js
という名前のファイルを作成し、以下のコードを追加します。
console.log("Hello World!");
ターミナルを開き、ファイルのあるフォルダに移動して、次のコマンドを実行します。
"Hello World!" と表示されれば成功です!