悩めるWEB担当者様のための最新ノウハウをお届け

JavaScriptをサーバサイドで動かせる!Node.jsの魅力とは?

nodejs

みなさん、Webアプリケーションを制作する時、サーバサイドはどの言語で書いていますか?
PHP、Rubyなど様々なプログラミング言語がありますが、実は通常クライアントサイドで用いられるJavaScriptもサーバサイドで動かすことができるのです。
それが、JavaScriptのライブラリであるNode.jsです。
このNode.jsは、様々なところで使用されているものになります。
この記事では、Node.jsとは一体何なのか、Node.jsの魅力は何か、Node.jsのメリット及びデメリットについて解説していきます。

クライアントサイドとサーバサイド

そもそも、Webアプリケーションを作る際に使われるプログラミング言語には、「クライアントサイド」で使われるものと、「サーバサイド」で使われるものがあります。
クライアントサイドの言語とは、Webサーバーにアクセスして得られた結果をブラウザで処理する際に使われる言語です。
それに対し、サーバサイドの言語は、ブラウザに結果を渡すためにサーバ内の処理を行う言語のことです。
では、クライアントサイドで使われる言語は、一体どんなものがあるでしょうか?

クライアントサイドで使われる主な言語

クライアントサイドで使われる言語としては、CSSやJavaScriptなどがあります。
CSSとは、カスケーディング・スタイル・シートの略で、HTMLの要素を装飾するのに使用します。

CSSについてはこちらの記事をご覧ください。
【初心者向け】 HTML、CSS、Javascriptの基本を理解しよう

また、JavaScriptは、CSSよりももう少し複雑な処理を行うことができる言語です。
アニメーションなどサイトに動きをつけたり、複雑な処理を行うことができます。

JavaScriptについてはこちらの記事をご覧ください。
【初心者向け】 HTML、CSS、Javascriptの基本を理解しよう

JavaScriptはそのまま使うこともできますが、jQueryなどのライブラリや、Vue.jsなどのフレームワークを用いることで、より簡単に実装することができます。

次にサーバサイドです。

サーバサイドで使われる主な言語

サーバサイドで使われる主な言語は、PHP、Ruby、Pythonなどです。
PHPはCMSの代表格、WordPressでも使われています。

Rubyは日本生まれのプログラミング言語で、日本語の情報が多いため、比較的学習しやすいでしょう。
Ruby on Railsというフレームワークもあります。
Pythonは、機械学習や深層学習を用いた算術演算処理を行うのに使われている言語です。
これらが、サーバサイドで使われる主な言語になります。

Node.jsとは

Node.jsは、通常クライアントサイドで使用するJavaScriptをサーバサイドで動かすことができるものです。
サーバサイドで動かすことができるというと、PHPやRubyなどと同じようなものかと思われるかもしれませんが、厳密には少し違います。
Node.jsは単にサーバサイドでアプリケーションを動かすことができるだけでなく、サーバを構築することができます。
例えば、Node.jsではアクセスされたURLを識別して、そのURLごとに別々の要素を表示させることができます。
これはサーバを構築できるNode.jsならではの特徴です。
では、Node.jsを使うことで、具体的にどんなメリットがあるのでしょうか?

サーバサイドの言語を学習するコストが下がる

JavaScriptをサーバサイドで動かせるということは、サーバサイドの言語、PHPやRubyを学習することなく、クライアントサイドで使うJavaScriptでサーバサイドのコードも書けるということです。
プログラミングを学習し始めた初心者が、Webサイトを作るのにHTMLをとCSSを勉強して、そのあとにJavaScriptを学習して、それからRubyやPHPを習得して…というのは大きな負担となってしまいます。
しかし、Node.jsはクライアントサイドで使うJavaScriptで記述されているので、JavaScriptを習得している人であれば、Node.jsのコツが掴みやすく、サーバサイド言語の学習コストを抑えることができます。
勿論、Node.js独特の記述方法などは学習する必要がありますが、後ほど紹介するように、Node.jsには効率的に記述するためのフレームワークもあります。
ですので、全体としては学習コストが抑えられるでしょう。

