CodeZine(コードジン)

特集ページ一覧

Windows AzureユーザーのためのNode.jsの基礎

Windows Azure 新機能チュートリアル(13)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/04/23 14:00
目次

ファイル名を指定しての実行

 次にスクリプトをファイルに保存して実行してみます(図2)。通常は、このような形で利用することのほうが多いでしょう。

図2 ファイル名を指定して実行
図2 ファイル名を指定して実行

 実行したスクリプトはリスト2です。日本語を含む場合は、文字コードをUTF-8にして保存してください。Shift JISなどはサポートされていません。

リスト2 コンソールへの出力(sample1.js)
// (1)フォーマット 指定することも可能
console.log('こんにちは世界');
var j = { name : 'foo' , age  : 29 };
console.log('%s %d %j', j.name, j.age, j);

// (2)スクリプトのファイル名、フォルダ
console.log(__dirname);
console.log(__filename);

// (3)コマンドライン引数
process.argv.forEach(function(val, index, array) {
    console.log(val);
});

 (1)のように、C言語のprintfのようなフォーマットを指定して出力することも可能です。以下のフォーマットが利用可能です。

  • %s - 文字列
  • %d - 数値(整数、浮動小数点)
  • %j - JSON形式

 (2)のようにconsole以外にも、__dirname/__filenameといったグローバルオブジェクトが登録されており、これらを利用することもできます。

 (3)のprocessも同じくグローバルオブジェクトです。配列argvには、起動時に渡された引数が格納されています。この例では、配列が持つforEach関数によってすべての内容を表示しています。

 下表にconsoleオブジェクトに定義された代表的な関数名を示します。

表 consoleオブジェクトの関数一覧
関数名 概要
log(object, [arg], [...]) 改行付きで標準出力へ出力します。
info(object, [arg], [...]) logの別名です。
warn(object, [arg], [...]) 改行付きで標準エラー出力へ出力します。
error(object, [arg], [...]) warnの別名です。
dir(object) オブジェクトを文字列化し、標準エラー出力へ出力します。
trace() 現在のスタックトレースを標準エラー出力へ出力します。
assert(value, [message]) アサートです。式がfalseならば現在のスタックトレースを出力します。
補足 Node.jsのリファレンス

 Node.jsのリファレンスは、以下のURLを参照してください。また、和訳はNode.js 日本ユーザーグループの手によって行われております(感謝)。

非同期処理の確認

 Node.jsは元々スケーラブルなネットワークアプリケーションを開発するために構築されました。スケーラビリティを実現するためにはいくつかの方法がありますが、Node.jsはシングルスレッド、非同期処理というアプローチを採用しています。ここでは、その非同期処理について簡単に説明します。

 前述の例では、Node.jsの特徴である非同期処理の例が見て取れませんが、以下のリスト3のサンプルを実行するとその一端が垣間見えます。

リスト3 非同期処理(sample2.js)
// コールバック関数 
function callback(i) {
  console.log('callback = %d', i);
}
// 100回 コールバック関数を呼び出すようにスケジュールする
for(var i = 1; i < 100; i++) {
   setTimeout(callback, 0, i);
}

 setTimeout関数は、第2引数で与えたられた時間(ミリ秒)が経過したあとに、第1引数のコールバック関数が1度だけ呼ばれるようにスケジュールします。第3引数以降は、コールバック関数に渡す引数となります。

 リスト4の例では、callback関数を0ミリ秒後(すなわち直ち)に、変数iを引数に呼び出すように指示しています。

 この実行結果を確認してみましょう(図3)。

図3 非同期呼び出しの実行結果
図3 非同期呼び出しの実行結果

 実行する環境によってばらつきはあると思いますが、1から順に出力されないことが確認できます。Node.jsはコールバック関数が呼び出されるタイミングや順序を保証していないためこのようになります。順序性を保証したい場合は、コールバック関数の中で次の処理を実行する必要があります。次節ではファイルの操作を行いながら、この点について確認していきます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows Azure新機能チュートリアル

もっと読む

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5