標準ライブラリ

この章では標準ライブラリについて簡単にみていきます.詳細については node.js のAPIドキュメント を参照してください.

グローバルオブジェクト

グローバルオブジェクトはどのモジュール/コンテキストからも参照可能なオブジェクトです. 次の6つがあります.

process
標準入出力,実行環境,コマンドライン引数,環境変数などランタイムプロセス関連の機能を提供します.その中でも uncaughtException は重要なイベントです.詳細は 例外処理 を参照してください.
module
1つのjsファイルは1つのモジュールであり,現在のモジュールの情報を格納しています.
require
require(modulePath) でモジュールを読み込めるほか, require.resolve(modulePath) で該当モジュールのフルパスを返します.モジュール読み込みがうまくいかない場合は require.paths.unshift(path) でパスを追加してください.
__filename
現在実行しているスクリプトのファイル名を返します.Python __file__
__dirname
現在実行しているスクリプトのディレクトリ名を返します.
global
グローバルスコープを示すための名前空間専用のオブジェクトです.

そのほか console オブジェクトやArray, String, Error などのクラスオブジェクト(関数) も使えますが,APIのドキュメント上はGlobalオブジェクトではありません(プリミティブ扱いです).

また以下のタイマ関数もモジュールを読み込むことなく利用可能です.

  • setTimeout
  • clearTimeout
  • setInterval
  • clearInterval

便利な関数

util モジュールは名前の通りユーティリティ関数を含むモジュールです.0.2.X 系では sys モジュールでした.

  • util.inspect(obj) はオブジェクトの詳細をダンプします.

子プロセスを実行する

child_process モジュールを使うことでプロセスを起動することができます.

  • child_process.spawn は標準入出力を使って連携させるときなどに活用できます.
  • child_process.exec は単にプロセスを実行したいときに活用できます.

ファイルシステム

fs モジュールはファイルシステム関連の関数を提供します.このモジュールは,同期/非同期それぞれのメソッドを提供します. fs.asyncMethod が非同期版のメソッド名で,対応してメソッド fs.asyncMethodSync が同期版として提供されています.

  • fs.writeFile(path, data, function(err){ /* ... */ }); を使えば簡単にファイルの書き込みが可能です.
  • fs.readFile(path, function(err, data){ /* ... */ }) を使えば簡単にファイルの読み込みが可能です
  • fs.open を使うとファイルをストリームとして扱うことができます.巨大なファイルを扱う場合はストリームを活用してください.

ストリーム

fs.open や req.on(‘response’) で得られるオブジェクトはストリームと呼ばれるオブジェクトです.Non-Blocking IOを制御するにはストリームオブジェクトのメソッド/イベントを知っておく必要があります. よく使うものをここであげます.

Readable Stream: 読み込みに使うストリーム

Event(‘data’, function(data){ /* ... */ })
データを受信時に発火されるイベントです
Event(‘end’, function(){ /* ... */ })
EOF到達時/TCP FIN受信時に発火されるイベントです.

Writable Stream: 書き込みに使うストリーム

stream.write(str)
データを書き込みます.
stream.end(str)
EOFに相当します.もしくはFINを書き込みます. str が指定される場合は,その文字列を書き込んでから終了させます.

http,url,querystring

http モジュールを使うことで HTTP 関連のやりとりを実装できます.多くの場合 url,querystring モジュールも一緒に使うことになるでしょう.

http.Server については HTTP Server の章で説明します.

あるURLが文字列で与えられた場合次のような形でクライアントを作ってデータをダウンロードします.