PROJECT COMPについてお知らせお問い合わせ法人の方はこちら
2022.06.09
記事

JavaScriptでサーバーサイド処理?Node.jsの特徴まとめ

avatarmasa_writer
URLをコピーしました

JavaScriptは、今やフロントエンドの技術として当たり前に利用されている言語です。一方で、その非同期処理を始め「サーバーサイドでの処理もさせたい」と思う人も多いのではないでしょうか。今回はそんなサーバーサイドでの処理が可能になるNode.jsについて、その特徴や覚えておきたいポイントについて紹介していきます。

Node.jsとは

まずは、Node.jsの基本的な部分から見ていきましょう。Node.jsは、基本的な文法などはJavaScriptになりますが、少し特殊な言語になります。

Node.jsはJavaScriptでサーバーサイド処理を行うための実行環境

冒頭でも紹介した通り、Node.jsはJavaScriptによってプログラムを書きます。JavaScriptは、通常ホームページなどに動きを付けたり、リアルタイムにデータをやり取りするために利用するための言語です。

例えば、下記のようなものはJavaScriptで書くことが出来ます。

  • スライダー
  • リンクを押した際にゆっくりとスクロールされる
  • ユーザー入力画面でボタンを押す前のエラーチェック
  • Googleマップなど表示位置を移動したらその都度マップを更新

このような動作は、サイトを表示した後の「ユーザーの操作」によって動作を変え、それを行うためにJavaScriptがあります。

このJavaScriptですが、通常は先程も書いたようなフロントサイドでの処理(画面が表示された後の動作)しか書くことができません。

Node.jsは、JavaScriptをサーバー側で動かすことが出来るようになる実行環境のことです。

なぜJavaScriptでサーバーサイド処理が必要なのか?

通常サーバーサイドの処理はJavaやPHPなどのサーバーサイド言語で行い、フロントサイドの処理をJavaScriptで書くのですが、なぜNode.jsを利用し、サーバーサイドでJavaScriptを使えるようにする必要があるのでしょうか。

大きく分けて理由は2つです。

1つ目は、単純にエンジニアの負荷を下げるという理由です。フロントサイドとサーバーサイドで同じ言語を使うことで、エンジニアは複数の言語を習得しなくて済みます。エンジニア不足が叫ばれる今の日本で、1つの言語でより幅広い業務をこなすことが出来るのは、非常に大きなメリットと言えるでしょう。

2つ目は、「C10K問題」というものです。PHPなどでWEBサーバーとして処理を行う際には、クライアントが約1万台に達すると、Webサーバーのハードウェアに余裕があっても、レスポンスが著しく遅くなるという問題があります。これが「C10K問題」です。

このC10K問題は、誰もがスマホを持っている現代において、円滑にWEBサービスを提供する上で非常に大きな問題になりつつあり、それを解消できる方法の1つとしてNode.jsがあるのです。

Node.jsの3つの特徴

それでは、次にNode.jsの特徴について見ていきましょう。

アクセス数が増えても対応可能「シングルスレッド」且つ「非同期処理」

Node.jsの最も大きな特徴としては、非同期処理が挙げられます。通常、プログラムというのは上から順番に処理が流れ、前の処理が終わってから次の処理が動き出します。これを「同期処理」と言います。

一方で、Node.jsは複数の処理が並行して動く「非同期処理」を採用しています。

そして、プログラミング言語の中には1つのプロセスで複数の処理を行う「マルチスレッド」を採用しているものもありますが、Node.jsではシングルスレッドが採用されています。マルチスレッドは、複数の通信を同時に処理できる一方で、前述した「C10K問題」の原因となっています。

少し難しい話になってしまいますが、「負荷が小さく、複数の処理が非同期(並列)で高速に動く」という事を理解しておきましょう。

小規模/リアルタイム処理が高速

Node.jsでは、Googleが開発したV8というオープンソースの実行エンジンを採用しています。実行段階でコンパイルを行う仕様で、中間ソースを必要としないため、小規模での処理が非常に早く、リアルタイム処理に向いています。

Node.jsが利用されているシステムとして有名なものには、下記のようなサイトやサービスがあります。

  • Walmart
  • LinkedIn
  • Groupon
  • Paypal
  • Uber

いずれも大量のアクセスに対する速度改善が期待されている事が多く、実際にCPUやメモリの負荷の改善・アクセス速度の改善が見られたという報告がされています。

言語自身がWEBサーバーの役割を持っている

通常、プログラミング言語とは別に、運営者はサーバーを用意する必要があります。一般的にはApacheやNginxを導入している企業が多いでしょう。しかし、Node.jsではNode.js自体にWEBサーバーの機能があるため、設定やセットアップの必要がなく、スムーズに開発をスタートできます。

Node.jsを使う上で知っておきたい3つのポイント

実際にNode.jsを使うにあたって、知っておきたいポイントをお話します。

パッケージ管理ツールnpm

Node.jsを利用する際には、npmというツールが必要不可欠です。npmは非常に便利なパッケージ管理ツールで、コマンドプロンプト上で「npm install パッケージ名」で実行するだけで、必要なパッケージをダウンロードすることができます。

通常、Node.jsをインストールする際に一緒にインストールされるため、特別な作業をする必要はなく、そのまま利用できます。

非同期処理async/await

これまでプログラミングで非同期処理を経験したことのない人や、Node.jsが人生で初めてのプログラミングという人は、この非同期処理で苦戦する可能性が高いでしょう。最大の特徴である非同期処理ですが、使い方に少し癖があり、初心者は混乱します。

他の言語ではあまり意識しないですが、Node.jsには非同期で処理が動く関数が多くあります。

例えばSQLの実行は非同期で処理が行われます。このSQLで得た結果を元に処理したい場合などは、SQLが終わるのを待ってから処理を進める必要があるでしょう。

こういった時に、async/awaitを利用します。

簡単な例でいうと
「async function 関数名(引数)」
という形で関数を書き、呼び出す際には
「await 関数名(引数)」
とすることで、同期処理が出来ます。

これだけでも知っておけば、簡単なプログラムでは問題なく記述が可能でしょう。ややこしくなるのでここでは割愛しますが、余裕のある人は「Promise」という概念を理解しておくと、更に綺麗にプログラムを記述することができるでしょう。

オフライン環境ではyarnを使用

前述したnpmは、オフライン環境には対応していません。しかし、実務の中ではセキュリティ面を考慮してオフライン環境で運用するケースも考えられます。

そういった時には、yarnというパッケージ管理ツールを利用することで問題が解決します。npmとは同じpackage.json(パッケージのバージョンなどの情報が含まれるファイル)を利用でき、更に同時に利用できる上、npmで簡単にインストールする事が出来ます。

通常のプロジェクトではnpmだけで十分というケースも多いと思いますが、頭の片隅に入れておく必要はあるでしょう。

まとめ

今回は、Node.jsについて簡単に概要やその特徴をまとめました。高速で並列処理が可能なNode.jsは、アクセスが短時間に集中するような業務用システム(バッチ処理)などで利用されることも多く、これからも高い需要があるでしょう。これからNode.jsエンジニアとして活躍の場を広げたい方は、ぜひ参考にしてみてください。

エンジニア向け給与データサービス
PROJECT COMP は、匿名性を重視した
ユーザ参加型の給与統計データベースサービスです