Node.js とは?
ブラウザ上という制限された環境でしか動けなかったJavaScriptを、PythonやRubyのように OS上で 動かせるようにしてくれる JavaScript実行環境 が Node.js。
OSにNode.jsをインストールすると node.exe ができる。
node.exeはJavaScriptコードを 実行するアプリケーション (JavaScript実行環境)。
Node.jsではJavaScriptでOSの機能にアクセスするプログラムを組むことができる。
つまりブラウザ上で動作していたときはできなかった自由なファイルの読み書きやネットワーク通信などのOSの機能を扱える。
Node.jsは元々 大量の同時接続をさばけるネットワークアプリケーションの構築を目的 に設計されたJavaScript環境。
サーバサイド のJavaScript実行環境として紹介されることが多いが、現在では クライアントサイドJavaScript の開発環境としても広く利用されている。
Node.jsを使う目的
新しい仕様のJavaScriptまたはTypeScriptでクライアントサイドのプログラムを書く
ES2015以降の JavaScriptは便利な機能がたくさん仲間入りしたが、既存のブラウザがその仕様に追いついてこれないという問題が発生した。
これを解決するために登場したのが 「新しい仕様で書いたJavaScriptファイル」を機械的に「旧仕様(ES5)のJavaScriptファイル」に変換する 手法。
この 変換を行うツール(トランスコンパイラ) の現在の主流がBabelであり、それを動かすための 環境として Node.jsがよく選ばれている。
Webアプリケーションを作る
モバイル/デスクトップ用のアプリケーションを作る
フレームワークはモバイルアプリケーションであればReact Nativeが、デスクトップアプリケーションであればElectronが使われることが多い。
その他
ウェブサイトのアセットをバンドル(webpack)する
SassをCSSに変換(node-sass)する
テストツール(Jest)やコード検証ツール(ESLint)を使う
開発用の簡易Webサーバ(webpack-dev-server)をローカルで立てる
静的サイトをビルド(Gatsby)する
上記のようにNode.jsは様々な用途で使われている。
Node.jsが得意なもの: リアルタイムWeb
リアルタイムWeb などの分野はNode.jsがとても強い。
リアルタイムWebとは、リアルタイムな反応が必要なWebの分野のこと。
FacebookのメッセージやGoogleスプレッドシートなど。LINE、Twitter、instagram、snapchat、Paypalなどもリアルタイム性が高い例。各種チャットツールも。
Node.jsでは「新しい情報が来た!」と知らせてくれる機能を割と簡単に実装できるので。
Node.jsが得意とするもの:多数のアクセスがある場所
Node.jsの第一目標
スケーラブルなネットワーク・プログラムを作成するための簡単な方法を提供すること
スケーラブルというのは拡張可能という意味。
JavaやPHPでは、接続ごとに新しいスレッドが作られる。8GBのRAMで計算すると、最大ユーザー数は5000名以下しかアクセスができなくなる。これを増やそうと思ったら、コンピュータを増やすしかない。
Node.jsはこの問題を解決する数少ないプログラミング言語。シングルスレッドで非同期処理を行い、この問題に対応できる。
ただし、単純な処理以外にはそこまで強くない。一概に速度が速いとは言えない。
Node.jsを使うときの注意点
Node.jsは小規模で機動性の高いWebアプリケーションを使うのが無難。
特に、リアルタイム性が必要なアプリに最適。