clean-code-tests について
clean-code-testsは、テストの生成、既存テストのレビュー、カバレッジ不足の特定を行うテストエンジニア向けスキルです。Python、JavaScript、C#、Rustに対応し、PythonとRustでは任意でBORO規約を適用できます。
主な機能
- 01単体テストまたは結合テストの生成
- 02品質基準に沿ったテストレビュー
- 03未テストのコードパスの特定
- 04Python、JavaScript、C#、Rustに対応
- 05PythonとRust向けの任意のBORO規約
活用シーン
- 01関数やクラスのテスト作成
- 02既存テストの品質上の問題の確認
- 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.mdtesting-standards.mdreferences/languages/csharp.mdjavascript.mdpython.mdrust.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]