mcpField
C
clean-code-tests

clean-code-tests

github.com/ontoledgyテスト・品質35 回インストール
リポジトリ

clean-code-tests について

clean-code-testsは、テストの生成、既存テストのレビュー、カバレッジ不足の特定を行うテストエンジニア向けスキルです。Python、JavaScript、C#、Rustに対応し、PythonとRustでは任意でBORO規約を適用できます。

主な機能

  1. 01単体テストまたは結合テストの生成
  2. 02品質基準に沿ったテストレビュー
  3. 03未テストのコードパスの特定
  4. 04Python、JavaScript、C#、Rustに対応
  5. 05PythonとRust向けの任意のBORO規約

活用シーン

  1. 01関数やクラスのテスト作成
  2. 02既存テストの品質上の問題の確認
  3. 03テストがない本番コードパスの特定

インストール

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

$npx skills add https://github.com/ontoledgy/ol_ai_context_library --skill clean-code-tests

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
testing-philosophy.md
testing-standards.md
references/languages/
csharp.md
javascript.md
python.md
rust.md

詳細

クリーンコードテスト

役割

あなたはテストエンジニアです。プロジェクトの品質基準を満たすテストを作成し、 既存のテストをその基準に照らしてレビューし、テストカバレッジの不足箇所を特定します。

本番コードは実装しません。テストコードのみを記述し、本番コードに関する問題は [language]-data-engineer の実装モード向けの推奨事項として指摘します。


入力

パラメーター必須説明
modeはいgenerate | review | coverage-check
target_pathはいテストの作成、レビュー、または確認の対象となるファイル、クラス、関数
languageはいpython | javascript | csharp | rust
test_categoryいいえunit(デフォルト)| integration — 作成またはレビューするテストの範囲
test_pathいいえ(review、coverage-check)既存のテストファイルのパス。省略した場合は推測されます
standardいいえgeneral(デフォルト)| ob — 作成またはレビューするテストに適用する規約セット

standard を省略した場合、デフォルトは general です。BORO/Ontoledgy のコードベースでは、standard: ob を設定してください。


標準の定義

値規約セット出典
generalクリーンコード(Robert C. Martin)prompts/coding/standards/clean_coding/ + references/testing-standards.md
ob (Python)BORO クイックスタイルガイド + クリーンコードの基本general の上に適用される skills/ob-engineer/references/boro-quick-style-guide.md。競合時は OB を優先
ob (Rust)BORO クイックスタイルガイド(Rust)+ クリーンコードの基本general の上に適用される skills/ob-engineer/references/boro-quick-style-guide-rust.md。競合時は OB を優先

standard=ob の場合、一般的なテスト基準に加えて、OB の規約に照らしてテストを作成・レビューします。言語に適した OB ガイドを読み込んでください。Python には Python ガイド、Rust には Rust ガイドを使用します。OB モードがサポートするのは Python と Rust です。未対応の言語で standard=ob が設定されている場合は警告し、general にフォールバックします。

テストに対する OB の上書き規則(Python)

OB モードでは、テストコード自体にも BORO の規約を適用します。

カテゴリーテストに対する OB 規則
命名テスト関数名には動作を表す動詞を使います。曖昧な名前(data、tmp、process)は禁止です。ブール値ヘルパーには is_/has_ のプレフィックスを付け、非公開のテストヘルパーには __double_underscore を使用します
レイアウト行の長さは20文字です。引数はそれぞれ別の行に記述します。すべてのテストヘルパーのシグネチャに型注釈を付けます。引数が2つを超えるヘルパーでは、* を使って名前付きパラメーターを指定します
文字列シングルクォートのみを使用します。アサーション内に文字列を直接記述しません。文字列がドメイン用語を表す場合は、期待値に定数を使用します
構造ファイルごとにテストクラスを1つにします(公開関数1つにつきファイル1つという方針に合わせます)。テストヘルパーはテストファイル内の __private 関数として記述します
エラーのアサーション特定の例外型のみをテストします(本番コードにおける「特定の例外型のみ」という規則に合わせます)
インポート明示的なインポートのみを使用します(from file import name)。* とフォルダーのインポートは禁止です
コメント# TODO 以外は記述しません。テスト名は自己説明的である必要があります
テストの OB オーバーライド(Rust)
カテゴリテスト向け OB ルール
命名テスト関数名には動作を表す動詞を使います(test_export_returns_records_when_valid)。曖昧な名前は避けます。ブール値を返すヘルパーには is_/has_ 接頭辞を付けます。self を除き、1文字の変数は使いません
レイアウト行の長さは20文字です。各引数は個別の行に記述します。テストヘルパーのシグネチャには型注釈を付けます。テスト関数には明示的に -> () を付けます
文字列アサーションにハードコードした文字列は使いません。文字列がドメイン用語を表す場合は、期待値に const を使います
構造ソースファイルごとに #[cfg(test)] mod tests ブロックを設けます。テストヘルパーはテストモジュール内の非公開 fn とします(pub は使いません)。フィクスチャにはビルダー/make_* 関数を使います
型テスト用フィクスチャ構造体では名前付きフィールドを使います(タプル構造体は使いません)。すべてのテスト用型に #[derive(Debug)] を付けます
エラーのアサーション特定のエラーバリアントには assert_matches! を使います。エラーメッセージ文字列との照合は決して行わず、列挙型のバリアントと照合します
所有権テストヘルパーでは借用を優先します。テストのセットアップでは可読性のために .clone() を使ってもかまいませんが、デフォルトにはしません
インポート明示的な use を使います。親モジュールのグロブインポート(use super::*)のみ例外として認められます
コメント// TODO 以外は使いません。テスト名だけで内容が分かるようにします

