Node.JSとは何か、そしてそれは何に使われるのか?
もしウェブ開発をしているなら、いつかはJavaScriptを学んで書かなければならないでしょう。Nodeは、サーバーとクライアントサイドの言語を統一することで、ウェブアプリケーション開発を簡素化することを目的としています。
ノードとは何ですか?
Node.JS(一般にNodeと呼ばれる)は、ウェブブラウザの外でJSコードを実行することを可能にするJavaScriptランタイムです。Nodeは、GoogleのV8 JavaScriptエンジンを基に構築されており、Chromeでのプロセッシングに使用されるのと同じエンジンです。
アプリケーションの構築、最新のウェブアプリフレームワークとの作業、サーバーサイドスクリプトとしてのJSの使用に一般的に利用されます。実際、Nodeでは.jsファイルを実行することができます。
node実行する方法に似たコマンド
.py
ファイルと一緒に
python:
node main.jsJavaScriptコードは、Nodeで実行すると少し異なります。まず第一に、DOM(ウェブページの読み込まれたHTML)がないため、HTML要素にアクセスしたり、jQueryのようなライブラリを効果的に使用したりすることはできません(ただし、代替手段はあります)。しかし、システムリソースにアクセスでき、ファイルの読み書き、ネットワーク接続の確立、さらにはアプリケーションの提供もできます。
Node.jsは、Electronと呼ばれるフレームワークを使用してデスクトップアプリを構築するためにも使用されます。ElectronはSlack、Discord、Visual Studio Code、Skypeを支えています。本質的に、Electronはデスクトップ用に設計された軽量バージョンのChromeを実行し、アプリ自体は実際にはウェブアプリです。しかし、その結果として、Electronアプリは非常にRAMを消費し、ネイティブのアプリよりも若干パフォーマンスが劣りますが、そのトレードオフはすべてのオペレーティングシステムとウェブ全体での一貫性のためにしばしば行われます。
ノードエコシステム(npmモジュール)
Node自体は素晴らしいですが、npm、すなわちNodeパッケージマネージャーがなければ、今日のNodeの位置にはないでしょう。npmはNodeをフレームワークやプラグインで拡張可能にし、コードを簡単にインストールして新しいプロジェクトに組み込むことを可能にします。
例えば、スクリプト作成中で外部リソースにPOSTリクエストを送る必要があるとします。JSの組み込みメソッドfetchを使用することもできますが、プロミスを使用し、使いやすいaxiosを使うこともできます。プロジェクトにaxiosを追加したい場合は、スクリプトを自分のフォルダに移動して、次のコマンドを実行する必要があります:
npm init
npm install axios
これにより、プロジェクトの設定やインストールされたパッケージを追跡するための package.json というファイルが作成されます。 npm install コマンドを実行すると、ダウンロードされたモジュールを保存する node_modules というフォルダーが作成されます。注意が必要なのは、このフォルダーは多くのモジュールを含む大規模プロジェクトでは非常に大きくなる可能性があるということです。
スクリプトでaxiosを使用するには、この行を最初に置きます:
const axios = require('axios');あるいは、ES6構文では:
import axios from 'axios';
これは node_modules からモジュールをインポートし、スクリプトがそれにアクセスできるようにします。そこから、プロジェクトの一部として、それが作成した別の関数のように使用できます。
Axiosは便利なnpmユーティリティの基本的な例です。おそらく、React、Angular、またはVueのような他のモジュールについて聞いたことがあるでしょう。これらはすべて、ブラウザで動作するインタラクティブなアプリを構築するために使用される完全なウェブアプリケーションフレームワークです。これらのフレームワークで構築されたアプリは一般に「Nodeアプリ」と呼ばれます。最終的な製品はどの古いウェブサーバーでも配信できる静的HTMLであるため、実際にはNodeで実行されてはいませんが、開発にはNodeが使用され、パッケージはnpmを介してNodeエコシステムからインストールされます。
結局のところ、すべてはJavaScriptです。多くの場合、開発コードはES6のような「次世代」JavaScriptを利用し、WebpackとBabelを使ってクライアントに提供できる「bundle.js」という1つの大きなファイルにコンパイルされます。
NodeはnginxやApacheとどのように連携しますか?
Node自体はnginxやApacheと直接インターフェースしません。Nodeが行うのは、.jsファイルを実行することだけです。しかし、Reactや他のフレームワークで構築されたNodeアプリは、通常のHTMLページとは少し異なる動作をします。
Reactを使用すると、基本的に空のHTMLページが提供され、そのページがbundle.jsファイルを読み込みます。このバンドルファイルは、他のJavaScriptファイルと同様に動作し、nginxやApacheをWebサーバーとしてホストすることができます。このバンドルはReactを読み込み、Reactは自身をウェブページにレンダリングし、あなたのコンテンツを表示します。すべてのコンテンツはバンドルファイルに含まれています。
注意すべきことは、Expressという人気のライブラリです。Expressはウェブコンテンツを提供し、HTTPサーバーとして機能することができます。これは、NodeベースのREST APIを作成するためのルーターとして一般的に使用されます。Expressはポートでリッスンし、リクエストを別の関数に転送し(通常はデータベースのような別のリソースにアクセスします)、その後HTTPレスポンスを返します。
この場合、静的コンテンツに使用するnginxサーバーの背後にExpressを配置し、すべての/apiルートをExpressにルーティングします。これにより、ウェブアプリは外部リソースにアクセスし、Nodeのサーバーサイドスクリプティングの能力やデータベースとのインターフェース機能をフルに活用できます。/apiルートに対してnginxをリバースプロキシとして使用し、その他の静的コンテンツのウェブサーバーとして使用することができます。
しかし、ExpressはWebサーバーではありません。この例ではnginxの代わりにはなりません。一時的な開発用のシンプルなExpressサーバーや、あまりトラフィックのないシンプルなページをセットアップするには非常に便利ですが、nginxやApacheのようなネイティブアプリと比較するとパフォーマンスは大きく異なります。実際のWebアプリケーションを構築している場合は、nginxで提供し、ExpressはAPIを提供するためにのみ使用してください。
私のウェブサイトにNodeを使うべきですか?
ウェブアプリを作っていますか?もしそうなら、Nodeを真剣に考えるべきです。代わりの選択肢としては、Ruby on Rails、PHPのLaravel、PythonのDjangoがあります。しかし、Nodeは圧倒的に大きなコミュニティを持ち、フレームワークに関しても多くの選択肢があります。Ruby on Railsが気に入らないなら、別の言語を学ばずにそれに縛られてしまいますが、ReactからVueへの移行ははるかに簡単です。なぜなら、どちらもJavaScriptだからです。
ウェブアプリを作っていないのであれば、Nodeは必要ないでしょう。静的ページ向けではありません。確かに使用することはできますが、大きな利点は得られません。静的(またはほとんど静的)サイトにReactのようなフルウェブフレームワークを使用する予定であれば、再考することをお勧めします。なぜなら、Reactはサイトに多くのオーバーヘッドをもたらすからです。サーバーサイドレンダリングなしでは、Reactの読み込み時間は一般的に非常に遅くなりますが、長時間のセッションを想定したウェブアプリケーションには問題ありません。しかし、ブログや良いSEOを求めるものには適していません。バニラJSは、特にjQueryの助けを借りることで、かなりのDOM操作が可能です。

