「Nods.js」はWebアプリケーションやスマートフォンアプリ、IoT関連の開発に適した技術として昨今注目を集めています。Nods.jsは、多くのサーバー管理者を悩ませている「C10K問題」の解決策としても有効です。この記事ではNods.jsとは何かといった基本からメリット、利用シーン、インストール方法までわかりやすく解説しています。
目次
Node.jsとは
Node.jsとはWebページ作成などの際に使われるJavaScriptを、サーバー側で動作させるプラットフォームです。Node.jsについて理解するためには、あらかじめJavaScriptの概要や特徴について知っておく必要があります。
JavaScriptとは、動きのあるWebページを作成する際によく使われるプログラミング言語です。JavaScriptを使うことにより、Webページ上でポップアップウィンドウやスライドショーなどを表示させられます。有名なGoogle MapはWebページ上でマウスポインタを使い自在に操作できますが、これもJavaScriptにより実現できる機能です。
JavaScriptはWebページを作る際のプログラミング言語として、HTMLやCSSと並び世界中でよく使われてきました。ただしJavaScriptは本来Webブラウザ上のみで動作し、それだけではサーバー上で動作させることはできません。Node.jsを使うことで、JavaScriptがサーバー上でも動作できるようになるわけです。
※JavaScriptの特徴やできることなどについては、以下記事でより詳細に解説しています。興味があればあわせてご参照ください。
【超入門】JavaScriptとは?できること・基本をわかりやすく解説
初心者向けに、JavaScriptとは何ができるのかをわかりやすく解説します。 ブラウザ上でWebページをダイナミックに動かすための簡単なプログラムがJavaScriptであり、仕組みや動作、おすすめの学習サイトなど、これからプログラミングを学ぶ方にも理解できるようにていねいに説明していきます。 JavaScriptとは? 最初に 一番身近なのは、Webサイトを表示するブラウザ上で動くプログラム(…
Node.jsを使うメリット
もともとWebブラウザ上で動作するプログラミング言語だったJavaScriptを、Node.jsを使いサーバー上で動作させることでどんなメリットがあるのでしょうか。以下、主なメリットを1つずつみていきましょう。
大量アクセスに強く、リアルタイムでの処理が可能
Node.jsは「ノンブロッキングI/O」方式※を採用し大量なアクセスに強い上に、求められる処理をリアルタイムで実行可能です。Node.jsは一度に多数のアクセスを受け付けるチケット予約サイトや、タイムラグが許されないライブチャットなどの開発によく使われます。
通常、コンピューターは現在の処理が完了するのを待ってから次の処理に移ります。この場合、前の処理が終わるまで次の処理に移れないので、大量なアクセスが生じると処理しきれなくなるのです。ノンブロッキングI/O方式では、前の処理が完了しない状態でも次の処理を開始できます。そのため大量のアクセスも処理できるわけです。
「C10K問題」を解決できる
C10K問題とはサーバー同時接続数が一定数を超えると、ハードウェアのスペック的には余裕があっても処理が遅くなってしまうことです。C10K問題は略語で、より正式には「Client 10K(=1万)問題」と書きます。
C10K問題の原因はいくつかありますが、その1つがプロセス数の上限です。一般的には1つのプロセスごとに1つの処理が行われ、プロセス数が上限に達すると処理に遅延が発生してしまいます。
一方Node.jsではノンブロッキングI/O方式の採用により、1つのプロセスで複数の処理を実行可能です。Node.jsならプロセス上限をはじめとした、C10K問題の原因は避けられます。そのためNode.jsを採用し適切な設定を行うことで、C10K問題を解決できるわけです。
クライアントサイドからサーバーサイドまで同じスクリプトが使える
Webブラウザ上(=クライアントサイド)で動作するJavaScriptは、従来から広く利用されてきました。Node.jsを採用することで、サーバーサイドの開発でも同じJavaScriptが使えるようになります。
もちろんNode.js独自のルールがありますので、クライアントサイドのJavaScriptと全く同じではありません。(Node.jsではサーバー周りの設定も必要となります。)クライアントサイドのJavaScriptをそっくりそのまま活用できるわけではなく、新たに学習しなければならない項目もあります。
ただしサーバーサイドでも使い慣れたJavaScriptの技術を活用できるので、学習コストを大幅に軽減できるのです。その分、エンジニアの負担を抑えられます。
Node.jsを使うデメリット
Node.jsを採用する際は、デメリットも把握しておくことが必要です。以下、Node.jsを使う際に気を付けるべき主なデメリットを紹介します。
対応しているサーバーが少ない
Node.jsに対応しているサーバーは、残念ながら多いとはいえません。仮に利用中のサーバーがNode.jsに対応していない場合、Node.jsを使うために別途VPSを確保するなどの必要が生じる点はデメリットと言えます。
※KAGOYA CLOUD VPSであれば20円/日で利用できるため、Node.jsのテスト環境として利用しやすいです。
特定イベントの処理が重たいと、大量のリクエストが待ち状態となる
Node.jsでよく言われる特徴の1つとして、「シングルスレッド」※で動作する点があげられます。そのためサーバーに対する接続数が増えても、メモリが浪費されません。
その反面、特定のイベントに関する処理が重たい場合、大量のリクエストが待ち状態になってしまう点は注意が必要です。その結果、仮にシステムエラーが発生するとサーバーがダウンしてしまう可能性があります。
※ 「シングルスレッド」とはプログラムを実行する際、同時に1つの処理しか行わないことです。反対に複数の処理を同時に行うことを「マルチスレッド」と言います。
Node.jsの主な利用シーン
Node.jsはそのメリットを活かし、以下のようなシーンでよく使われます。
- Webサーバーの構築と運用
サーバーサイドで動作するNode.jsを利用し、Webサーバーを構築することが可能です。Node.jsによって構築されたWebサーバーは、大量のアクセスが発生しても比較的軽快に動作します。 - Webアプリやスマートフォンアプリの開発
Node.jsは大量アクセスに強くリアルタイムの処理に適していることから、Webアプリ・スマートフォンアプリの開発にもよく使われます。たとえば同時に多くのユーザーが利用し、リアルタイム性が重要なスマートフォン用ゲームアプリの開発は、Node.jsが使われる代表例の1つです。 - IoT分野の開発
Node.jsは、IoT機器から集められる膨大な量のデータを処理するのに適しており、IoT分野の開発にもよく採用されています。
Node.jsのインストール方法
Node.jsのインストールは簡単です。以下公式サイトのURLから、利用中のOSにあったインストーラをダウンロードして実行します。(「LTS」「Current」という2種類のメニューがありますが、公式が推奨している「LTS」の方を選んでください。)
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
あとはインストーラの指示に従い作業を進めていけば、インストールが完了します。
インストールの完了後、Windowsであれば以下手順でnode.jsの実行が可能です。
- キーボードの「Windowsキー」を押しながら「R」ボタンを押す
- 「ファイル名を指定して実行」メニューが表示されるので、検索欄に「node」と入力し「ok」ボタンをクリックする
コマンドプロンプトの黒い画面が表示され、node.jsが操作できるようになります。
Node.jsの学習に役立つサイト・書籍
Node.jsはWebサイトや書籍を使って詳しく学ぶことができます。ここではなかでもおすすめのWebサイトや書籍を紹介するので参考にして下さい。
- 【Webサイト】ドットインストール
1回3分程度の動画で、手軽にNode.jsの知識を学ぶことができます。Node.jsを使うのに必要なJavaScript用の講座もあるので、初心者の方はあわせて利用するとよいでしょう。
- 【Webサイト】Udemy
Udemyは、様々なジャンルのオンライン学習講座が集まるプラットフォームです。Node.jsに関しても、基本的な講座から実践的な講座まで幅広く公開されています。
Udemy is an online learning and teaching marketplace with over 250,000 courses and 73 million students. Learn programming, marketing, data science and more.
- 【書籍】Node.js超入門
Web開発の仕組みから、Node.jsによるアプリケーション作りまで体系的に学べる書籍です。2018年に発売された「第2版」に続き2020年に「第3版」が発売開始され、掲載情報が刷新されています。
- 【書籍】ハンズオンNode.js
書名のとおりNode.jsをハンズオン(体験学習)形式で学べる書籍です。開発に関する一般的な知識があるユーザー向けですが、仕事としてアプリケーション開発を行うのに必要な知識がまとめられています。
まとめ
Node.jsは、サーバーサイドでJavaScriptを使うためのプラットフォームです。Node.jsは大量アクセスに強い上にリアルタイムでの処理が可能で、スマートフォンアプリ開発やIoT開発などの分野で利用されます。ノンブロッキングI/O方式を採用し、1つのプロセスで複数の処理を実行できることなどからC10K問題の解決策としても有効です。
一方でNode.jsは対応サーバーが少ないため、利用する際は仮想サーバーなど別環境を確保しなければならない点はデメリットといえます。シングルスレッドで動作することで、特定イベントの処理が重いと他のリクエストが大量に待ち状態となる可能性がある点も注意が必要です。
開発・検証・プログラミング学習に。無駄なコストもかけたくないあなたにおすすめのVPS
カゴヤのVPSは初期費用無料でアカウント登録さえしておけば、必要なときだけ日額課金でサーバーを立ち上げ可能!料金は使った分だけ。