プロジェクト構成確認
Webロールを追加したところで、NodeSampleプロジェクト全体のフォルダ構成を確認してみましょう(リスト3)。
C:\NODE\NODESAMPLE アプリケーションルート
│ deploymentSettings.json 配置設定ファイル
│ ServiceConfiguration.Cloud.cscfg (1)
│ ServiceConfiguration.Local.cscfg (1)
│ ServiceDefinition.csdef (2)
│
└─WebRole1 Webロールフォルダ
│ server.js (3)
│ Web.cloud.config
│ Web.config
│
└─bin (4)
iisnode.msi
node.exe
setup_web.cmd
vcredist_x64.exe
(1)はサービス構成ファイル、(2)はサービス定義ファイルと呼ばれるWindows Azureの環境設定に必要なファイルです。例えば、インスタンス数など設定を行うことができます。
(3)は、既定で実行されるNode.jsのスクリプトです(リスト4)。
(4)のbinフォルダ配下には、IIS上でNode.jsを実行するために必要なファイルが格納されています。現在同梱されているnode.exeのバージョンは、v0.6.10となっています。
リスト4は、自動生成されたserver.jsのコードです。簡易HTTPサーバーを起動しています。
var http = require('http');
var port = process.env.port || 1337;
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(port);
1行目のrequire('http')で標準のHTTPモジュールを取り込んでいます。2行目は、環境変数からHTTPサーバーを起動するポート番号を取得します。3行目以降は、createServerメソッドでHTTPサーバーを作成し、listenメソッドでHTTPサーバーを起動します。
createServerメソッドに指定された関数は、リクエストがあった場合に呼ばれるコールバック関数です。常に、「Hello World」を返却する実装になっています。
Workerロールの作成は、Add-AzureNodeWorkerRoleコマンドレットで行います。SDK for Node.jsでのWebロールとWorkerロールの違いは、前者はIIS環境下でNode.jsが実行されますが、後者はNode.jsが直接実行されます。
IIS環境下で実行されると、リソース管理などでいくつかのメリットを享受できます。ただし、WebSocketは利用できないため、Workerロールによる直接実行が必要になります。IISによるWebSocketのサポートは、IIS 8が予定されています。
Windows Azureエミュレーターでの実行
Windows Azure エミュレーター(以降、エミュレーター)は、開発環境上でWindows Azureの疑似実行環境を提供するものです。
エミュレーターには、コンピュートエミュレーターと、ストレージエミュレーターがありますが、今回はコンピュートエミュレーターのみ使用します。
[1]エミュレーターを起動する
Start-AzureEmulatorコマンドレットを実行し、Nodeアプリケーションをエミュレーター上で実行します(リスト5)。-Launch引数を指定すると、エミュレーター起動後に自動でブラウザが開きます。
PS C:\node\NodeSample> Start-AzureEmulator -Launch
エミュレーターが起動すると、図6のようにタスクトレイに表示されます。ここでは説明を省略しますが、タスクトレイアイコンのメニューからエミュレーターコンソールを表示させ操作できます。

ブラウザが起動し、図7の画面が表示されればエミュレーター上で実行は成功です。
[2]エミュレーターを停止する
エミュレーターを停止するには、Stop-Emulatorコマンドレットを実行します(リスト6)。
PS C:\node\NodeSample> Stop-Emulator
エミュレーターの起動と停止の様子は図8のとおりです。
2回目以降にエミュレーターを起動した場合、エラーダイアログが表示される場合があります。そのような場合は、エミュレーターを停止させ、リスト7のコマンドを入力し、「WebRole1\server.js.logs」フォルダを削除してから再実行してください。
PS C:\node\NodeSample> del -Recurse .\WebRole1\server.js.logs


