node.js自分なりのBest Practice

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

モジュール

node.jsのモジュールを作る時に、必ずエラーを第一引数にしたコールバックを用意します。例えば

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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があれば、まずエラーをチェックという意識を作るといいでしょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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を書いたのですが、勉強を進めると変わることがありますので、適当にご参考になれればと思います