Node.jsは、JavaScriptをクライアントサイド・サーバーサイドのどちらにも使える環境を作れます。ウェブサーバーやAPIサーバー、ストリーミングサーバー、リアルタイム通信アプリケーションなど、さまざまな種類のアプリケーションの開発に利用できます。本記事では、Node.jsの基本や「できること」に加えて、メリット・デメリットを解説します。Node.jsとはNode.jsは、Googleが開発したV8 JavaScriptエンジンを使用し、サーバーサイドのJavaScriptアプリケーションを実行するためのランタイム環境です。わかりやすくすると、本来ブラウザ上でのみ動作するJavaScriptを、パソコン上で実行できる環境を作れるということです。これにより、ブラウザ上では実現できなかったサーバーサイド(OS機能等)へのアクセスを実現し、自由にファイルの読み書きやネットワーク通信を実現できます。また、Node.jsでは、高速でスケーラブルなネットワークアプリケーションを開発するための豊富なツールとライブラリが提供されているのも特徴の一つです。そのため、ウェブサーバーやAPIサーバー、ストリーミングサーバー、リアルタイム通信アプリケーションなど、さまざまな種類のアプリケーションの開発に利用できます。JavaScriptとは?JavaScript(ジャバスクリプト)は、動的なWebページの作成やWebアプリケーションの開発などに利用されるプログラミング言語です。HTMLやCSSと共に利用され、ウェブサイトを作る際に用いられる方法が一般的でしょう。シンプルな記述かつ柔軟な処理を実現でき、Node.jsと同様に豊富なライブラリやフレームワークが提供されているのも似た特徴です。しかし、先述しましたが基本的にはブラウザ上でのみ動作し、パソコン上で動作させるためには専用の環境構築が求められます。Node.jsはサーバーサイドJavaScriptと呼ばれるNode.jsは、サーバーサイド(つまりサーバー側で動くもの)でJavaScriptを実行できることから、「サーバーサイドJavaScript」と呼ばれます。サーバーサイドとクライアントサイドのコードを同じ言語で記述でき、シンプルに開発できることで依頼者・開発者の双方にとって便利かつ明瞭な環境を作り上げられます。Node.jsをつかってできることNode.jsをつかってできることの代表例として、以下が挙げられます。サーバーの構築・運用Webアプリやスマホアプリの開発IoT分野の開発サーバーの構築・運用Node.jsによってサーバーサイドでJavaScriptを実行できれば、サーバーの構築・運用を実現できます。ブラウザ上でのみという制限がなくなることで、クライアントサイドからのリクエストに対し、HTML・CSS・JavaScriptなどを送れます。Webサーバーとしての役割を担い、クラウドや仮想サーバー上でも動作することから、オンプレミスと比べて柔軟にスケールアップ・スケールダウンできる点も魅力的です。Webアプリやスマホアプリの開発Node.jsを使うと、Webアプリやスマホアプリの開発も行えます。フロントエンド・バックエンドの両方を扱えることで、シンプルに開発できるためです。また、大量のアクセスにも柔軟に対応し、リアルタイムの処理もできますから、スマホアプリの開発にも向いています。IoT分野の開発IoT分野の開発は、リアルタイムでデータを処理を求められる場合がありますから、膨大な量の処理に対応できるNode.jsが採用される傾向にあります。また、Node.jsは、JavaScriptによる簡単な記述でサードパーティ製のモジュールやAPIを利用でき、IoT分野でよく行われるデータの取得・処理・制御へ柔軟に対応できるのもポイントです。Node.jsのメリットNode.jsのメリットは、以下が挙げられます。大量アクセスに強いC10K問題を解決できるクライアントサイドとサーバーサイドでJavaScriptを使える大量アクセスに強いNode.jsは、処理速度が早く、大量のアクセスに耐えうる環境を作れます。これは非同期処理によって、実行中のタスクがあっても別のタスクを実現できる特徴によって、特定のイベントが発生した際にも対応でき、リアルタイムでのデータ処理が実現できるためです。同時アクセスによる利用が多いWebアプリや、スマホアプリの開発に向いているのも、このアクセスに強いメリットが影響していると考えられます。C10K問題を解決できるNode.jsは、C10K問題を解決できるのもメリットの1つです。C10K問題とは、クライアントが10,000以上(10K以上)に達した際、ハードウェアの性能に余裕があっても、レスポンス性能が下がる問題を指します。主にCPUのリソースが不足すること、OSで決められている同時接続を超えること、などが原因とされます。Node.jsは、イベント駆動型(特定のアクションに対する処理を実行)であり、非同期処理によって複数のタスクを同時に対応できる特徴からこうした原因になりにくい特徴を持ちます。ハードウェアの性能に余裕があっても、内部的な問題でC10K問題は発生するため、Node.jsの特徴によって発生の確率を下げられるという形でメリットが得られます。クライアントサイドとサーバーサイドでJavaScriptを使えるNode.jsは、JavaScriptをクライアントサイド・サーバーサイドのどちらでも使用できるため、両方で同じ言語を使用でき、開発効率を高められるのがメリットです。また、Node.jsには、NPM(Node Package Manager)というパッケージ管理システムがあり、ライブラリやモジュールの管理が容易になるのも利点です。Node.jsのデメリットNode.jsのデメリットは、以下が挙げられます。対応サーバーが少ない定期的なアップデートが求められる開発の際に知識が必要となる対応サーバーが少ない一般的に、Node.jsは対応サーバーが少ないとされています。これは、国内で提供されている「共有レンタルサーバー」において、WordPressでよく使われるPHPに加えて、利用率の高いPythonおよびRubyに対応していてもNode.jsは使えないといったことがよくあるためです。ただ、VPS(仮想専用サーバー)かつ「root権限がある」状態なら問題なく使えます。そのため、Webアプリやスマホアプリ等の開発では大きな問題にならないでしょう。定期的なアップデートが求められるNode.jsはオープンソース(一般的に配布)されているものであり、定期的なアップデートによって最適なセキュリティを保つ必要があります。また、アクセス制限およびデータ暗号化などのセキュリティにおけるベストプラクティスを遵守しておくと、さらに高い水準で運用できます。開発の際に知識が必要となるNode.jsはメリットが多い一方で、開発の際に以下に挙げた知識が必要です。シングルスレッドによるパフォーマンスへの影響度コールバックのネストによるコードの難読化バグの発生による全体への影響(動作しなくなるなど)バージョンアップによる動作不良チームにおけるコードの保守性こうした特徴を考えてフロントエンド・バックエンドの開発を進めましょう。Node.jsをインストールするにはNode.jsをインストールするには、以下の手順でインストーラーをダウンロードします。Node.jsの公式サイト にアクセスダウンロードページに移動OSに対応したインストーラーをダウンロードダウンロードが完了したら、インストーラーを実行し、指示に従うだけでインストールできます。なお、完了したら以下の手順を実行し、正しくインストールされているか確認しておきましょう。コマンドプロンプト(Windows)またはターミナル(Mac/Linux)を起動"node -v"というコマンドを入力Node.jsのバージョン番号が表示されるか確認%3Cdiv%20style%3D%22background-color%3A%20%23eee%3B%20border%3A%201px%20solid%20%23ddd%3B%20padding%3A%2020px%3B%20margin%3A%20auto%3B%22%3E%0A%3Ca%20href%3D%22https%3A%2F%2Fn-v-l.co%2Fcontact%3Futm_source%3Dblog%26utm_medium%3Dbanner%26utm_campaign%3Darticle-inside-banner%22%20target%3D%22_blank%22%20rel%3D%22noopener%22%20style%3D%22display%3A%20block%3B%20text-decoration%3A%20none%3B%22%3E%0A%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fstorage.googleapis.com%2Fstudio-cms-assets%2Fprojects%2FmoWvdvrgq6%2Fs-2400x1000_v-frms_webp_d771ec1e-0c46-4bdc-97d1-622fc7e3da55.png%22%20alt%3D%22Job%20X%E3%83%90%E3%83%8A%E3%83%BC%22%20style%3D%22width%3A%20100%25%3B%20height%3A%20auto%3B%22%3E%0A%3C%2Fa%3E%0A%0A%20%3Cp%20style%3D%22color%3A%20%23555%3B%20line-height%3A%201.6%3B%22%3ETechUnit%EF%BC%88%E3%83%86%E3%83%83%E3%82%AF%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%EF%BC%89%E3%81%AF%E3%80%81%E6%9C%88%E9%A1%8D%E5%88%B6%E3%81%A7%E9%96%8B%E7%99%BA%E6%94%AF%E6%8F%B4%E3%82%92%E8%A1%8C%E3%81%86%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A7%E3%81%99%E3%80%82%3C%2Fp%3E%0A%20%3Cdiv%0A%20%20%20style%3D%22margin-top%3A%2020px%3B%20padding%3A%200%3Bbackground-color%3A%20%23fff%3B%20margin-bottom%3A%2010px%3B%20padding%3A%2010px%3B%20border-radius%3A%205px%3B%20box-shadow%3A%200%202px%204px%20rgba(0%2C0%2C0%2C0.1)%3B%22%3E%0A%20%20%20%3Cul%20style%3D%22list-style%3A%20none%20!important%3B%20%22%3E%0A%20%20%20%20%20%3Cli%3E%E2%9C%94%20%3Cspan%20style%3D%22color%3A%20red%3B%22%3E%20%E9%96%8B%E7%99%BA%E3%81%8C%E9%80%B2%E3%81%BE%E3%81%AA%E3%81%84%3C%2Fspan%3E%3C%2Fli%3E%0A%20%20%3Cli%3E%E2%9C%94%20%3Cspan%20style%3D%22color%3A%20red%3B%22%3E%20%E8%A6%81%E4%BB%B6%E3%81%8C%E6%B1%BA%E3%81%BE%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E6%9F%94%E8%BB%9F%E3%81%AB%E9%80%B2%E3%82%81%E3%81%9F%E3%81%84%3C%2Fspan%3E%3C%2Fli%3E%0A%20%20%3Cli%3E%E2%9C%94%20%3Cspan%20style%3D%22color%3A%20red%3B%22%3E%E4%BB%8A%E4%BE%9D%E9%A0%BC%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E9%96%8B%E7%99%BA%E4%BC%9A%E7%A4%BE%E3%81%AB%E4%B8%8D%E6%BA%80%E3%81%8C%E3%81%82%E3%82%8B%0A%3C%2Fspan%3E%3C%2Fli%3E%0A%20%20%20%3C%2Ful%3E%0A%20%3C%2Fdiv%3E%0A%0A%20%3Cp%20style%3D%22color%3A%20%23555%3B%20line-height%3A%201.6%3B%22%3E%0A%20%20%20%3Cspan%20style%3D%22color%3A%20%23007bff%3B%20font-weight%3A%20bold%3B%22%3E%E8%B2%BB%E7%94%A8%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%AA%E3%81%84%E3%81%94%E7%9B%B8%E8%AB%87%E3%81%AE%E6%AE%B5%E9%9A%8E%E3%81%A7%E3%80%81%E3%82%B3%E3%83%B3%E3%82%B5%E3%83%AB%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%A1%8C%E3%81%84%E3%80%81%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%AF%8E%E3%81%AB%E6%9C%80%E9%81%A9%E3%81%AA%E3%83%81%E3%83%BC%E3%83%A0%E3%82%92%E3%81%94%E6%8F%90%E6%A1%88%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2Fspan%3E%0A%20%3C%2Fp%3E%0A%3Cp%20style%3D%22color%3A%20%23555%3B%20line-height%3A%201.6%3B%22%3E%0A%E3%83%97%E3%83%A9%E3%83%B3%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E6%9F%94%E8%BB%9F%E3%81%AA%E9%96%8B%E7%99%BA%E4%BD%93%E5%88%B6%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%82%E3%81%A1%E3%82%8D%E3%82%93%E3%80%81%E9%96%8B%E7%99%BA%E7%8A%B6%E6%B3%81%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%9F%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%81%AE%E5%A2%97%E6%B8%9B%E3%82%82%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82%3C%2Fp%3E%0A%0A%20%3Cp%20style%3D%22color%3A%20%23555%3B%20line-height%3A%201.6%3B%22%3E%0A%20%20%20%3Cspan%20style%3D%22color%3A%20%23007bff%3B%20font-weight%3A%20bold%3B%22%3E%E7%84%A1%E6%96%99%E7%9B%B8%E8%AB%87%E3%82%82%E6%89%BF%E3%81%A3%E3%81%A6%E3%81%8A%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2Fspan%3E%E3%81%BE%E3%81%9A%E3%81%AF%E3%81%8A%E6%B0%97%E8%BB%BD%E3%81%AB%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%EF%BC%81%3C%2Fp%3E%0A%20%3Cdiv%20style%3D%22text-align%3A%20center%3B%20margin-top%3A%2030px%3B%20margin-bottom%3A%2020px%22%3E%0A%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fn-v-l.co%2Fcontact%22%0A%20%20%20%20%20target%3D%22_blank%22%20rel%3D%22noopener%22%0A%20%20%20%20%20style%3D%22display%3A%20block%3B%20background-color%3A%20%23ff9d00%3B%20color%3A%20white%3B%20padding%3A%2020px%2020px%3B%20text-decoration%3A%20none%3B%20border-radius%3A%205px%3B%20border%3A%201px%20solid%20%23d67c00%3B%20box-shadow%3A%203px%203px%205px%200px%20rgba(0%2C0%2C0%2C0.3)%3Bwidth%3A50%25%3Bmargin%3A%20auto%3B%22%3E%0A%20%20%20%20%20%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%81%AF%E3%81%93%E3%81%A1%E3%82%89%20%20%20%3C%2Fa%3E%0A%20%3C%2Fdiv%3E%0A%3C%2Fdiv%3EまとめNode.jsは、「サーバーサイドJavaScript」とも呼ばれ、軽量性とライブラリの豊富さから以下のことによく利用されます。サーバーの構築・運用Webアプリやスマホアプリの開発IoT分野の開発ウェブサーバーやAPIサーバー、ストリーミングサーバー、リアルタイム通信アプリケーションなど、さまざまな種類のアプリケーション開発に対応しているので、必要に応じて利用しましょう。システム開発でお悩みのことがありましたら、ぜひお気軽にご相談ください。