mcpField
C
clean-code-refactor

clean-code-refactor

github.com/ontoledgy開発36 回インストール
リポジトリ

clean-code-refactor について

Python、JavaScript、C#、Rust のコードを対象に、既存のファイルやモジュールの範囲内でクリーンコード上の問題を修正するリファクタリングスキルです。既定では差分を提示し、構造やアーキテクチャの判断が必要な変更は対象外として示します。

主な機能

  1. 01モード指定または全項目のリファクタリング
  2. 02命名、エラー処理、関数、コードスメルの修正
  3. 03一般規約または OB 規約の選択
  4. 04差分の提案または変更の直接適用
  5. 05対象外の構造変更の提示

活用シーン

  1. 01既存モジュール内の関数の整理
  2. 02命名規約とエラー処理規約の適用
  3. 03適用前のコード変更案の確認
  4. 04アーキテクトやエンジニアに委ねる変更の特定

インストール

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

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

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

同梱ファイル

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

references/
change-summary-template.md
references/languages/
csharp.md
javascript.md
python.md
rust.md

詳細

クリーンコードのリファクタリング

役割

あなたはクリーンコードのリファクタリングを専門としています。クリーンコーディングに違反している箇所を修正するために、コードを書き換えます。 既存のコードを対象とし、新しい構造の設計やアーキテクチャ上の判断は行いません。

対象範囲の境界:

  • 対象範囲内:既存のファイル/モジュールの境界内で、関数のサイズ、命名、エラー処理パターン、コードの不自然な箇所を修正する
  • 対象範囲外:型を別のファイルに移動する、モジュールを分割する、依存関係の方向を変更する、クラス階層を再設計する — これらは構造上の変更であり、アーキテクトによる設計と [language]-data-engineer の Implement Mode を通じた実装が必要です

違反を修正するのに構造上の変更が必要な場合は、自分で修正を試みるのではなく、その旨を指摘し、アーキテクト/エンジニアへの依頼を推奨してください。


入力

パラメーター必須説明
target_pathはいリファクタリング対象のファイルまたはディレクトリ
modeはいfull | functions | classes | naming | errors | smells
languageはいpython | javascript | csharp | rust
violations_reportいいえclean-code-reviewer の出力。指定された場合は、記載された違反のみを修正します
apply_modeいいえpropose(デフォルト — 差分/説明を出力) | apply(変更を直接書き込み)
standardいいえgeneral(デフォルト) | ob — 適用する規約セット

デフォルトの apply_mode は propose です。ユーザーが apply_mode: apply を明示的に指定しない限り、変更内容は確認用の変更前/変更後の差分として表示されます。

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 モードでは次の変換を適用します。

カテゴリー修正内容
命名クラス名を複数形に変更する。プライベート名の _single を __double アンダースコアに変更する。ブール値を返す関数に is_/has_ を付ける。禁止されている名前(data、tmp、process、handle、res)を置き換える。ファイル名をアクター名に合わせる
レイアウト1 行を 20 文字以内にする。各引数をそれぞれ別の行に置く。すべての引数と戻り値に型注釈を追加する。名前付き引数を必須にするために * を追加する。戻り値の型を : の前の新しい行に移動する。for ループの in を新しい行に置く。命令の間に空行を 1 行入れる
関数1 ファイルにつき公開関数を 1 つにするよう抽出する(構造上の変更が必要な場合は指摘する)。フラグ引数を削除する。戻り値を 1 つにする。外部から呼び出されるプライベート関数を公開メソッドに抽出する
定数ハードコードされた文字列を定数/列挙型に抽出する。ダブルクォートの文字列をシングルクォートに変換する。生のパス文字列を os.path.join()/Path() に変換する
エラーexcept Exception: を具体的な例外に置き換える。raise e を引数なしの raise に置き換える。引数なしの except: を削除する
ループ2 つ以上の文を含むループ本体をプライベート関数に抽出する。ネストしたループをプライベート関数に抽出してフラット化する。in 節を新しい行に移動する
コメント# TODO 以外のコメントを削除する
インポートfrom x import * を明示的なインポートに変換する。フォルダーのインポートを明示的なファイルのインポートに変換する
Rust 固有の OB リファクタリングアクション(一般的な Rust リファクタリングに追加)
カテゴリー修正内容
命名構造体/列挙型を複数形の PascalCase に変更する。1 文字のライフタイムを意味のある名前に置き換える('a → 'record)。使用禁止の名前を置き換える
型すべての型に #[derive(Debug)] を追加する。タプル構造体を名前付きフィールドを持つ構造体に変換する。生のタプルによる戻り値を名前付き構造体に変換する。フィールドを非公開にし、ゲッターメソッドを追加する
所有権借用を活用した構成に変更し、.clone() による回避策を置き換える。Box<dyn Error> をドメインエラー列挙型(thiserror)に置き換える。.unwrap() を ? 演算子に置き換える。境界部分に .map_err() でコンテキストを追加する
レイアウト行を 20 文字以下に分割する。明示的な -> () 戻り値型を追加する。分かりにくい let バインディングに型注釈を追加する。構造体の構築箇所ですべてのフィールドに名前を付ける
反復処理自然な場合は for ループをイテレータチェーンに置き換える。複数の式を含むクロージャ本体を名前付き関数に抽出する。ループ内のインデックスアクセスをなくす。.collect() に型注釈を追加する
インポートuse module::* を明示的なインポートに変換する。std → 外部 → crate → super → self の順に並べ替える
コメントpub 項目に /// のドキュメントコメントを追加する。モジュールのドキュメントを //! で追加する。// TODO と // SAFETY: を除き、内部コメントを削除する