Node.jsが使われているシーン

Node.jsは同期通信に適していることもあって、チャットやライブ配信などのサービスで使用されることが多いです。
LINE BotなどもNode.jsで作ることができます。
また、通信してリアルタイムでやり取りする必要があるスマートフォンのゲームなどにも使われています。
画像解析、深層学習、統計解析などの算術演算が必要でなければ、Node.jsで大概のウェブアプリケーションを開発することができるでしょう。

大手IT企業がNode.jsを推薦

Node.jsはYahoo!やMicrosoft、eBay、Linkedinなどの大手IT企業が推薦している言語になります。
それだけ多くのシーンで役立つ技術だということでしょう。

Node.jsの最新バージョン

Node.jsのバージョン番号は、奇数が開発版で、偶数が安定版になっています。
奇数の場合は、最新の機能が実装されている一方で、バグが発生してしまう可能性が高いでしょう。
偶数の場合は、安定版としてサポートされているバージョンになります。
どうしても最新の機能を使いたいということでなければ、開発でNode.jsを使う際は、偶数のバージョンを使うのが良いでしょう。
この記事執筆時点での安定版の最新は10.16.3となっています。

Node.jsの代表的フレームワーク

Node.jsには、いくつかのフレームワークが用意されています。
フレームワークとは、全体の処理の流れが実装されており、その中の一部の具体的な処理を自分で実装する、言わばコードが「型」になったものです。
Node.jsに限ったことではありませんが、プログラミングでは多く登場する記述が存在します。
毎回長い記述をするのは面倒なので、型にしておいて記述を簡単にしてしまおうというのがフレームワークです。
クライアントサイドで使用するJavaScriptにも、Vue.jsなどのフレームワークがあるように、Node.jsにもフレームワークがあります。

Node.jsの代表的なフレームワークは、Express.jsです。
Express.jsはシングル及びマルチページ、各種Webアプリケーションを作成できるように作られています。
Node.jsを使っているエンジニアの多くが、このExpress.jsを使っているので、Express.jsを学習することに損はないでしょう。
Express.jsでは、通常のNode.jsで長い記述が必要だった部分が簡単になるということが多々あります。
では、実際にNode.jsを使うメリットについて見ていきましょう。

Node.jsのメリット

Node.jsはサーバサイドでJavaScriptを動かすことができるというものでしたが、具体的にどんなメリットがあるのでしょうか?
Node.jsのメリットとしては、

      JavaScriptでサーバサイドを記述できる
      ノンブロッキングI/Oである
      同期通信に向いている

という点が挙げられるでしょう。
一つずつ詳細に解説していきます。

JavaScriptで記述できる

一つ目のメリットは、今まで説明してきたようにJavaScriptでサーバサイドを記述できる点です。
プログラミング初心者にとって、プログラミング言語をいくつも覚えることは、かなりの時間と労力がかかってしまいます。
しかし、JavaScriptはクライアントサイドで必ずと言ってよいほど使用します。
Webサイトを制作する時に、JavaScriptを使わないということはほとんどないでしょう。
つまり、JavaScriptの延長で学べるので、学習コストが大幅に下がるでしょう。

ノンブロッキングI/Oである

I/OとはInput/Outputの略で、コンピューターで何らか情報をInputして、処理結果をOutputする、一連の入出力の流れのことです。
Node.jsでは、この一連の入出力の処理がノンブロッキングであるということです。
では、I/Oが「ノンブロッキング」とはどういうことでしょうか。