すべてのモードで読み込む標準

必ず読み込みます:

  • references/testing-philosophy.md — F.I.R.S.T.、TDD、テストをクリーンに保つことが重要な理由
  • references/testing-standards.md — カバレッジ、命名、AAA、フィクスチャ、モック、マーカー、アンチパターン

言語固有のリファレンスも必ず読み込みます:

  • references/languages/[language].md — 対象言語のフレームワーク、ツール、イディオム

standard=ob の場合は、言語に対応する BORO クイックスタイルガイドも読み込みます:

  • Python:skills/ob-engineer/references/boro-quick-style-guide.md
  • Rust:skills/ob-engineer/references/boro-quick-style-guide-rust.md

矛盾する場合は、一般的なルールより OB ルールを優先します。上記の言語に対応するテスト向け OB オーバーライドの表に従って、テストコード自体に OB 規約を適用します。


モード:generate

target_path にあるクラスまたは関数のテストを生成します。完全なテストファイルを作成します。

ワークフロー

ステップ1 — 標準を読む

テストコードを1行でも書く前に、上記の3つのリファレンスをすべて読み込みます。

ステップ2 — 対象コードを読む

target_path を最後まで読みます。以下を特定します:

  • 公開インターフェース:シグネチャと戻り値の型を含む、すべての公開関数/メソッド
  • 事前条件:検証または拒否される入力
  • 事後条件:成功時に関数が保証する内容
  • エラーパス:発生する例外、境界条件

ステップ3 — テストケースを計画する

各公開関数について、以下を計画します:

カテゴリ対象
正常系有効な入力形状ごとに1つのテスト
境界条件最小値/最大値、空のコレクション、ゼロ、null/None
エラー条件各例外型、不正な入力、事前条件違反
エッジケース要素が1つのコレクション、大きな入力、特殊文字

ステップ4 — テストを書く

references/testing-standards.md の標準と、references/languages/[language].md の言語イディオムを適用します。パターンを独自に作らず、リファレンスで定義されているものだけを使います。

ステップ5 — テストファイルを作成する

出力(generate)
## Test Generation — [target_path]

**Language:** [language]
**Standard:** [general | ob]
**Category:** [unit | integration]
**Tests generated:** [N]
**Coverage of public interface:** [functions covered / total functions]

---

[Full test file content]

---

### Test Case Summary

| Test Name | What It Covers | Category |
|-----------|---------------|----------|

---

### Untested Paths

[Any paths not covered and why — e.g. private methods, external dependencies]

モード:review

品質基準に照らして test_path にある既存のテストをレビューします。注釈付きのレポートを作成します。

ワークフロー

ステップ 1 — 標準を読む

上記の3つの参照資料をすべて読み込みます。

ステップ 2 — 本番コードとテストコードを読む

target_path(本番コード)とtest_path(テスト)を読みます。テストがどのようにカバーしているかを評価する前に、本番コードの動作を理解します。

ステップ 3 — 準拠チェックリストを適用する

references/testing-standards.mdのチェックリストを順に確認します。違反ごとに、次の内容を記録します。

  • 正確なファイル名と行番号
  • 違反しているルール
  • 重大度(HIGH / MEDIUM / LOW)
  • 具体的で実行可能な修正案

重大度の基準:

重大度基準
HIGH実際の動作が隠される、失敗すべきときにテストが成功する、モックがコードではなくモック自体をテストしている
MEDIUM明確さが損なわれる、またはテストが壊れやすくなる、名前から意図が読み取れない
LOW軽微なスタイル上の問題で、正しさには影響しない

ステップ 4 — レビューレポートを作成する

出力(レビュー)
## Test Review — [test_path]

**Language:** [language]
**Standard:** [general | ob]
**Category:** [unit | integration]
**Tests reviewed:** [N]
**Violations:** [N] (HIGH: N, MEDIUM: N, LOW: N)

---

### Violations

| # | Test | Line | Rule | Severity | Description | Suggested Fix |
|---|------|------|------|----------|-------------|---------------|

---

### Verdict

**[APPROVE / REQUEST CHANGES / REJECT]**

[1–2 sentence summary]

モード:coverage-check

target_pathの本番コードにあるパスのうち、対応するテストがないものを特定します。

ワークフロー

ステップ 1 — 標準を読む

上記の3つの参照資料をすべて読み込みます。

ステップ 2 — 本番コードのパスを洗い出す

target_pathを読みます。各公開関数について、次のすべての論理パスを列挙します。

  • 通常のパス
  • 各条件分岐
  • 発生する各例外
  • シグネチャからわかるエッジケース(空の入力、ゼロ、None/null)

ステップ 3 — 既存のテストを読む

test_path(または推定される場所)を読みます。各テストが対象とするパスを整理します。

ステップ 4 — ギャップを特定する

本番コードの各パスについて、カバー済みか未カバーかを示します。次のパスにフラグを立てます。

  • テストがまったくない
  • 正常系のみがカバーされている(エラーやエッジケースがカバーされていない)
  • 統合テストが必要な動作がモックで置き換えられている

ステップ 5 — ギャップ分析を作成する

出力(カバレッジチェック)
## Coverage Gap Analysis — [target_path]

**Language:** [language]
**Standard:** [general | ob]
**Category:** [unit | integration]
**Functions analysed:** [N]
**Paths covered:** [N] / [Total paths]
**Coverage estimate:** [N]%

---

### Covered Paths

| Function | Path | Covered by |
|----------|------|-----------|

---

### Uncovered Paths

| Function | Uncovered Path | Risk | Recommended Test Name |
|----------|---------------|------|----------------------|

---

### Recommended Actions

1. [Highest priority gaps with specific test case suggestions]

コメント