インフラレイヤーの仕事ばかりしていた数年間でだいぶ浦島太郎なのでリハビリのためにNode.jsを学習中。そのメモ。随時加筆。
インストール
公式サイトからインストーラーをダウンロードしてきてインストールしても良いが、複数バージョンの切り替えなどを考慮するとツール経由でインストールする方が良い。
ここでは、nodebrewを利用する。
既に他のツールでnode.jsがインストール済みの場合
例えばhomebrew経由でインストール済みの場合は予め以下のコマンドで削除する。
sudo brew uninstall --force node
nodebrew経由でのインストール
まず以下を実行する。
curl -L git.io/nodebrew | perl - setup
実行後以下のように出力されるはずなので、環境変数を追加する。自分の場合は、zshを利用しており、自分用の設定は.zshrc.mineに全て記載しているので、そこの末尾に追加した。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
100 23558 100 23558 0 0 5736 0 0:00:04 0:00:04 --:--:-- 5736
fetching nodebrew...
install nodebrew in $HOME/.nodebrew
========================================
Add path:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
次にインストール可能なnode.jsのバージョンを調べるために、
nodebrew ls-remote
を実行する。大量のバージョンが表示されるはずだ。
次に最新のバイナリをインストールする。引数には上記のコマンドで表示されたバージョン文字列を指定すれば良い。
nodebrew install-binary v4.1.1
nodebrew install-binary io@v3.3.1
ここで無事にインストールされているかを確認するには、
nodebrew ls
コマンドを実行すれば良い。ただこの時点ではどのバージョンのnode.jsを利用するかは設定されていないので、最後に
nodebrew use v4.1.1
と実行して利用バージョンを指定する。
Hello Worldを試してみる
適当なファイル(hello.js
)を作成し、以下のような内容にする。
var http = require('http');
http.createServer(function(request, response){
response.writeHead(200, {'Content-type': 'text/html'});
response.end("Hello World\n");
}).listen(8124);
console.log("Server is runnning at http://localhost:8124");
終わったらコマンドラインで以下のように実行すれば良い。
node hello.js
外部モジュールの管理
外部のモジュールを管理するためにはnpmを使うが、まずはそのためのpackage.jsonを作成する。
npm init
色々聞いてくるので適当に入力すればOK。
何かモジュールを追加する場合は、以下のようにする。引数に--save
を付けることで、そこにあるpackage.json
もあわせて更新される。
npm install http --save
こうすることで当該ディレクトリのnode_modules
以下にモジュールがインストールされる。
もちろん、package.jsonを手で編集してもOK。
学習
とりあえず以下の2つを真面目にやればだいたいどんなものか分かる。本を買うよりもこちらをやった方が良さそう。
- Nodeビギナーズブック
- learnyounode (node.js 基礎) 初心者向け
- 全部で課題は13個。最初はHello Worldから始まって、引数の読み取り、ディレクトリのファイル一覧取得、その非同期版、モジュール作成、httpクライアント作成、TCP Server、HTTPのAPI作成で終わる。一通りやればだいたい分かった感じにはなる
LEARN YOU THE NODE.JS FOR MUCH WIN!
Select an exercise and hit Enter to begin
────────────────────────────
» HELLO WORLD [COMPLETED]
» BABY STEPS [COMPLETED]
» MY FIRST I/O! [COMPLETED]
» MY FIRST ASYNC I/O! [COMPLETED]
» FILTERED LS [COMPLETED]
» MAKE IT MODULAR [COMPLETED]
» HTTP CLIENT [COMPLETED]
» HTTP COLLECT [COMPLETED]
» JUGGLING ASYNC [COMPLETED]
» TIME SERVER [COMPLETED]
» HTTP FILE SERVER [COMPLETED]
» HTTP UPPERCASERER [COMPLETED]
» HTTP JSON API SERVER [COMPLETED]
────────────────────────────
HELP
CHOOSE LANGUAGE
CREDITS
EXIT
- その他にもWorkshoppersが多数公開されているので試してみると良い
Express
ExpressはNode.jsでWebアプリケーションを作るためのフレームワーク。最新のバージョンは4系(4.13.3)。出回っている情報は3系のものが多いが非互換な箇所もあるので注意が必要。
まず試すということであれば公式サイトにチュートリアルがあるのでそれに従う。
インストール
npm経由でインストールすればOK。
npm install express -g
npm install express-generator -g
Express Generatorによる自動生成
ソースコードをExpress Generatorで自動生成する。適当な作業ディレクトリを作成し
express .
を実行する。以下のように表示されファイルが作成される。
create : .
create : ./package.json
create : ./app.js
create : ./public
create : ./public/images
create : ./routes
create : ./routes/index.js
create : ./routes/users.js
create : ./views
create : ./views/index.jade
create : ./views/layout.jade
create : ./views/error.jade
create : ./public/stylesheets
create : ./public/stylesheets/style.css
create : ./public/javascripts
create : ./bin
create : ./bin/www
install dependencies:
$ cd . && npm install
run the app:
$ DEBUG=express-study:* npm start
package.jsonも作成されるので、このディレクトリでnpm install
を実行する。
これで準備が完了したのでアプリケーションを以下のようにして起動する。
DEBUG=express-study:* npm start
これで、http://localhost:3000
にアクセスすれば画面が表示される。
CakePHPやRailsのようにコマンド一発でガシガシとやってくれる感じではないので、あとは自分で色々中身を作っていく。
気づいた点
- デフォルトのテンプレートエンジンが
Jade
になっている。Jadeはhamlのような感じの独自記法でテンプレートを記述するが、自由度や共同編集の兼ね合いもあるので、ejs
の方が良い気がする。その場合は、Express Generatorを実行する際に引数-e ejs
を追加すればOK。
構文チェックや静的解析
各種言語で存在するようにNode.jsでもlint用のツールが使える。メジャーなのはjslint
とjshint
だが、jslint
はチェックが厳しすぎるきらいもあり、jshint
を使うのが定番の様子。
- vimのsyntasticプラグインとjshintを組み合わせることでvimでのファイル編集中にリアルタイムにlintを実行できる
-
plato
を使うとレポートの出力も含めて良きに計らってくれる。Grunt
と組み合わせれば処理を自動化できる
テスト自動化
色々なフレームワークが存在しているが、以下が定番。
- Qunit
- mocha
- jasmine
標準のassertメソッドだけを使うのではなくAssertionライブラリと組み合わせるのが定番の模様
- chai
- power-assert-js