大量のJavascriptコード

Node.jsとは?

Node.js(ノードジェイエス)とは、サーバーサイドでJavascriptを使う環境のことです。

Node.jsを使うと、JavaScriptでサーバー処理の制御をすべてプログラミングすることができます。

つまり、PHPやRubyやPythonやJava等のプログラム言語と同様に、サーバー側で動作するプログラムをJavascriptで開発できる環境がNode.jsなのです。

Googleが開発した実行エンジン「V8」が利用されており、従来の実行エンジンと違い、JavaScriptを即座にコンピュータが理解できる機械語に変換して処理を行うためとても高速です。

Node.jsの特徴

シングルスレッド

同時に複数の処理を行うマルチスレッドと違い、Node.jsは同時にひとつの処理しかできません。

マルチスレッドは同時にたくさんの処理をするため、大量のアクセスがあるとリソースが足らなくなってしまうという問題があります。

その点、Node.jsはシングルスレッドで一度にひとつの処理をするので、リソース不足に陥りにくいといえます。

しかし、ひとつの処理しかできないので、そのぶん処理は遅くなってしまいます。

スーパーのレジ店員さんが1人で対応するのと複数で対応するのではスピードが違いますよね。

そんな処理速度の問題をクリアするのが、ノンブロッキングI/Oの仕組みです。

ノンブロッキングI/O

ノンブロッキングI/Oとは、I/Oの処理待ちが発生する場合にエラーが返ってくる仕組みのことをいいます。

この時プロセスはブロック状態にならず、CPUを他の処理に回すことができるためI/O待ち時間を有効活用できます。

つまり、I/O待ちの時間を活用することで1スレッドで複数のリクエストを処理できるのです。

スーパーの店員さんがお弁当を温めている間、レジの作業を続ければお客さんをさばく速度が上がりますよね。

このように、Node.jsは、シングルスレッドでリソース不足の問題を、ノンブロッキングI/Oで処理速度の問題を解決しているという特徴があります。

Node.jsのメリット

フロント/サーバーどちらもJavascriptで書ける

Javascriptでフロント/サーバーどちらも書けることが、Node.jsを使う最大のメリットといえます。

フロントエンドエンジニアとしての知識しかなく、サーバーサイドの言語はわからないという方でも、Node.jsを使えばJavascriptの知識でサーバーシステムを構築できます。

つまり、普段慣れ親しんだJavascriptの知識で、Web開発ができるということです。

Web開発はもちろん、アプリやIoT製品などもNode.jsで開発することができます。

C10K問題(クライアント1万台問題)を解決

従来のWebサーバは、1万接続もあるとパフォーマンスが落ちてしまいます。

前述の通り、Node.jsでは、シングルスレッドとノンブロッキングI/Oの仕組みを導入しているので、C10K問題を解決することができるのです。

小さな処理を大量にこなせる

Node.jsは処理が大量に必要なシステムに向いています。チャットアプリケーションなどは、その最たる例でしょう。

最近では、決済プラットフォームとして有名なPayPal社が、バックエンドをJavaからNode.jsを採用したというニュースもありました。

結果として、同じページのレスポンスにかかる平均時間が、35%減少したそうです。

Node.jsのデメリット

同期処理が苦手

Javascript自体が、ajaxなど非同期に向いている言語なので、同期処理がメインのシステムなどでは、Node.jsを使うメリットはほとんどありません。

重い処理は苦手

大量の静的コンテンツを提供するサーバなどでは、そもそも多数のイベント処理がそれほど必要ありません。

そのため、画像などを大量に表示させるサイトなどをNode.jsで構築することは難しい(向いていない)といえます。

まとめ

最後に、Node.jsプロジェクトの幹事企業、Joynet社のエンジニアリング部門の副社長であるブライアン・カントリル氏がNode.jsについてした発言を引用します。

Node.jsの良さは小型プロジェクトの開発が本当に簡単に行えるところだ。他の環境なら長時間かかるアイディア・ベースでのプロトタイプなども、Node.jsならばすぐにできてしまう。Node.jsが世の中でどう使われているかなんてことは気にせず、遊び感覚でいろいろ試してみて、自分のやりたいことができるかどうかをぜひその目で見てほしい。引用:http://readwrite.jp/startup/2539/

カントリル氏の言う通り、Node.jsを使えば、簡単なWebアプリケーションならすぐに開発|実行できます。

フロントエンドエンジニアでサーバーサイドの勉強をしたいと考えている皆さんは、これを機にNode.jsを使ってみてはどうでしょうか。

ここまでお読みいただきありがとうございました!