目的
業務でNode.jsを触らなくなって3ヶ月ほど放置していたら、
PC再セットアップ時に思ったよりいろいろ忘れてるなぁと感じたので、
星の数ほどある導入記事を備忘のために書く。
まずはインストール、の前に登場人物紹介
Node.js
:
今回の主役。
サーバサイドで動作するJavaScript。
npm
:
Node.js用のパッケージ(ライブラリ)管理ツール。インストールすると一緒についてくる。
nodeコマンドよりnpmコマンドを使うことが多くて、正直主役より目立ってる。
nodebrew
:
Node.jsのバージョン管理ツール。Javaでいうjenv、rubyでいうrbenv。
Node.jsはアップデートが頻繁なので、一緒にいれちゃうのがおすすめ。
同じバージョン管理ツールのnvm
というライバルがいる。
気を取り直してインストール
※ 対象はmacユーザです
-
nodebrew をインストール
インストールして $ curl -L git.io/nodebrew | perl - setup .bashrc へ以下を追記 $ export PATH=$HOME/.nodebrew/current/bin:$PATH 反映(もしくはターミナル再起動) $ source ~/.bashrc
-
Node.js をインストール
$ nodebrew install-binary stable
バリ早いです。5秒位で終わります。
stableは安定版という意味で、コマンド実行時点での安定版がインストールされます。
stable
の代わりにv10.14.2
みたいに直接バージョン指定ももちろんできます。
-
使うNodeのバージョンの指定、確認
使うバージョン指定して $ nodebrew use stable Nodeのバージョン確認 $ node -v v10.14.2
これでNode.jsのインストールは完了です。
ハローワールド
適当なディレクトリで index.js を作成
$ vi index.js
以下を記述
console.log('Hello World!');
実行
$ node index.js
Hello World!
流石にちょっと寂しいので、サーバ起動してハローワールド
-
index.js を編集
index.js// httpという名前のネイティブライブラリをインポートして、httpという変数につめる const http = require('http'); // サーバセットアップ http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); // Content-Type指定 res.end('Hello World!'); }) .listen(3000, () => console.log('Server http://localhost:3000')); // ポート3000で起動
-
実行
$ node index.js
-
http://localhost:3000 へアクセス
ね、簡単でしょ?
フレームワークをつかう
express
というフレームワークを使ってルーティング処理。
フレームワークを導入したり、外部のライブラリを使用するには、package.json
というファイルを作成する必要があります。
pom.xml
とかbuild.gradle
みたいな感じのやつ。
-
プロジェクト初期設定
$ npm init 対話形式で色々聞かれるが、とりあえずエンター連打でOK package name: (hello) version: (1.0.0) description: entry point: (index.js) test command: git repository: keywords: author: license: (ISC) Is this OK? (yes) yes
これでpackage.jsonが生成される。
中身はこんな感じ。
```
{
"name": "hello",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
```
-
express をインストール
$ npm install express --save
なんかビャビャーってコンソールに出て、package.jsonを再確認すると、
{ "name": "hello", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.16.4" } }
dependencies
が増えてますね。
package.jsonを見れば、このプロジェクトでどんなライブラリ使ってるかわかります。
依存性とか言われても、最初「は?」ってなりますよね。未だになります。 -
express用にコード修正
const express = require('express') const app = express() app.get('/', (req, res) => res.send('Hello World!')) app.get('/bye', (req, res) => res.send('Goodbye World!')); app.listen(3000, () => console.log('Server http://localhost:3000'))
-
アクセス
ルートへアクセスするとHello、/bye
へアクセスするとGoodbyeが表示されます。
これでRESTfulなAPIが作れますね。
ちなみに、package.jsonは依存性を書いておくだけではなく、scripts
にスクリプトを書けます。
試しに、以下のように修正して$ npm run start
すると今まで同様index.jsを実行できます。"scripts": { "start": "node ./index.js", "test": "echo \"Error: no test specified\" && exit 1" },
gradleでいうTaskみたいなもんですね。最初は恩恵感じられないですが、そのうち欲しいと思うときがきます。
おわり
ターミナル、nodeの純正ライブラリ、expressフレームワークでそれぞれHello World
してみましたが、
どれもこれもあっさり出来ました。
今回はスクラッチでやりましたが、expressならそもそもテンプレートを作成する機能もあるのでここまで0からやる必要はないかも?
つぎは
GAE(Google App Engine)がいつの間にかnodeに正式対応していたので、トライしてみます。