Node.js を利用する時がきた

しかし ndenv の記事が多い。 ndenv には別途 node-build のインストールが必要という記述もみられてなんかスマートじゃない。 さらに ndenv は時代遅れという記述もある。

[Deprecated] nodenv is better alternative

Please consider to use nodenv. ndenv repository is not maintained actively.

最近はどうやら nodenv というものがあるらしい。node-build は自動で入るのかな。とりあえずやってみた記録を残す。

参考:

homebrew から nodenv のインストール

Homebrew経由でnodenvをインストールします。

$brew install nodenv

正常にnodenvがインストールされたか確認します。

$nodenv -v
nodenv 1.1.2 # ok

とりあえずこれだけで入るには入るようだ。やってみる。

$ brew install nodenv
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
gnutls                                   libtasn1

==> Installing dependencies for nodenv: node-build
==> Installing nodenv dependency: node-build
==> Downloading https://github.com/nodenv/node-build/archive/v4.7.0.tar.gz
==> Downloading from https://codeload.github.com/nodenv/node-build/tar.gz/v4.7.0
######################################################################## 100.0%
==> ./install.sh
🍺  /Applications/Homebrew/Cellar/node-build/4.7.0: 600 files, 684.2KB, built in 10 seconds
==> Installing nodenv
==> Downloading https://github.com/nodenv/nodenv/archive/v1.3.1.tar.gz
==> Downloading from https://codeload.github.com/nodenv/nodenv/tar.gz/v1.3.1
######################################################################## 100.0%
==> src/configure
==> make -C src
🍺  /Applications/Homebrew/Cellar/nodenv/1.3.1: 34 files, 64.9KB, built in 8 seconds
$ nodenv -v
nodenv 1.3.1

うむ。入った。そして node-build も自動的に入っているみたいだ。

初期設定を .bash_profile に書き込む

nodenvの初期化

nodenv init を打つと以下のようなメッセージが表示されます。

$ nodenv init
# Load nodenv automatically by appending
# the following to ~/.bash_profile:

eval "$(nodenv init -)"

このメッセージは ~/.bash_profileeval "$(nodenv init -)" を追加してね、という意味です。 (最初、改行で文章が終わっているのかと思って読んでたらよく意味がわかりませんでした…)

参考:

vimや任意のエディタ、echo コマンドなりで ~/.bash_profile を修正します。

$ echo 'eval "$(nodenv init -)"' >> ~/.bash_profile # ~/.bash_profileにeval "$(nodenv init -)"を追加
$ source ~/.bash_profile # リロード

なるほどなるほど、と .bash_profile を確認したら、 rbenvpyenv にこんな記述があったのを思い出した。

#rbenv command
export RBENV_ROOT=/Applications/Homebrew/opt/Ruby
eval "$(rbenv init -)"

#pyenv command
export PYENV_ROOT=/Applications/Homebrew/opt/pyenv/Python
eval "$(pyenv init -)"

そういえば ***_ROOT 変数を設定してルートディレクトリを /Applications/Homebrew 内部にまとめていた。 nodenv にそういう機能はあるのかな。

Environment variables

You can affect how nodenv operates with the following settings:

name default description
NODENV_VERSION   Specifies the Node version to be used. Also see nodenv shell
NODENV_ROOT ~/.nodenv Defines the directory under which Node versions and shims reside. Also see nodenv root
NODENV_DEBUG   Outputs debug information. Also as: nodenv --debug <subcommand>
NODENV_HOOK_PATH see wiki Colon-separated list of paths searched for nodenv hooks.
NODENV_DIR $PWD Directory to start searching for .node-version files.

あった。 /Applications/Homebrew 内部にまとめます。

#rbenv command
export RBENV_ROOT=/Applications/Homebrew/opt/Ruby
eval "$(rbenv init -)"

#pyenv command
export PYENV_ROOT=/Applications/Homebrew/opt/pyenv/Python
eval "$(pyenv init -)"

#nodenv command
export NODENV_ROOT=/Applications/Homebrew/opt/nodenv/Node
eval "$(nodenv init -)"

Node.js のインストール / ローカルのバージョンを設定

Node.jsのバージョンを選択してインストール

念の為、最新版ではなく推奨版であるNode.jsの10.13.0をグローバルにインストールします。

$nodenv install 10.13.0
$nodenv global 10.13.0
$nodenv versions # nodenvに10.13.0が追加されたか確認
  system
* 10.13.0 (set by /Users/yoshie/.nodenv/version)

rbenvpyenv と使い勝手はおなじですね。

$ nodenv install 12.14.0
Downloading node-v12.14.0-darwin-x64.tar.gz...
-> https://nodejs.org/dist/v12.14.0/node-v12.14.0-darwin-x64.tar.gz
Installing node-v12.14.0-darwin-x64...
Installed node-v12.14.0-darwin-x64 to /Applications/Homebrew/opt/nodenv/Node/versions/12.14.0

$ cd Project/Node

$ nodenv versions
  12.14.0

$ nodenv local 12.14.0
$ node -v
v12.14.0

Ver.12.14.0 をインストールして、 Node.js を実行するディレクトリに移動して、ローカルのバージョンを設定しています。

うごかしてみる

Hello world (コンソール版)

まずは、おきまりの Hello world から。$ は一般ユーザの、# は特権ユーザのプロンプトを示します。

sample1.js
console.log("Hello world!");
Console
$ node sample1.js
Hello world!

やってみる。

$ vimr sample1.js
lev:Node leico_studio$ node sample1.js 
Hello World!

問題なし。

Hello World (Web版)

Web サーバとして動作させる場合のサンプルがこちら。
sample2.js
var http = require('http');
var server = http.createServer(function(req, res) {
  res.write("Hello world!\n");
  res.end();
}).listen(8080);

まず、サーバを起動する。

Console
$ node sample2.js

別の端末から、Node.js を呼び出す。

少しモダンに書く練習をしてみる。

const http = require('http');
const server = http.createServer((req, res) => {
  res.write('Hello World!');
  res.end();
}).listen(8080);

実行して、web ブラウザからアクセスしたら Hello World! が返ってくるはず。

$ node sample2.js

http://localhost:8080/ にアクセスしてみる。

成功。

サーバはターミナルで Ctrl - C で終了できた。