node.js自分なりのBest Practice
モジュール
node.jsのモジュールを作る時に、必ずエラーを第一引数にしたコールバックを用意します。例えば
module.exports = function(type, callback){
var cake = models.Cake.create(type);
// 初期化コードなど..
if (! cake)
{
// エラー発生、エラーを第一引数に渡す
// return を使いましょう。じゃないとプログラムは続きます
return callback(new Error('Could not create Cake!'), cake);
}
// オッケなので、第一引数(エラー)をnullにする
return callback(null, cake);
}
必ずコールバックのエラーをチェック
JavaScriptはcallbackを大量使う言語なので、callbackがあれば、まずエラーをチェックという意識を作るといいでしょう。
var db = require('db');
db.connect(function(err, connection){
if (err)
{
throw err;
return; // returnしないと、プログラムは止まらない
}
try
{
connection.db.dropDatabase();
}
catch(exception)
{
console.error('error!!');
}
});
エラー処理
エラー処理は他の言語やプラットフォームと変わりません。一般的なルールを守ります:
- Logしまくります。とりあえずログしましょう。
- ランタイムエラーは状況によりますが、外部サービスの通信エラーはもう一度試して、最後クライアントにエラー提示をします。
- プログラミングエラーはすぐアプリを止めましょう。バグなので、プロダクションに移行する前に直しましょう。
非同期
node.js自身は無限ループをしています。なので、一番node.jsの本領を発揮するのは非同期処理です。(同期処理すると、他のイベントが処理できなくなるので、非常に効率悪いです)
できるだけ、非同期のコーデイングをしましょう。唯一同期処理が考えられるのは初期化の段階です。つまり「これが準備できてないと、次の処理は話にならない」時です。もちろん、この場合は非同期処理でも解決できるので、実際の状況をみて選びましょう。
“use strict”
ソースコードの最初に"use strict"
を書くかどうかは特にアプリには影響がないですが、標準ってことで、ちょっと指を動かすだけなので、書きましょう。
環境変数
必ずdevelopment
(dev
), staging
, testing
とproduction
四つの環境変数を用意します。変数名は自由ですが、APP_ENV
かNODE_ENV
かがわかりやすいでしょう。
それぞれの環境にconfig.json
を用意して、データベースの設定や外部サービスの情報などを分けましょう。
パッケージを活用しよう
新しい機能が欲しいときに、スクラッチから書くより、まずnpm
を利用して現存のパッケージを探してみましょう。npm
には便利なパッケージがたくさんあります。みんなでコミットしているので、バグなども比較的に少なくて安定します。
まとめ
もっとnode.jsのことを理解したいので、最近実際にプロジェクトを立ててコードを書いてます。この記事は、現時点で自分なりのBest Practiceを書いたのですが、勉強を進めると変わることがありますので、適当にご参考になれればと思います。