Javascriptのカスタムエラーの作り方

function foo() { bar(); }
function bar() { baz(); }
function baz() { throw new Error('X'); }

(function main() {
    try {
        foo();
    } catch (error) {
        console.log(error.stack);
    }
})();


Error: X
    at baz (http://localhost/CustomError.html:8:24)
    at bar (http://localhost/CustomError.html:7:18)
    at foo (http://localhost/CustomError.html:6:18)
    at main (http://localhost/CustomError.html:12:9)
    at http://localhost/CustomError.html:16:3
var createError = (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    return function createError(name, message, properties) {
        var e = new Error(message);
        e.name = name;
        if (properties)
            for (var key in properties)
                if (hasOwnProperty.call(properties, key))
                    e[key] = properties[key];
        try {
            throw e; // for IE
        } catch (e) {
            return e;
        }
    };
})();

var timeoutError = createError('TimeoutError', 'session timeout');
var fetchError = createError('FetchError', '404 Not Found', { statusCode: 404 });


HRTの原則

 Team Geek ―Googleのギークたちはいかにしてチームを作るのか で紹介されている言葉であり、本書ではほぼ一冊すべてをかけてこのHRTの原則とその実践方法とを様々な角度から紹介している。

 

HRTの原則とは、優れた開発チームでは

1. 謙虚(Humility)
2. 尊敬(Respect)
3. 信頼(Trust)


の3つの価値が大切にされており、エンジニアとしてもチームや組織、顧客との対話においてこれらの価値を重んじていくことが成功につながる、というものである。

あらゆる人間関係の衝突は、謙虚・尊敬・信頼の欠如によるものだ
Team Geek p.15

 

とりわけペアプログラミングやコードレビューが浸透しているチームであればあるほど、HRTの原則の重要度は高い。他人の書いたコードについてコメントする機会が多く、その指摘が常に相手のコードを全面肯定するわけではないからだ。この意味においてレビュー文化が浸透している組織では、エンジニアは常に知的ボクシングをしている、と言うこともできる。レビューで角のある発言をすることは、ボクシングのグローブに釘を仕込むようなものなのだ。

HRTを軽視する人に対して、周囲はなかなか注意しづらい。

例えば、コードレビューでキツいコメントをした人がいるとしよう。本書で「アンチパターンに満ちあふれている」例として紹介されている次のようなコメントだ。

「このメソッドの制御フローは完全に間違ってますよ。みんなが使ってる標準的なxyzzyコードパターンを使うべきですよ」
Team Geek p.21


こういうコメントをしてしまう人は、周囲や上司の「もう少しソフトな言い方できないの?」という指摘に対して、しばしば「何か間違ったこと言ってますか?内容については反論の余地はないですよね」というような角が立つ返答をし、チームの人間関係をさらに悪化させる。

反論が来るかもしれないから指摘しづらい、というだけではなく、精神論だと言われればそれまでだし、君のポリシーを僕に押し付けるなと言われてもおかしくないし、プロなんだから傷つくコメントをされるようなアウトプットをする側に問題があるだろ、と言われるかもしれない。または相手がHRTの価値観を受け入れてくれたとしても、「小学校の学級会かよ」というレベルの内容だとも言える。このような各種配慮から、カチンときたり、その言い方はないだろ、と感じながらも、それを相手に指摘することが憚られるケースが多々ある。

そんな場面に出くわすことがあったら、次からはグッとこらえて我慢するのではなく、「うちの開発チームでは、HRTの原則を大切にしていきたいと思っているんだ」という言葉を添えてそのエンジニアに本書に書かれている理念を説明すると良いかもしれない。

ちなみに以前からの私の個人的なポリシーは、「ソフトウェア開発はバーでしっとり語り合うように」。お互い尊敬・尊重しあう中で、気持よく高め合っていきたいものである。