JavaScriptとは何かで少し触れたNode.jsを、あらためて掘り下げます。実はこの記事、もっと早く読んでいてもおかしくありませんでした。
実は、もう使っていた
React・Vue・Next.js・Astro——ここまで書いてきたフレームワークは、どれも手元のパソコンにNode.jsがインストールされていることを前提に動いています。プロジェクトを立ち上げるコマンドも、画面を確認するための開発用サーバーも、その裏側で動いているのはNode.jsです。このサイト自体を作るときに使っているastro devというコマンドも例外ではありません。名前を意識しないまま、実はずっと使っていた、という道具です。
ブラウザの外でJavaScriptを動かす
JavaScriptとは何かで見たとおり、JavaScriptはもともとブラウザの中でだけ動く言語でした。2009年、Ryan Dahl氏がNode.jsを作り、ブラウザを介さずに、パソコンやサーバー上で直接JavaScriptを動かせるようにしました。
これを可能にしているのが、Googleが開発したV8というJavaScriptエンジンです。V8は、Google ChromeというブラウザでJavaScriptを高速に実行するために作られた部品で、Node.jsはこのV8を取り出して、ブラウザの外でも動くように組み込んでいます。
「同時に大量の作業をさばく」ための設計
Node.jsには、生まれたときからのはっきりした設計思想があります。1つのアクセスに1つの処理の枠(スレッド)を割り当てるという、それまでの多くのサーバーの作り方とは違い、Node.jsは1つの処理の流れが、次々に来る要求を順番にさばいていくという一風変わった仕組み(イベントループ、非同期I/O)を採用しました。
かみ砕くと、「順番を待たせず、手が空いた分だけ次の仕事に取りかかる」という考え方です。この設計のおかげで、同時に大勢がアクセスしてくるようなWebサービスでも、少ない資源で効率よくさばけます。ただし万能ではなく、画像処理のような重い計算処理を1つの流れの中でずっと抱え込むと、その間ほかの要求を待たせてしまう場面もあります。Node.jsが得意なのは、計算そのものより、通信の待ち時間が多い作業をたくさんさばくこと、という理解が実態に近い言い方です。
パッケージ管理も、標準で付いてくる
Node.jsをインストールすると、npmというパッケージ管理の仕組みも一緒に付いてきます。「パッケージ」というのは、誰かがすでに書いて公開してくれた、再利用できるコードのかたまりのことです。詳しくはnpmとは何かで扱います。
まとめ
- Node.jsは、JavaScriptをブラウザの外で動かすための仕組み。2009年、Ryan Dahl氏がGoogleのV8エンジンを使って作った
- React・Vue・Next.js・Astroは、どれも手元にNode.jsがインストールされている前提で動いている——名前を意識しないまま、実はもう使っていた道具
- 通信の待ち時間が多い作業を、同時にたくさんさばくのが得意な設計。重い計算処理そのものが得意なわけではない
- インストールするとnpmというパッケージ管理の仕組みも一緒に付いてくる