ブロッキング処理とは、これまでのWebサービスの処理方法で、一つの処理が完了するまで他の処理は行わない、という手法です。
それに対してノンブロッキング処理は、できる処理からやっていく、という手法です。
これだけだとピンとこないと思いますので、家事に例えてみましょう。
あなたが洗濯と掃除機をかけるという処理を行うとします。
洗濯機を回している間に、先に掃除機をかけてしまおうというのが、ノンブロッキング処理です。
反対に、洗濯が終わるまで洗濯機の前でじっと待ち、他の処理をしないのがブロッキング処理です。
どちらが早く家事が終わるかは明白ですよね。
コンピューターにおいてもノンブロッキング処理の方が高速で処理が可能です。
これによってC10K問題(従来のWebサーバは、同時に1万接続があるとパフォーマンスが落ちるという問題)を解決することができるのです。

さらに、ノンブロッキング処理では、処理の過程も確認することができます。
上記の家事の例で言えば、掃除機をかけている途中に、時々洗濯機の前に来て、洗濯機がまだ回っているかを確認することができるということです。
コンピューターは処理を今すぐにできない場合、エラーを返してブロック状態になるのを防ぎます。

同期通信に向いている

前述の通り、Node.jsは同期通信に向いていて、チャットやライブ配信に使われています。
Node.jsには、WebSocket通信を簡単に記述できるSocket.ioというライブラリのおかげで、同期通信が非常にやりやすいという特徴があります。
WebSocketとは、ウェブアプリ(インターネットを介して動作するアプリケーション)で双方向通信を実現するための技術規格のことです。
ここまでNode.jsでサーバサイドを構築するメリットを紹介してきましたが、反対にNode.jsのデメリットは何があるのでしょうか?

Node.jsのデメリット

Node.jsのデメリットとしては、

      大量アクセスに弱い
      技術者が少ない
      Golangが人気になりつつある

という点が挙げられるでしょう。

大量アクセスに弱い

Node.jsはシングルスレッドで処理をする仕組みになっています。
シングルスレッドとは、全ての演算処理を順次行っていくことを意味します。
反対に並行して処理を行っていくことをマルチスレッドといいます。
Node.jsはシングルスレッドなので、一つのリクエストに対して一つのスレッドを立てて処理を行います。
もし大量アクセスがあった場合、スレッドが立たず処理の順番待ち状態になる可能性があります。
しかし、最近はスマートフォンにせよPCにせよ、昔と比べてハードウェアの性能が大きく向上しているので、そこまで問題にならないことも多いでしょう。
寧ろ、マシンパワーの向上で、並行して処理を行うマルチスレッドよりも、シングルスレッドの方が一つの処理が早いこともしばしばあるでしょう。

技術者が少ない

Node.jsを実際の業務で扱った経験のあるエンジニアは、RubyやPHPのそれと比べて少ないというのが現状です。
プログラミング学習サービスにもNode.jsのコースは存在しますし、書籍やWebサイトで学習することができるとはいえ、Node.jsを実際の業務の中で経験しているエンジニアを探すのに苦労する可能性があります。
人材採用の点では他のサーバサイドの言語に比べて苦労するかもしれません。

Golangの登場

最近はサーバサイドの処理において、Googleが開発しているGolangという言語が人気を集めつつあります。
企業によっては、Node.jsよりもGolangを選択するという場合もあるかも知れません。
しかし、Node.jsの強みは、クライアントサイドと同じ言語でサーバサイドを記述できるという点にありますので、今すぐにNode.jsが使われなくなるということは考えにくいでしょう。
算術演算を行う場合には、サーバサイドをPythonで記述する必要もありますが、大概のウェブアプリはNode.jsで開発できるでしょう。

Node.jsとデータベース

Node.jsはJavaScriptで書かれているため、データを管理する際には、RDBではなく、NoSQLを使用するというメリットもあります。
NoSQLでデータベースを構築した時のメリットとしては、JSONでデータを管理すできる、大量のデータを高速に処理することが可能という点が挙げられるでしょう。

JSONとは

