mcpField
T
typescript-clean-code

typescript-clean-code

github.com/ertugrul-dmr開発21298 回インストール28 週間前に更新
リポジトリ

typescript-clean-code について

typescript-clean-code は、Robert C. Martin の Clean Code 原則を TypeScript に適用するためのリファレンススキルです。コメント、関数、設計、命名、テストの指針に加え、TypeScript 固有のルールと AI によるレビュー・編集方針をまとめています。

主な機能

  1. 01TypeScript に Clean Code ルールを適用
  2. 02コメント・関数・設計を網羅
  3. 03命名とテストの指針
  4. 04TypeScript 固有の実践項目
  5. 05ルール番号で違反を報告

活用シーン

  1. 01明示されたルールに沿った TypeScript コードレビュー
  2. 02重複や意図の不明瞭さを減らす編集の指針

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ertugrul-dmr/clean-code-skills --skill typescript-clean-code

インストール後、Claude Code で/typescript-clean-codeを入力して読み込まれたか確認します。

詳細

クリーンな TypeScript:完全リファレンス

Robert C. Martin の第 17 章にあるクリーンコードの原則をすべて、TypeScript 向けに適用して徹底します。

コメント(C1-C5)

  • C1:コメントにメタデータを書かない(Git を使う)
  • C2:古くなったコメントはすぐに削除する
  • C3:冗長なコメントを書かない
  • C4:コメントが必要なら、適切に書く
  • C5:コメントアウトしたコードを決してコミットしない

環境(E1-E2)

  • E1:ビルドには 1 つのコマンドを使う(npm run build)
  • E2:テストには 1 つのコマンドを使う(npm test)

関数(F1-F4)

  • F1:引数は最大 3 つにする(それ以上の場合はパラメーターオブジェクトやインターフェースを使う)
  • F2:出力引数は使わない(戻り値を使う)
  • F3:フラグ引数は使わない(関数を分割する)
  • F4:使われていない関数を削除する

一般(G1-G36)

  • G1:1 つのファイルでは 1 つの言語を使う
  • G2:期待される動作を実装する
  • G3:境界条件を処理する
  • G4:安全策を無効にしない
  • G5:DRY(重複をなくす)
  • G6:抽象化レベルを一貫させる
  • G7:基底クラスは子クラスを知らない
  • G8:公開インターフェースを最小限にする
  • G9:使われていないコードを削除する
  • G10:変数は使用箇所の近くに置く
  • G11:一貫性を保つ
  • G12:余計なものを取り除く
  • G13:人為的な結合を避ける
  • G14:フィーチャー・エンヴィーを避ける
  • G15:セレクター引数を使わない
  • G16:意図を曖昧にしない
  • G17:期待される場所にコードを書く
  • G18:インスタンスメソッドを優先する
  • G19:説明的な変数を使う
  • G20:関数名で処理内容を示す
  • G21:アルゴリズムを理解する
  • G22:依存関係を物理的に明示する
  • G23:if/else よりポリモーフィズムを優先する
  • G24:規約に従う(TypeScript スタイルガイドと ESLint/Prettier)
  • G25:マジックナンバーではなく、名前付き定数を使う
  • G26:正確さを保つ
  • G27:規約より構造を重視する
  • G28:条件式をカプセル化する
  • G29:否定条件を避ける
  • G30:関数は 1 つのことだけを行う
  • G31:時間的結合を明示する
  • G32:恣意的な設計を避ける
  • G33:境界条件をカプセル化する
  • G34:関数ごとに抽象化レベルを 1 つにする
  • G35:設定は高いレベルに置く
  • G36:デメテルの法則(メソッドチェーンを避ける)

TypeScript 固有(TS1-TS3)

これらは、Java 固有のルール(J1-J3)を TypeScript の規約に合わせて適用したものです。

  • TS1:インポートを明示的かつ安定した状態に保ち、名前空間形式の過度な使用や暗黙の依存関係を避ける
  • TS2:マジック定数ではなく、列挙型またはリテラルユニオン型を使う
  • TS3:公開インターフェースの型を明示し、境界では any を避ける

名前(N1-N7)

  • N1:説明的な名前を選ぶ
  • N2:適切な抽象化レベルの名前を付ける
  • N3:標準的な命名を使う
  • N4:曖昧でない名前を付ける
  • N5:スコープに合った長さの名前を付ける
  • N6:エンコーディングを使わない
  • N7:副作用を名前で示す

テスト(T1-T9)

  • T1:壊れる可能性のあるものをすべてテストする
  • T2:カバレッジツールを使う
  • T3:些細なテストも省略しない
  • T4:テストを無視する場合は、曖昧さがないか確認する
  • T5:境界条件をテストする
  • T6:バグが発生しやすい箇所を網羅的にテストする
  • T7:失敗にパターンがないか確認する
  • T8:デバッグ時にカバレッジを確認する
  • T9:テストは高速でなければならない(1 件あたり 100 ms 未満)

クイックリファレンス表

カテゴリールール一言で
コメントC1メタデータを書かない(Git を使う)
C3冗長なコメントを書かない
C5コメントアウトしたコードを書かない
関数F1引数は最大 3 つ
F3フラグ引数を使わない
F4使われていない関数を削除する
一般G5DRY(重複をなくす)
G9使われていないコードを削除する
G16意図を曖昧にしない
G23if/else よりポリモーフィズムを優先する
G25マジックナンバーではなく、名前付き定数を使う
G30関数は 1 つのことだけを行う
G36デメテルの法則(ドット 1 つ)
名前N1説明的な名前を付ける
N5スコープに合った長さの名前を付ける
テストT5境界条件をテストする
T9テストを高速にする

アンチパターン(しない → する)

❌ しない✅ する
すべての行にコメントを付ける明らかなコメントを削除する
1 行だけの処理にヘルパーを作るコードをインライン化する
あらゆる場所で import * as utils を使う依存関係を明示するために名前付きインポートを使う
公開 API で any を使う具体的な型、または絞り込みを伴う unknown を使う
マジックナンバー 86400const SECONDS_PER_DAY = 86400
process(data, true)processVerbose(data)
深いネストガード節と早期リターン
obj.a.b.c.valueobj.getValue()
100 行を超える関数責務ごとに分割する

AI の振る舞い

コードをレビューするときは、ルール番号を示して違反を特定してください(例:「G5 違反:ロジックの重複」)。 コードを修正または編集するときは、何を修正したかを報告してください(例:「修正済み:マジックナンバーを SECONDS_PER_DAY に抽出しました(G25)」)。

コメント