Technology

テクノロジー

【HTML5 Dev】node.js 入門

Rob Gravelle
2012年6月13日 / 07:00
 
 
node.js は、サーバー サイド JavaScript を使ったネットワーク アプリケーション構築するためのランタイム環境であると同時に、ライブラリでもある。Chrome の JavaScript ランタイム エンジンを使うことで、Web ブラウザのサンドボックスを使うことなく JavaScript コードを直接実行する。筆者の「 Aptana's server-side JavaScript for their Jaxer server」という記事をご記憶かもしれない。だれに聞いても、この技術は完全に止まった状態のようだ。node.js にはサーバー サイド JavaScript を軌道に乗せる何かがあるのだろうか。この疑問に答えるべく、本稿は node.js の使い方を解説する。読んだうえで、これが採用できる技術かどうかは判断いただきたい。

node.js を使うメリット


node.js には、(1)使いやすい、(2)高速、(3)拡張性(スケーラビリティ)が高いという3つの長所があるとされる。小さなコードが大きな役割を果たすし、独自の並列処理モデルは旧来の OS スレッドより大幅にシンプルだ。クライアント サイドの JavaScript ライブラリに非常によく似ており、多数の常用コードがうまく隠されるよう抽象化の仕組みを採用している。これは、初中級レベルの開発者には素晴らしいことだ。しかし、専門家レベルで低レベルの機能を実現したいと考えている場合にはよくない。スケーラビリティは、高負荷な環境とノンブロッキング実行モデルにおける node.js の優れたメモリ効率によってもたらされる特徴だ。node.js の関数はほとんど I/O 直接実行しないので、プロセスは決してブロッキングされない。そのため、開発者はプロセスがデッドロックするかもしれないという心配から解放され、目の前のコードに集中できる。初中級レベルのプログラマーが node.js を使って迅速にシステム開発できるのは、このような理由からだ。

シンプルなサーバーを書くのが簡単な理由を示すため、サンプル コードを以下に示す。8080番ポートを監視し、リクエストがあるとメッセージで対応する。

【HTML5 Dev】node.js 入門
*クリックして拡大

かなり簡単なコードであることに異存はないだろう。

コードの実行


このサーバーを動かしたい場合は、以下のようにする。

まずは node.js にアクセスして最新バージョンをダウンロードしなければ何も始まらない。Windows 用と Macintosh 用のインストーラがあるので、インストールはとても簡単だ。tar/gzip 圧縮されたソース コードも用意されている。

インストールが終わったら、コンソールを開いて以下の命令を入力すれば試せる。

node -v

これで実行中の node.js のバージョンが表示される。

サーバーを実行するには、以下のようにする。

(1)server.js というファイル名で上記コードをサーバー ファイルとして保存
(2)サーバー ファイルを保存したフォルダに移動
(3)コマンド プロンプトで「node server.js」と入力(以下を参照)

【HTML5 Dev】node.js 入門

(4)任意の Web ブラウザでアドレスバーに「
http://localhost:8080
」と入力。すると以下のように表示される

【HTML5 Dev】node.js 入門

node.js のモジュール


JavaScript ライブラリのサイズが増えてくると、類似機能を1つのグループにまとめ、そうした複数のグループにして管理する必要が生ずる。たとえば Java では、こうしたグループはパッケージと呼ばれる。あるクラスから別パッケージ内のファイルを参照しなければならない場合は、import 文を使う。node.js も全く同じ機能を実装しているが、こちらはファイルをパッケージでなくモジュールで整理する。そして、関連ファイルの読み込みには require() メソッドを使う。実のところ、このメソッドは既に最初のサンプル コードで使用済みだ。

【HTML5 Dev】node.js 入門

われわれの独自モジュールでも同じ処理がうまくいった。リクエスト オブジェクトからリクエストされたリソースのパスを入手する処理を紹介しよう。これは、url モジュールを使ってリクエスト url をパースしてパス名を取得し、これを呼び出し元に返す。

【HTML5 Dev】node.js 入門

ほかの多くの言語やライブラリと異なり、node.js ではパブリック メソッドを export オブジェクトに書き出す必要がある。コードの最終行がその処理だ。

server.js ファイルの話に戻るが、これで http モジュールと同じように requestInfo モジュールを読み込めるようになった。異なるのは、今のスクリプトからパスを考えなければならない点だけだ。「./」は同じフォルダにあることを意味する。

また、行を別々の段に分けてプリントできるよう、コンテンツのタイプも html に変えている。requestInfo モジュールをローカル変数に保存したら、requestInfo モジュールに「.」と関数コールを追加することで getPath() 関数を呼び出せる。

【HTML5 Dev】node.js 入門
*クリックして拡大

まとめ


クライアントとサーバーの両側で同じ言語を使うのがずっと筆者の好みだ。さまざまなサーバー側技術が存在する現状では、どれにするのか決めるのが面倒になっている。決して選択肢のあることが悪いわけではなく、使い慣れた言語を使うメリットは必ずある。だから、node.js の人気が上昇することを願いたい。
【関連記事】
【HTML5 Dev】「TRON」の舞台裏:HTML5 による電子書籍サイト構築
【HTML5 Dev】Mobile Joomla! を使ったサイトの最適化 - パート3
【HTML5 Dev】Mobile Joomla! を使ったサイトの最適化 - パート2
【HTML5 Dev】HTML5 の位置情報機能、面白いアイデア12
【HTML5 Dev】Mobile Joomla! を使ったサイトの最適化 - パート1

関連キーワード:
Java
 
Chrome
 
JavaScript
 
スレッド
 

New Topics

Special Ad

ゆりかごからロケットまで、すべての乗り物をエンジョイ
ゆりかごからロケットまで、すべての乗り物をエンジョイ えん乗り」は、ゆりかごからロケットまで、すべての乗り物をエンジョイする、ニュース、コラム、動画などをお届けします! てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites