Node.jsとは何か
2015年06月30日
最近技術界隈で「Node.js」という言葉を耳にしたことがある人は多いと思います。
しかし、私も聞いたことはあるものの使ったことがないので、どういったものか調べてみました。
Node.jsとは
Javascriptとは、通常クライアントサイトのマシン上のウェブブラウザで動作するプログラムですが、Node.jsとはクライアントサイドではなくサーバサイドで動作するjacascriptのプラットフォームです。
Google Chrome用に開発されたV8エンジンがサーバ上で動作するように、様々な機能が追加されています。
Node.jsの特徴として、無駄のない実行をするために、「ノンブロッキングI/O」という仕様になっています。
これは、Javascriptの特徴であるシングルスレッドで動作をしつつも、待ち時間には別の処理を行う仕組みです。
何に使うか
それは分かったとして、「サーバ側で動くというのは分かったけど、何に使うの?」というところが疑問に思うと思います。
基本的にはサーバサイドの処理は何でもできるといったかんじです。
例えば、Apacheの代わりにWebサーバを構築することが可能な他、サーバ上のファイルのアップロード、削除、データベース接続、メール送信などを行うことができます。
Node.jsが解決する問題
Node.jsは、「スケーラブルなネットワーク・プログラムを作成するための簡単な方法を提供すること」が目的とされています。
従来のWebサーバでは、同時接続数が多く増えた時に、様々な問題が発生します。
まずはサーバの容量の問題やデータのサーバごとの同期の問題など、様々な問題があります。
Node.jsを使用することで、これらの問題に、より効率的に対処することができます。
例えば、アプリケーションサーバに対して同時に多くの接続が発生するゲームなどでは、サーバ構築の手段としてNode.jsは非常に有用となります。
何故Node.jsはこれらの問題の解決に有用であるかというと、まずGoogle Chromeに内蔵されているJavascript解釈のためのエンジン「V8」をベースとしているため、非常に高速です。
また、上記で説明したような非同期で動作する仕組みを持っています。
また、フロントエンドの処理からサーバサイドの処理までをjavascriptで記述できるため、フロントエンドエンジニアがそのままサーバサイドの処理を行うという場合にも有用です。
Apacheの抱えている問題
Webサーバの構築に最もよく使われている「Apache」ですが、接続のたびにスレッドが作成され、それにサーバのメモリが使われるため、同時に多くの接続が発生すると、ある段階からメモリ不足などの問題により、極端にパフォーマンスが悪くなります。
これを「C10K問題(クライアント1万台問題)」とも呼ばれています。
Node.jsとはこういったたぐいの問題を解決するためのアプローチの1つとして有効です。
使い方
まずは、利用するサーバなどのマシンにNode.jsをインストールする必要があります。
Linuxはソースコードからコンパイルし、WindowsやMacではインストーラーがそれぞれ用意されています。
Node.jsの特徴
記述はjavascript
当たり前といえば当たり前ですが、Node.jsはJavascriptで記述されています。
このため、業務でjavascriptを使用した経験のあるプログラマにとって扱いやすい要素であるといえます。
イベント駆動型プログラム
通常のJavascriptでは、ユーザ側の動作(クリックなど)によって発生する処理があります。
これをイベント駆動といいます。
Node.jsも、同様にイベントに応じて駆動する処理を記述します。
イベントの種類に、例えば、サーバに接続が発生した、などがあります。