# Node.js と JavaScript の違いについて ## Node.jsとJavaScriptの違い ・JavaScriptはフロントエンド、Node.jsはサーバーサイドで利用される ・JavaScriptはブラウザ側で実行され、Node.jsはサーバー側で実行される ## Noe.jsとは 大量の同時接続をさばけるネットワークアプリケーションの構築を目的に設計されたJavaScript実行環境。 JavaScriptでWebアプリケーション(Webサーバ)が作れるという特徴からNode.jsは「サーバサイドのJavaScript実行環境である」としばしばいわれている。近年ではBabelやwebpackなどを用いた「ブラウザで実行するJavaScript」を開発するための環境にもNode.jsが使われている。 ### なんでNode.jsが使われているのか 1. 新しい仕様のJavaScriptまたはTypeScriptでクライアントサイドのプログラムを書きたい。 2. Webアプリケーションを作りたい。 3. モバイル/デスクトップ用のアプリケーションを作りたい。 #### 新しい仕様のJavaScriptまたはTypeScriptでクライアントサイドのプログラムを書きたい。 JavaScriptは年々仕様が更新され、どんどん新しい機能が増えている。特にES2015というバージョンではそれまでにはなかった便利な機能がたくさん仲間入りした。 しかしJavaScriptの仕様を新しくしても既存のブラウザがその仕様に追いついてこれないという問題が発生する。 これを解決するために登場したのが「新しい仕様で書いたJavaScriptファイル」を機械的に「旧仕様(ES5)のJavaScriptファイル」に変換してしまう手法。 この変換を行うツール(トランスコンパイラ)の現在の主流がBabelであり、それを動かすための環境として現在よく選ばれているのがNode.jsである。 #### Webアプリケーションを作りたい。 通常使われるApacheやnginxのようなWebサーバの代わりにNode.jsが直接HTTPリクエストを受け取り、処理をしてくれるので、JavaScriptのコードでサーバサイドの開発もできる。(実際にはNode.jsのみだとWebサーバとしては少し機能が物足りないので、その前段にApacheやnginxをリバースプロキシとして置く構成が多い。) #### モバイル/デスクトップ用のアプリケーションを作りたい。 Node.jsではモバイルアプリケーションやデスクトップアプリケーションの開発ができる。 フレームワークはモバイルアプリケーションであればReact Nativeが、デスクトップアプリケーションであればElectronが使われることが多い。 JavaScriptは元々ウェブサイト用の言語でなのでUIの操作に使われることが多く、UI系のライブラリやフレームワークが洗練され成熟している。その財産を利用してWebサイトと同じようにUIを構築できるというのは大きなメリットになる。 加えてOSの機能を扱うアプリケーションを作成できるので、ブラウザのJavaScriptに比べてできることの幅が広がる。 また、Electronでは同じコードでWindows/Mac/Linuxのアプリが作成(クロスプラットフォーム開発)できるのも特徴の一つ。 Visual Studio Code, Slack, Discord, Twitch, SkypeといったデスクトップアプリがこのElectronでできている。