node.js自分なりのBest Practice

ChainZ(クリエイター)
いろいろやってます。

モジュール

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, testingproduction四つの環境変数を用意します。変数名は自由ですが、APP_ENVNODE_ENVかがわかりやすいでしょう。

それぞれの環境にconfig.jsonを用意して、データベースの設定や外部サービスの情報などを分けましょう。

パッケージを活用しよう

新しい機能が欲しいときに、スクラッチから書くより、まずnpmを利用して現存のパッケージを探してみましょうnpmには便利なパッケージがたくさんあります。みんなでコミットしているので、バグなども比較的に少なくて安定します。

まとめ

もっとnode.jsのことを理解したいので、最近実際にプロジェクトを立ててコードを書いてます。この記事は、現時点で自分なりのBest Practiceを書いたのですが、勉強を進めると変わることがありますので、適当にご参考になれればと思います