clean-general について
clean-generalは、一般的なクリーンコード原則に沿ったコードレビュー用スキルです。特にAI生成コードを対象に、意図の明確さや重複の回避、設計と境界条件を確認します。
主な機能
- 01知識の重複を避ける
- 02明確で意図の伝わる表現を優先
- 03条件分岐よりポリモーフィズムを選ぶ
- 04マジックナンバーを名前付き定数にする
- 05関数の責務を絞る
- 06境界条件を確認し不要コードを削除
活用シーン
- 01AI生成コードの重複をレビュー
- 02不明瞭または複雑すぎるコードの発見
- 03関数が単一の責務か確認
- 04境界条件や不要コードの点検
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ertugrul-dmr/ clean-code-skills --skill clean-generalインストール後、Claude Code で/clean-generalを入力して読み込まれたか確認します。
詳細
一般的なクリーンコードの原則
重要なルール
G5:DRY(Don't Repeat Yourself)
あらゆる知識は、信頼できる唯一の表現を持つべきです。
# Bad - duplication
tax_rate = 0.0825
ca_total = subtotal * 1.0825
ny_total = subtotal * 1.07
# Good - single source of truth
TAX_RATES = {"CA": 0.0825, "NY": 0.07}
def calculate_total(subtotal: float, state: str) -> float:
return subtotal * (1 + TAX_RATES[state])
G16:意図を曖昧にしない
巧妙さを求めず、明確にしましょう。
# Bad - what does this do?
return (x & 0x0F) << 4 | (y & 0x0F)
# Good - obvious intent
return pack_coordinates(x, y)
G23:if/else よりポリモーフィズムを優先する
# Bad - will grow forever
def calculate_pay(employee):
if employee.type == "SALARIED":
return employee.salary
elif employee.type == "HOURLY":
return employee.hours * employee.rate
elif employee.type == "COMMISSIONED":
return employee.base + employee.commission
# Good - open/closed principle
class SalariedEmployee:
def calculate_pay(self): return self.salary
class HourlyEmployee:
def calculate_pay(self): return self.hours * self.rate
class CommissionedEmployee:
def calculate_pay(self): return self.base + self.commission
G25:マジックナンバーを名前付き定数に置き換える
# Bad
if elapsed_time > 86400:
...
# Good
SECONDS_PER_DAY = 86400
if elapsed_time > SECONDS_PER_DAY:
...
G30:関数は1つのことだけを行うべきです
別の関数に切り出せるなら、その関数は複数のことを行っています。
G36:デメテルの法則(連鎖呼び出しを避ける)
# Bad - reaching through multiple objects
output_dir = context.options.scratch_dir.absolute_path
# Good - one dot
output_dir = context.get_scratch_dir()
適用状況チェックリスト
AI が生成したコードをレビューするときは、次の点を確認してください。
- 重複がない(G5)
- 意図が明確で、マジックナンバーがない(G16、G25)
- 条件分岐よりポリモーフィズムを優先している(G23)
- 関数が1つのことだけを行っている(G30)
- デメテルの法則に違反していない(G36)
- 境界条件が処理されている(G3)
- デッドコードが削除されている(G9)
コメント
Markdown 対応