Node.js を使えば Web開発には欠かせない JavaScript でサーバサイドの制御もでき、Webアプリやスマホアプリ、機械学習などの開発でも注目を集めています。また、Nods.js は、多くのサーバ管理者が悩まされてきた「C10K問題」の解決にも有用です。
本記事では Nods.js でできることやメリット、デメリットなどについて解説します。
Node.jsとは?
「サーバサイドJavaScript」とも呼ばれるNode.js
Node.js とは 2009年に作成されたプラットフォームで、ブラウザ上で動作する JavaScript をサーバサイドでも動作させるための実行環境です。
Node.js を使えば、クライアントとサーバサイド両方を慣れ親しんだJavaScriptで言語を統一して記述できるので、プログラマの負担も軽減できます。
また、Node.js を使うことで、Web開発に用いられていた JavaScript をスマホアプリや機械学習といった分野でも利用できるなど、開発の幅が広がります。
こういったことから、Microsoft や Yahoo! など、多くの大手 IT企業でもNode.jsの利用が推奨されています。
JavaScript は、Webページに動きを付けるために用いられるプログラミング言語で、本来は Webブラウザ上で動作し、サーバ上では動きません。
一方で、Python や Ruby などのプログラミング言語はサーバ上で動作します。
このような違いから「OS の機能」にアクセスできるか否かという違いが生じます。
このとき、JavaScript では、ブラウザによる限定的な仲介以外では、ファイルの読み書きやネットワーク通信といった「OSの機能」にアクセスできないのです。
その点、Node.js を使うことで、JavaScript だけでは不可能だった OS の機能にアクセスするプログラムを組めます。
Node.jsでできること
Webサーバ構築
サーバサイドでの動作を可能にする Node.js を利用すれば Webサーバを構築できます。Node.js で構築した Webサーバは軽量なため、大量のアクセスがあっても比較的スムーズに動作します。
Webアプリ開発
メモリ消費を抑えて大量のアクセスを捌ける Node.js はリアルタイム性の高いアプリに最適で、ライブラリも数多く提供されていることから、多くの Webアプリに使われています。
スマホアプリ開発
一般的にスマホアプリ開発というと、iOS向けには「Swift」、Android向けには「Java」が王道ですが、近年はハイブリッド型アプリもの人気もあり HTML5 や JavaScript のみでアプリを開発できるようになりました。
なかでも、Node.js はパフォーマンス性が高いため、複数のユーザが同時に使用するようなスマホアプリでもスムーズに処理を行えます。
IoT分野の開発
「IoT」は、「Internet Of Things」の略で、「モノとインターネットを繋げる」ことを意味します。
IoT分野は今後も市場が拡大していくと予想されています。
現在、多くの Node.js 向けライブラリが提供されるなど、Node.js で IoT開発を行うための環境整備が進んでいます。膨大なデータを処理できる Node.js の特徴を活かした開発といえるでしょう。
JavaScriptでプログラムを書く
Node.js は JavaScript で記述できるため、JavaScript のスキルがあれば、PHP や Python を使わずにネットワーク通信などのサーバサイドの開発も行えます。
CSSに変換する
Node.js には標準出力機能があるため、TTF フォントを CSS に変換できます。これにより、小さいファイルを CSS に取り込めるので、開発効率を上げられます。
メリットは「高性能処理」
Node.js は軽量で効率よく作業できると多くの人から支持を得ていますが、これには主に大量処理に強い「ノンブロッキング I/O方式」とリアルタイムで処理が可能な「イベントループ」の影響が大きいです。
「C10K問題」
C10K問題は、「Client 10K(=1万)問題」の略語で、サーバへの同時接続台数が1万台を超えるとハードウェアに余裕があったとしても処理速度が遅くなるという問題です
この問題の原因はいくつかありますが、そのうちの一つがプロセス数の上限です。
プログラムには「同期処理」と「非同期処理」がありますが、一般的なプログラムは「同期処理」といって、コンピュータはタスクが複数ある場合、上から順に1つずつ実行していきます。そのため、上のタスクが完了するまで下のタスクを実行できないため、タスクが多いほど処理に時間がかかってしまいます。
この問題を解決するのが「ノンブロッキング I/Oによる非同期処理」です。
ノンブロッキングI/O方式による非同期処理
ノンブロッキング I/O方式では、上のタスクが完了していない状態でも次のタスクを開始できるので大量のアクセスがあった場合でも処理できます。
これにより、Webサイトの表示速度も向上し、ユーザにとって使いやすくなります。
Node.js はこのノンブロッキング I/O方式を採用しており、大量のアクセスにも対応できます。
リアルタイムで処理可能
「シングルスレッド」によっても Node.js の処理能力が向上します。
シングルスレッドはプログラムを実行する際に、1つずつ処理を行っていくことを指します。シングルスレッドではメモリ消費を抑えられます。反対に同時に複数の処理を行うことは「マルチスレッド」といいます。
これでは大量のアクセスを制御するのが難しいですが、Node.js が非同期処理であるため、少ないメモリ消費量で多くのアクセスがあっても、リアルタイムでレスポンスが可能になります。
LINE や Twitter、Instagramといった一度に多くのアクセスを受けるリアルタイム性の高いアプリ開発に適しており、Node.js はチケット予約サイトやチャット機能の開発にも用いられることが多いです。
Node.jsのデメリット
大規模開発に不向き
Node.js を用いてアプリ開発を行う場合、規模の大きいものは避けた方が良いでしょう。
Node.js は、比較的小規模でリアルタイム性が必要なアプリケーション開発に適しています。
大規模な開発を行う場合は JavaScript の代替言語といわれる TypeScript がおすすめです。
TypeScript では型を指定する必要があるため、エラーチェックを厳密に行えるというメリットがあります。
対応するサーバが少ない
現状としては、Node.js に対応しているサーバはそう多くはありません。そのため、サーバが Node.js に対応していない場合、別途仮想環境を作って Node.js を動かす必要があります。
JavaScriptとの互換性がない
Node.js とクライアントサイドの JavaScript は同じ JavaScript ではありますが、処理上の互換性がないため注意が必要です。
そのため Node.js 独自のルールなどを新たに学習する必要はありますが、JavaScript のスキルがあれば学習コストは少なく済みます。
Node.jsのインストール方法
Node.jsの公式サイトで利用している OS にあったインストーラをダウンロードし、実行しましょう。
Windows と macOS 用のインストーラ、Linux 用のソースコードが提供されています。
インストーラの指示に従っていけばインストールが完了します。
同じ Windows のインストーラでも 32-bit と 64-bit の 2種類があるので、事前にお使いのパソコンのスペックなどを確認しておきましょう。