Node.js
Node.js は 2009年にリリースされた、サーバーサイド JavaScript アプリケーションのプラットフォームです。Web開発をサポートする多くのツールが Node.js で実装されてきたことから、今日ではフロントエンド開発にも Node.js を使うことが多くなりました。クライアント・サーバーともにプログラムを JavaScript で組めるということから、JavaScript の需要の高まりにも影響しています。
.js と表記することから JSライブラリのひとつ・・のような印象を与えますが、「JavaScript 環境」というまったくの別物です。
CONTENTS
概要
これは何?
Node.js は、端的に言うと JavaScript の環境です。一般にJavaScript は、ブラウザがそれを解釈して実行するものでしたが、Node.js という環境があれば、クライアントマシンやサーバーマシンに限らず、様々なプログラムを動かすことが可能になります。
サーバーサイドの JavaScript という説明もできますが、Apacheサーバーの存在を前提に動く PHP とは様子が異なります。Node.js の環境があれば、例えば、ローカルPCの任意のディレクトリをパッケージの置き場として、そこに JavaScript で書いたサーバープログラムを設置して、Webアプリケーションの開発をすることができます。
JavaScript のプログラマにとっては画期的なアイデアであり、現に多くのWebアプリケーションが Node.js の存在を前提に制作されています。
- GoogleTrends Node.js
- Node.js でできること
- Webサイト(Webサーバーをセットで)の制作
- Webアプリケーションの開発
- スマホアプリ、ゲームアプリの開発
- WebAPIの開発
Node.jsの特徴
- シングルスレッド
Node.jsは「同時に一つのことしかできない」シングルスレッドです。Apacheなどのウェブサーバはマルチスレッドなので同時処理が可能。そのメリットは大きいのですが、逆に大量のアクセスがあるとリソースがなくなってしまう問題があり、この臨界点が約10,000件です(C10K問題)。Node.js はこの問題を回避できる点が強みです。 - ノンブロッキングI/O
一般的なシングルスレッドでは、ひとつの処理が終わらなければ次の処理に入ることができず、「待ち時間」が長いと処理効率が下がってしまうのですが、ノンブロッキングI/O というのは、待ち時間の間に次の処理を進める仕組みなので、マルチでなくとも大量のデータ処理が可能になります。 - イベントループ処理
Node.jsはイベントループを採用しています。そのため、複数のリクエストやレスポンスなどの処理は順番にイベントループで処理されていきます。 - Google V8 JavaScript Engine
Node.js は Googleが開発した Google V8 JavaScript Engine を使用して、高速処理を実現しています。 - フロントエンド / バックエンド とも JavaScriptで書ける
これまで JavaScript をバッックエンド(サーバーサイド)で使用することはできませんでしたが、Node.js の登場でそれが可能になりました。もちろん、簡単なWebアプリケーションをローカルで動かすのあれば、すべて Node.js で解決できます。
インストール
Mac へのインストール
有名な存在となり、インストールも簡単にできるようになりました。
- 以下からインストールパッケージをDLしてインストール。
https://nodejs.org/ja/
- Node.js のバージョン確認
インストール後は、ターミナルから以下のコマンドでバージョンが確認できればOKです。$ node -v v11.6.0
- npm のバージョン確認
パッケージマネージャーである npm のバージョンも、以下で確認できます。$ npm -v 6.10.3
MEMO|運用サーバー CentOSへのインストール
完全に個人的なメモです。
- バージョン確認
# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
- Node.jsをインストールするのに必要なパッケージをインストール
# sudo yum install -y gcc-c++ make
- Node.jsをインストール
# sudo yum install -y nodejs
- 動作確認
# node -v v6.14.3
使ってみる
前提|Terminal を使う
Node.js は、Terminal から CUI インターフェイスで作業します。 それ何?という方は、まずは Terminal のページをご確認下さい。
Node.js には、Pythonと同様に2つの利用方法があります。
- スクリプト環境を起動してインタラクティブ(対話的)に使う
- .js ファイルを作成して、これを node コマンドで実行する
以下、それぞれ概説します。
インタラクティブな環境で試す
はじめに、対話的に使う方法から紹介します(Terminal の利用です)。
- node.js を起動します。
$ node >
- コンソールに "Hello Node!" と表示してみます。console.log は JavaScript でおなじみのもので、ターミナルの画面に引数部分を表示します。
>console.log("Hello Node.js!"); Hello Node! undefined >
undefined というメッセージは「関数に戻り値がありません」という意味で、ここでは気にしなくて大丈夫です。
- 同様に、以下のような基本的な動作もご確認ください。
> a=10; 10 > b=15; 15 > console.log(a+b); 25 undefined > var f = (x) => x * x; [Function] > f(10); 100
- 対話を終了するには .exit です。
> .exit $
.js ファイルを作って動かす
カレントディレクトリに sample.js というファイルを作成します。
- エディタ(Atom等)で、以下の1行を入力して sample.js という名前でカレントディレクトリに保存して下さい。
console.log("Hello Node.js!");
- ターミナルから以下のように入力すると、sample.js が動きます。
$ node sample.js Hello Node.js! ← これがプログラムの動作の結果です。
付記:私はどこ?
Terminal で作業していると、今どこ?がわからなくなることがあります。
以下、カレントディレクトリの確認方法です。
$ pwd /Users/XXXX
これは、Usersディレクトリの中の XXXX という場所がカレントディレクトリであることを意味します。普通にターミナルを起動した状態であれば、XXXX の部分はおそらく、あなたのログイン名になっているかと思います。これはFinder(GUI) で見ると、あなたの ホームディレクトリを意味していて、おそらく他にドキュメントやダウンロード、ピクチャ、ミュージックといったフォルダが見えると思います。
pwd の返答が /Users/XXXX/Desktop/NodeSample という場合は、デスクトップ上の NodeSample というフォルダがカレントディレクトリです。
APPENDIX
関連ページ
旧記事:Node.js のインストール|Mac
記事のアーカイブです。時代が進んで話が簡単になったので、以下は読まない方がいいです。
Node.js をインストールするには、パッケージ管理ツールの nodebrew が必要で、そのためには、Homebrew のインストールが必要です。
以下、順にインストールします。
Homebrew のインストール
Homebrew は、macOS用のパッケージマネージャですが、標準では入っていませんので、まずはこれをインストールします。
- 以下のサイトの先頭にあるスクリプトをターミナルから入力
https://brew.sh/index_ja.html$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 以下のコマンドで、バージョンが表示されればOK
$ brew -v Homebrew 1.8.6
nodebrew のインストール
- 以下のコマンドでインストール
$ brew install nodebrew
- 以下のコマンドで、バージョンが表示されればOK
$ nodebrew -v
node.js のインストール
- バージョン候補を確認
$ nodebrew ls-remote > ずらりと表示されます。
- 最新を選んでインストール
$ nodebrew install-binary v11.6.0
注)ファイルが作れない・・的なエラーが出た場合は、以下のようにディレクトリを作成してから再度お試しください。$ mkdir -p ~/.nodebrew/src
- 状況確認
以下のコマンドで、インストールされたバージョンと、実際に動いているバージョンが表示されます。$ nodebrew list v10.0.0 v11.6.0 current: v11.6.0
- パスを通す
インストールしただけでは、ホームからコマンドが通りません。node.js のある場所にパスを通します。$ echo 'export PATH=$PATH:/Users/xxxxx/.nodebrew/current/bin' >> ~/.bashrc xxxxx の部分は User の ホームディレクトリ名
環境変数を書き換えたので、Macの再起動が必要です
- 動作確認
以下のコマンドでバージョンが表示されればOKです。$ node -v v11.6.0
- 参考:Node.js の動作バージョンを選択
以下のようにすると、別バージョンをカレントにすることができます。$ nodebrew use v10.0.0 $ nodebrew list v10.0.0 v11.6.0 current: v10.0.0