release:
モダンWEB系エンジニアであれば、フロントエンドで利用されるスクリプト言語だけでなく、サーバサイド・スクリプト言語についてもトレンドとして知っておきたいところです。
それだけでなく、WEB制作に携わるエンジニアとしてサーバサイドJS(JavaScript)を取り扱うことは、競合の少ない市場であり単価の高い市場に身を置けるチャンスです。
そこで、この記事では、改めてサーバサイドJSの基本とともに、JavaScript実行環境の代表格「Node.js(ノードジェイエス)」について解説します。
目次
WEB系エンジニアはサーバサイドJSの理解が必須
前述の通り、WEBサイトの開発にあたってJavaScript実行環境を利用することは、今や必須といっても過言ではありません。
それは、エンジニアにとってもITベンダーにとっても同様で、特にサーバサイドJSを利用すれば、数々のメリットを得られます。
サーバサイドJSとは何かを解説する前に、基本となるJavaScriptやサーバサイド言語とは何かについて解説します。
JavaScriptとは
JavaScriptとはプログラム言語の1種であり、WEBブラウザとサイトやサービス相互間のやり取りを円滑にするために、現状ほぼすべてのWEBサイトやWEBサービスで使われています。
WEBサイトのデザインやページを構成する全てのオブジェクトを操作でき、JavaScriptがあることで、WEBサイトやWEBサービスはブラウザ上でシームレスな動きや挙動、描画計算などを表現できるのです。
サーバサイド言語とは
そもそもプログラムを実行する場所は、PCやスマートフォンなどのブラウザ側、つまりWEBサイトに訪れた利用者側(クライアントサイド)と、サイトなどの提供側(サーバサイド言語)の2つに分かれています。
そのうち、サーバサイドに設置するプログラムをサーバサイド言語と呼び、WEBサーバ上にクライアントサイドからプログラムの実行が要求されるたびに、その結果をWEBブラウザに対して送信します。
サーバーサイド言語の代表格はサーバーサイドJSの他にPHP、 Python、 Ruby、 C#などがあります。
JavaScript実行環境「Node.js」
通常、クライアントサイドとサーバサイドのプログラミングには別々の言語が用いられます。
ただし、JavaScript実行環境ができたことによって、JavaScriptは飛躍的に使い勝手が向上しました。
JavaScript実行環境ができたことにより、従来WEBサービスやWEBシステムの開発がPHPベースだったものがサーバサイドJSへと移行し、サーバサイドJSがWEBシステムの中核を担う勢いで成長を遂げたのです。
これは、既存のJavaScriptという概念がサーバーサイドでも取り扱えるようになったことを、エンジニア界隈が好意的に受け止めた結果であるように思われます。
そんなサーバサイドでのJavaScript実行環境の代表格が、Node.js(ノードジェイエス)です。
Node.jsの仕組み
Node.jsとは、V8 JavaScriptエンジンで動作するGoogleChrome用に開発されたサーバサイドJSです。
2009年に作成された当初から、ノンブロッキングI/Oとイベントループの2つのモデルを使っていることから、「軽く」「効率の良い作業ができる」といった多くの評価を得ており、現在のWEB開発現場で広く使われています。
通常Node.jsはシングルスレッドで動作させることができますが、この場合複数の処理を同時に行うことはできません。
しかし、ノンブロッキングI/Oを利用することで、入出力の処理を同期させずに行うことができますので、プログラムの動作を早くしているのです。
Node.jsは、特にWEBサーバの構築にその威力を発揮します。
リアルタイムで複数人の人間が使用するネットワーク・サーバなどに利用しても、プログラム自体が軽量なため動作がもたつきません。
当然、スマホアプリなどモバイル通信速度が異なる複数のユーザーが同時に使用する場合でも、処理がスムーズに行えるのです。
Node.jsのメリット
WEBブラウザ上で動作するプログラミング言語であったJavaScriptを、Node.jsを使ってサーバ上で動作させるメリットは、主に次の通りです。
大量アクセスに強い
先述の通りNode.jsでは、ノンブロッキングI/O方式を採用しています。
通常、CPは現状動いている処理が完了するのを待ってから次の処理に移りますが、ノンブロッキングI/O方式では前の処理が完了していない状態でも次の処理を開始できます。
そのため、大量アクセスに強くリアルタイムの処理が可能となり、規定の時間に一斉に販売を開始する予約サイトを制作したり、タイムラグを極力抑えたいライブチャットの開発などに効果を発揮するのです。
C10K問題を解決する
サーバの同時接続が一定数を越えると、ハードウェア的にはスペックの余裕があっても、処理速度に遅延が発生してしまう場合があります。
これを属に「C10K(Client 10K=1万)問題」と呼び、これまでのシステム開発上の課題とされてきました。
しかし、Node.jsではノンブロッキングI/O方式で複数処理を実行可能ですので、C10K問題も解決できるのです。
フロントエンドからサーバサイドまで一貫性のある開発が可能となる
Node.jsはフロントエンドからサーバサイドまで、同じJavaScriptが動作します。
そのため、これまではフロントエンドでしか活躍できなかったエンジニアも、JavaScriptをマスターしているだけでサーバサイドの開発にも携わることができるようになります。
これは、エンジニアにとってもより高単価を得られるサーバサイドの開発現場で働けるだけでなく、ベンダー側もより広いエンジニア層に求人をかけることができるのです。
Node.jsの使用例
Node.jsのメリットを活かした使用例は、次のようなものが考えられます。
- スマホアプリの開発:これまではJavaやSwiftが主だったスマホアプリの開発ですが、Node.jsでは様々なライブラリが提供されているため、スマホアプリの開発も比較的簡単に行なえます。
- WEBアプリの開発:Node.jsには開発で便利なフレームワークが多数用意され、ゼロからプログラムを書く必要がありません。
- CSSに変換:Node.jsは標準出力でTTFフォントをCSSへと変更が可能なため、小さいファイルをCSSに取り込むことにより開発効率の向上が図れます。
2022年最新版Node.js 18
Node.jsでもっとも最新版となるのが、2022年4月にリリースされた「Node.js 18」です。
Node.js 18は当初Node.js17に代わって、6ヶ月間の「Current」としてリリースされていましたが、2022年10月25日に「LTS(長期サポート)」リリースに昇格し(LTSリリースとしてのコードネームは「Hydrogen」)、その後2025年4月30日までサポートされる予定です。
V8 JavaScriptエンジンがv10.1にアップデートされた他、グローバルフェッチが規定で有効となり、コアテストランナーモジュールも追加されています。
Node.js 18の新機能及び改良点は、次のようなものがあります。
- 「fetch()」がフラグ無しで実行可能になった
- 「server.requestTimeout」のタイムアウト時間のデフォルト値が0~300000(5分)の間で、任意に設定できるようになった
- 標準APIとしてテストランナーが追加され、「test」モジュールを読み込んで利用できるようになった
まとめ
JavaScriptとサーバサイド・スクリプト、そしてサーバサイドJSについて解説するとともに、2022年10月現在もっとも最新版となるサーバサイドJS「Node.js 18」をご紹介しました。
JavaScriptはWEB系エンジニアとしては必須科目であると同時に、サーバサイドJSの開発環境を整えることは、ITベンダーとしても開発の効率化や求人の点でも様々なメリットがあります。
JavaScriptは、ライブラリやフレームワークを組み合わせることで大抵のWEBサイトやアプリケーションは開発できますし、書籍やプログラミングスクールなど情報も充実しているため比較的学習コストもローカロリーです。
これからプログラミングを学習する方であれば、Nodo.jsの学習からはじめてみることをおすすめします。