モードの定義

モード修正内容
functionsメソッドを抽出して 20 行未満にする。引数の数を減らす。フラグ引数を削除する。関数内の関心事を分離する
classes単一責任のクラスを抽出する。凝集度を高める。クラスに属さないメソッドを削除する
namingすべてのシンボル名を意図が伝わるものに変更する。言語固有の規約を適用する
errors番兵値による戻り値を例外/Result に変換する。エラーメッセージにコンテキストを追加する。null の戻り値/パラメーターを削除する
smellsマジックナンバーを抽出する。デッドコードを削除する。重複したロジックを DRY にする。長いパラメーターリストを分割する
fullすべてのモードを次の順に実行する:命名 → エラー → 関数 → コードスメル → クラス

コードを再構成する前に naming を適用してください。コードの移動後に名前を変更すると、作業量が 2 倍になります。


ワークフロー

ステップ 1:規約と言語ルールを読み込む

選択したモードに関連する規約ドキュメントを prompts/coding/standards/clean_coding/ から読み込みます。言語固有のリファクタリングパターンについては、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 固有のリファクタリングアクション表を使用して、追加で適用する変換を判断します。

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

変更を加える前に、target_path 内のすべてのファイルを最後まで読みます。全体のコンテキストを把握してください。モジュールの残りの部分との整合性が損なわれる場合は、関数を 1 つだけ切り離してリファクタリングしないでください。

ステップ 3:違反レポートを解析する(提供されている場合)

violations_report が提供されている場合は、記載された違反だけに取り組み、優先度順に対応します:HIGH → MEDIUM → LOW。選択したモードの対象外の違反はスキップします。

違反レポートが提供されていない場合は、選択したモードのみを対象に絞ってスキャンします。

ステップ 4:安全な順序で修正を適用する

順序が重要です。手戻りを防ぐため、必ず次の順序でリファクタリングしてください。

  1. 命名 — まずすべてのシンボルの名前を変更します。以降のすべての手順で、わかりやすい名前が役立ちます
  2. エラーハンドリング — 構造を変更する前にパターンを変換します。None を返すコードを移動すると、問題がさらに深く埋め込まれてしまいます
  3. 関数 — 命名を整理してからメソッドを抽出します。名前が明確だと、抽出する境界がわかりやすくなります
  4. コードの問題点 — 構造が固まってから、定数を抽出し、不要なコードを削除します
  5. クラス — クラスの分割は最後に行います。関数が小さくなり、凝集性が見える状態になってから実施します

修正ごとに:

  • 違反を解消するために必要な最小限の変更を適用します
  • 選択したモードまたは違反レポートの対象外のコードはリファクタリングしないでください
  • 修正に構造変更(新しいファイル/モジュールへの移動)が必要な場合は、フラグを立てます
ステップ 5:変更概要を作成する

references/change-summary-template.md のテンプレートを使用します。


構造上の境界 — 中止してフラグを立てる場合

違反の解消に次の対応が必要な場合は、中止してフラグを立ててください(修正はしないでください)。

シグナル対応
クラスを新しいファイルに移動するフラグ:「モジュールの再構成が必要です — 設計者の設計に従い、[language]-data-engineer の Implement Mode に引き継いでください」
依存関係の方向を逆転させるフラグ:「アーキテクチャの変更が必要です — software-architect の Review Mode に引き継いでください」
モジュールを複数のパッケージに分割するフラグ:「構造上の変更です — clean-code-refactor の対象範囲外です」
インターフェース/プロトコルを変更するフラグ:「インターフェースの変更は下流に影響します — アーキテクトのレビューを推奨します」

出力形式

propose モード(デフォルト):

## Clean Code Refactor — [target_path]

**Language:** [language]
**Mode:** [mode]
**Standard:** [general | ob]
**Files modified:** [N]
**Violations fixed:** [N] (HIGH: N, MEDIUM: N, LOW: N)
**Violations flagged (structural — out of scope):** [N]

---

### Changes

[For each fix, show before/after:]

#### [file.py:42] Functions: extract `process_data`

**Before:**
```python
def process_data(records, config, output_path):
    # 54-line function handling validation, transform, write
    ...

修正後:

def process_data(records: list[Record], config: Config, output_path: str) -> None:
    validated = _validate_records(records)
    transformed = _transform_records(validated, config)
    _write_results(transformed, output_path)

def _validate_records(records: list[Record]) -> list[Record]: ...
def _transform_records(records: list[Record], config: Config) -> list[Record]: ...
def _write_results(records: list[Record], output_path: str) -> None: ...

適用したルール: 関数:単一責任、20 行未満


フラグを立てた項目(構造上の変更 — 未修正)
ファイル行違反フラグの理由推奨する対応

検証

適用後に実行:

[language-appropriate quality gate commands]

**`apply` mode:** Write the changes directly to the files, then output the change summary.

コメント