SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

 次にスクリプトをファイルに保存して実行してみます(図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はコールバック関数が呼び出されるタイミングや順序を保証していないためこのようになります。順序性を保証したい場合は、コールバック関数の中で次の処理を実行する必要があります。次節ではファイルの操作を行いながら、この点について確認していきます。

次のページ
ファイル操作

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Windows Azure新機能チュートリアル連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト statemachine(statemachine)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6519 2012/04/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング