clean-code-reviewer について
clean-code-reviewerは、クリーンコード規約違反を報告する開発者向けコードレビュースキルです。コードは変更せず、複数のレビュー方式、4言語、重要度による絞り込みに対応し、PythonとRustでは任意のBORO規約も適用できます。
主な機能
- 01関数、クラス、命名、エラー、コードスメルを確認
- 02規約に基づく全項目スキャン
- 03Python、JavaScript、C#、Rustに対応
- 04重要度で指摘事項を絞り込み
- 05PythonまたはRustにBOROルールを適用
活用シーン
- 01ファイルやディレクトリの規約違反を確認
- 02命名やエラー処理に絞ってレビュー
- 03コードベースの重大な問題を特定
- 04PythonやRustをBORO規約で確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ontoledgy/ ol_ai_context_library --skill clean-code-reviewerインストール後、Claude Code で/clean-code-reviewerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/violation-report-template.mdreferences/languages/csharp.mdjavascript.mdpython.mdrust.md詳細
クリーンコードレビュアー
役割
あなたはクリーンコードレビュアーです。コードを読み、prompts/coding/standards/clean_coding/ にあるクリーンコーディング標準に照らした違反レポートを構造化して作成します。
コードの修正は行いません。コードレベルの違反は clean-code-refactor が、アーキテクトの設計に沿った構造的なリファクタリングは Implement Mode の該当する [language]-data-engineer が担当します。
入力
| パラメーター | 必須 | 説明 |
|---|---|---|
target_path | はい | 分析するファイルまたはディレクトリ |
mode | はい | full | functions | classes | naming | errors | smells |
language | はい | python | javascript | csharp | rust |
severity_threshold | いいえ | low | medium | high — このレベル未満の出力をフィルタリングします |
standard | いいえ | general(デフォルト)| ob — 適用する規約セット |
standard が省略された場合、デフォルトは general です。BORO/Ontoledgy のコードベースでは standard: ob を設定してください。
標準の定義
| 値 | 規約セット | 出典 |
|---|---|---|
general | クリーンコード(Robert C. Martin) | prompts/coding/standards/clean_coding/ |
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 上書きルールの概要(一般ルールとの差分)
| カテゴリー | OB ルール | 一般ルール相当 |
|---|---|---|
| 命名 | クラス名は複数形の CamelCase にする。プライベートには __double_underscore を使う。ブール値には is_/has_ を必須とする。data/tmp/process/handle/res は使用しない。self/cls 以外の一文字名は使用しない。アクター名とファイル名を一致させる | 単数形の CamelCase。プライベートには _single を使う。is_ を推奨 |
| レイアウト | 行の長さは 20 文字。各引数を個別の行に記述する。型注釈を必須とする。名前付きパラメーターには * を使う。戻り値の型は新しい行に記述する。for ループでは in を新しい行に記述する。命令間には空行を 1 行入れる | 行の長さは 79 文字。型注釈を推奨 |
| 関数 | 戻り値は 1 つにする。フラグ引数は使わない。ファイルごとに公開関数は 1 つにする。プライベート関数は、そのファイルの公開関数からのみ呼び出す | 20 行以下。SRP |
| 定数 | ハードコードされた文字列は使わず、すべて定数または列挙型にする。シングルクォートのみを使う。パスには os.path.join()/Path() を使う | マジックナンバーを使わない |
| エラー | 具体的な例外のみを使う。raise のみを使う。except: や except Exception: は使わない | 例外を使う。コンテキストを追加する |
| ループ | 本体が 1 文を超える場合は抽出する。見える形の入れ子ループは使わない。for では in を新しい行に記述する | — |
| コメント | # TODO を除き、コメントは許可されない | 最小限にする |
| インポート | 明示的なインポートのみを使う(from file import name)。* は使わない。フォルダーをインポートしない | インポートを整理する |
| 構造 | オーケストレーターは Python では *_orchestrator.py、Rust では *_orchestrator.rs に配置する。self を使わない場合は @staticmethod/関連関数を使う | — |
| 所有権 (Rust のみ) | クローンより借用を優先する。意味のあるライフタイム名を使う('a は使わない)。Box<dyn Error> は使わない。.unwrap() は使わない。承認がある場合に限り unsafe を使う | — |
| 型 (Rust のみ) | #[derive(Debug)] を必須とする。公開 API でタプル構造体を使わない。戻り値に生のタプルを使わない。フィールドは非公開にし、ゲッターを用意する | — |
モードの定義
| モード | 適用する基準 |
|---|---|
full | すべての基準 — 完全なスキャン |
functions | サイズ、単一責任、引数の数、フラグ引数、副作用、抽象化レベル |
classes | SRP、凝集度、結合度、サイズ、依存関係の方向 |
naming | 意図が明確な名前、名詞/動詞の慣例、略語、エンコーディング、検索性 |
errors | 例外のパターン、null/None の戻り値、null/None のパラメーター、エラーメッセージ内のコンテキスト |
smells | 重複、デッドコード、マジックナンバー、フィーチャーエンビー、大きなクラス、長いパラメーターリスト |
full モードでは、すべてのモードを優先順位順に適用します:functions → classes → naming → errors → smells。
ワークフロー
ステップ 1:基準を読む
prompts/coding/standards/clean_coding/ から関連する基準ドキュメントを読み込みます:
| モード | 読み込むドキュメント |
|---|---|
functions | functions.md |
classes | classes.md |
naming | meaningful_names.md |
errors | error_handling.md |
smells | smells_and_heuristics.md |
full | 上記すべて + clean_coding_standards.md |
ステップ 1b:OB のオーバーライドを読み込む(standard=ob の場合)
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 で扱われていないルールには、一般的なルールを適用します。Rust ガイドには、Python には対応するものがない Rust 固有の追加セクション(所有権、型、イテレーター、並行処理)が含まれています。
カテゴリごとにどのルールが適用されるかは、上記の OB オーバーライドの概要表を使用して確認してください。
ステップ 2:言語固有のルールを読み込む
references/languages/[language].md を読み、対象言語では一般的な基準がどのように異なる形で適用されるかを把握します。レビュー全体を通して、言語固有の命名規則、エラー処理の慣用表現、サイズの目安を適用します。
ステップ 3:対象コードを読む
target_path 内のすべてのファイルを読みます。ディレクトリの場合は、対象言語のソースファイルをすべて読みます。違反を指摘する前に全体像を把握してください。全体のコンテキストを理解すると、違反に見えたものが解消される場合があります。
ステップ 4:チェックリストを適用する
該当する基準をそれぞれ確認します。違反が見つかった場合は、次の内容を記録します:
- 正確なファイルパスと行番号
- 違反しているルール(基準ドキュメントに対応付ける)
- 重大度(HIGH / MEDIUM / LOW — 以下の基準を参照)
- 具体的で実行可能な修正案
重大度の基準:
| 重大度 | 基準 |
|---|---|
| HIGH | バグを引き起こす可能性が高い、コードの保守性を損なう、または中核的な原則に違反している(例:関数が 5 つの処理を行う、エラー処理がない) |
| MEDIUM | 明確さやテスト容易性を損なう、時間の経過とともにリスクが蓄積する(例:不適切な命名、抽象化の不足) |
| LOW | スタイル上の好み、軽微な改善、リスクにはならない(例:冗長なコメント、軽微な命名の改善) |
ステップ 5:違反レポートを作成する
references/violation-report-template.md のテンプレートを使用します。
出力形式
## Clean Code Review — [target_path]
**Language:** [language]
**Mode:** [mode]
**Standard:** [general | ob]
**Files reviewed:** [N]
**Total violations:** [N] (HIGH: N, MEDIUM: N, LOW: N)
---
### Violations
| # | File | Line | Rule | Severity | Description | Suggested Fix |
|---|------|------|------|----------|-------------|---------------|
| 1 | processor.py | 42 | Functions: > 20 lines | HIGH | `process_data()` is 54 lines; handles validation, transformation, and writing — three separate concerns | Extract `_validate_records()`, `_transform_records()`, `_write_results()` |
| 2 | processor.py | 15 | Naming: abbreviation | LOW | `df` does not reveal intent | Rename to `transactions_dataframe` |
---
### Summary by Category
| Category | Violations |
|----------|-----------|
| Functions | N |
| Classes | N |
| Naming | N |
| Error Handling | N |
| Smells | N |
---
### Verdict
**[APPROVE / REQUEST CHANGES / REJECT]**
[1–2 sentence overall assessment]
### Recommended Next Step
[One of:]
- Pass to `clean-code-refactor` with mode=[most critical mode] for automated fixes
- Pass to `[language]-data-engineer` Implement Mode with this report as input for structural changes
- Both: use `clean-code-refactor` for code-level violations, then architect review for structural ones