TypeScriptの為のクリーンコード を翻訳しました

clean-code-typescript を邦訳しました。

翻訳後のドキュメントは以下になります。
TypeScriptの為のクリーンコード

このドキュメントは Robert C.Martinの書籍 Clean Code を TypeScript に対応させたもので、 clean-code-javascript を参考に作成されました。TypeScriptで可読性が高く、再利用可能であり、リファクタブルなソフトウェアを生産するためのガイドラインが挙げられています。

ガイドラインは10個の章で構成されており、それぞれ以下の項目が挙げられています。

  • Variables(変数)

    • 意味のある変数名を使う
    • 発音可能な変数名を使う
    • 同じ型の変数には同じ単語を割り当てる。
    • 検索可能な名前を使う
    • 説明変数を使う
    • メンタルマップを避ける
    • 不要な文脈を追加しない
    • 短絡評価や条件式の代わりにデフォルト引数を使用する
    • 目的を明文化するために列挙型(enum)を使用する
  • Functions(関数)

    • 関数の引数 (理想は2つ以下)
    • 関数は1つのことだけを行うべきです
    • 関数名は何をするべきか宣言するべきです。
    • 関数は一つの抽象化に留めること。
    • 重複したコードは消す
    • Object.assign や 分割代入を使ってデフォルトオブジェクトを設定する
    • 関数の引数にフラグは渡さない
    • 副作用を避ける(その1)
    • 副作用を避ける(その2)
    • グローバル関数には書き込まない
    • 命令形プログラミングより関数型プログラミングを好む
    • 条件をカプセル化する。
    • 否定的な条件を避ける
    • 条件を避ける
    • 型チェックを避ける
    • 行き過ぎた最適化を避ける
    • 使っていないコードは削除する
    • イテレーターとジェネレーターを使う
  • Objects and Data Structures(オブジェクトとデータ構造)

    • getter と setter を使う
    • オブジェクトにprivate/protectedメンバーをもたせる
    • 不変性を好む
    • タイプ VS インタフェース
  • Classes(クラス)

    • クラスは小さくあるべき
    • 高凝集度と疎結合性
    • インヘリタンス(継承)よりコンポジション(合成集約)を好む
    • メソッドチェーンを利用すること
  • SOLID(SOLID原則)

    • 単一責任の原則 (SRP)
    • オープン・クローズドの原則 (OCP)
    • リスコフの置換原則 (LSP)
    • インタフェース分離の原則 (ISP)
    • 依存関係逆転の原則 (DIP)
  • Testing(テスト)

    • TDD3つの法則
    • F.I.R.S.T. の規則
    • テスト毎に単純なコンセプトを持つ
    • テストの名前は何をしてるか、理解しやすくしましょう。
  • Concurrency(並行性)

    • コールバックではなく Promise を使う
    • Async/Await はPromisesよりも更に綺麗です
  • Error Handling(エラー処理)

    • ThrowやRejectの時にErrorを使う
    • 例外を握りつぶさない
    • reject された promise を無視しない
  • Formatting(フォーマット)

    • 一貫性を持った大文字を使用すること
    • 関数の呼び出し元と定義は近いはずです。
    • import文を整理する
    • タイプスクリプトエイリアスを使用する
  • Comments(コメント)

    • コメントではなく、自己説明的なコードを好む
    • コメントアウトされたコードを残さない
    • 日付を持ったコメントはいりません
    • 位置取りの印として使うのをさける
    • TODOコメント

各項目では Clean Code の形式に倣い、ガイドラインの解説の他、参考になるツールや文献、TypeScriptで書かれた良いコードと悪いコードのサンプルが掲載されており、どのようにソースコードを改善すべきかが具体的に把握できるようになっています。

個人やチームで作成するTypeScriptのコードを評価し、よい品質を保つための基準として役に立てば幸いです。