JSONとはJavaScript Object Notationの略で、日本語訳するとJavaScriptのオブジェクトの記述書式という意味になります。
要するに、コンピュータにデータを送るためのフォーマットです。
JavaScriptのオブジェクトというのは、関連のあるデータ(プロパティ)と機能(メソッド)をまとめたものになります。
NoSQLでは、データをJSON、つまり「JavaScriptのオブジェクトの記述書式」で保存しているため、データの読み込みが早く、相性が良いというわけです。

Node.jsと相性の良いデータベース

前述した通り、JSONでデータを管理するNoSQLはNode.jsとの相性が非常に良いでしょう。
NoSQLの代表としてはMongoDBが有名です。

高速でデータを処理する際には、MongoDBの採用を検討するのも良いでしょう。
しかし、NoSQLを採用する際に注意点もあります。
曖昧検索や、テーブル正規化などはNoSQLだけでは戦えない(戦いにくい)領域となっているからです。
曖昧検索とは、検索ワードと完全に一致しなくても抽出してくれる機能です。
例えば、「コンピューター」は「コンピュータ」と書いたりしますよね。
曖昧検索では、そのような微妙な表記の違いや、スペルミスでの検索も抽出してくれます。
こういった機能はNoSQLでは苦手な領域です。
自社のサービスで曖昧検索が必要になる場合は、ハイブリッドか、RDBを採用すると良いでしょう。

Node.jsとCMS

ウェブアプリを作る際、サーバサイドとしてNode.jsを採用した場合でも、ブログなどを制作する際にはCMSを導入することになると思います。
例えば、CMSの代表格であるWordPressはPHPで設計されています。
Github上には、Node.jsで記事を投稿することができるnode-WordPressが公開されていますが、各種プラグインはPHPで設計されているので、それを全てNode.jsで管理するのは難しいでしょう。

ウェブアプリをNode.jsで作る際に、CMSをどうするかは悩むポイントでしょう。
通常の画像やテキストの投稿だけであれば、WordPressを採用するのも良いでしょう。
他に様々な機能を追加する場合は、KeystoneJSやButterCMSを採用するのも良いでしょう。
KeystoneJSは、Node.jsのフレームワークであるExpress.jsがベースとなったCMSもあります。
Node.jsの普及に伴って、Node.jsで扱えるCMSとして注目されています。
しかし、KeystoneJSはデータベースとしてNoSQLであるMongoDBが採用されています。
他にはButterCMSも検討の余地があるでしょう。
ButterCMSはNode.jsのみならず、様々なサーバサイド言語で制作できます。
ウェブアプリを制作する中で、Node.jsはJavaScriptのフロントエンドで使われるフレームワーク、Vue.jsと併せて使われることも多いと思います。
特に設計としてシングルページアプリケーションを採用するのであればなおさらです。
シングルページアプリケーションについてはこちらの記事をご覧ください。
SPA(Single Page Application)ってなに?

ButterCMSはVue.jsの公式サイトでも推奨されているCMSになります。
ですので、Vue.jsとの相性も良いでしょう。
Node.jsを使用するなら、こういったCMSの採用を検討するのも良いかもしれません。

まとめ

サーバサイドには様々な言語があります。
Node.jsは、その中でもJavaScriptでサーバサイドを記述できる、ノンブロッキングI/Oで処理が早いという強みがあり、今後も様々なシーンで活躍するでしょう。
書籍やプログラミング学習サービスでの情報も充実して来ているので、比較的学習しやすくなって来ているのも魅力です。
JavaScriptのライブラリやフレームワークと組み合わせることで、大部分のウェブアプリは実装できてしまうでしょう。
これからプログラミングを学習する人は、Node.jsを学習することを検討してみてはいかがでしょうか。

当サイトではこの他にもWebに関するお役立ち情報を多数ご紹介しています。
Web担当者の方、デジタルマーケティングに興味がある方はぜひご覧ください。


広告運用やSEO、解析・Web製作など、当社はWebに関わるベストソリューションをご提供しています。お悩み・ご相談も受け付けておりますので下記のボタンからお気軽にご連絡ください。

関連記事