はじめに
「古いコード、動いてるからそのままでいい」
え、まだスパゲッティコードを放置してるんですか?技術的負債は放置するほど修正コストが指数関数的に増えます
この記事で解決すること
動画「【AI】AIリファクタリングで技術的負債を一掃」の補足記事です。
動画では時間の都合で触れられなかった詳細を解説します。
問題:なぜこれが危険なのか
え、まだスパゲッティコードを放置してるんですか?技術的負債は放置するほど修正コストが指数関数的に増えます
解決策:明日から使えるベストプラクティス
AIに『このコードをSOLID原則に従ってリファクタリングして』と貼り付けるだけ
以下は、「スパゲッティコードをAIでSOLID原則に沿ってリファクタリングする」というテーマの具体例です。
問題:なぜこれが危険なのか
え、まだスパゲッティコードを放置してるんですか?
技術的負債は放置するほど修正コストが指数関数的に増えていきます。
- バグ修正すると別の場所が壊れる
- 新機能追加に何日もかかる
- 新人がコードを理解できない
- テストが書けない
こうした状態を改善する第一歩として、AIにコードを渡してSOLID原則に沿ったリファクタリング案を出してもらうのは有効です。
スパゲッティコード(Before)
def process_order(order):
total = 0
for item in order["items"]:
total += item["price"] * item["qty"]
if order["member"]:
total *= 0.9
print("注文金額:", total)
with open("order.log", "a") as f:
f.write(str(order) + "\n")
print("メール送信")
問題点
- 金額計算
- 割引計算
- ログ出力
- メール送信
すべてが1つの関数に集中しています。
そのため
- 修正しにくい
- テストしにくい
- 再利用できない
典型的なスパゲッティコードです。
AIへのプロンプト
以下のコードをSOLID原則に従ってリファクタリングしてください。
・Single Responsibility Principle(単一責任)
・Open/Closed Principle(拡張に開く)
・Dependency Injectionを利用
・可読性向上
・型ヒント追加
・ユニットテストしやすい設計
改善点も説明してください。
AIによる改善後(After)
from dataclasses import dataclass
@dataclass
class Item:
price: float
quantity: int
class PriceCalculator:
def calculate(self, items, member=False):
total = sum(
item.price * item.quantity
for item in items
)
if member:
total *= 0.9
return total
class OrderLogger:
def save(self, items):
with open("order.log", "a") as f:
f.write(str(items) + "\n")
class MailService:
def send(self):
print("メール送信")
class OrderService:
def __init__(self):
self.calculator = PriceCalculator()
self.logger = OrderLogger()
self.mail = MailService()
def process(self, items, member):
total = self.calculator.calculate(items, member)
print(f"注文金額: {total}")
self.logger.save(items)
self.mail.send()
さらにDependency Injection対応
class OrderService:
def __init__(
self,
calculator,
logger,
mail_service
):
self.calculator = calculator
self.logger = logger
self.mail = mail_service
def process(self, items, member):
total = self.calculator.calculate(items, member)
self.logger.save(items)
self.mail.send()
return total
これなら
- Loggerを変更
- Mailサービスを変更
- テスト時はMockへ差し替え
が簡単になります。
AIが説明してくれる改善点
改善前
・1つの関数が4つの責務を持っていた
・再利用できない
・テスト困難
・修正箇所が集中
改善後
・責務をクラスごとに分離
・依存関係を注入可能
・保守性向上
・SOLID原則に準拠
・ユニットテスト容易
明日から使えるベストプラクティス
スパゲッティコードを一気に書き換えるのではなく、関数やクラス単位でAIに解析・改善させるのがおすすめです。
このコードをレビューしてください。
・SOLID原則に従ってリファクタリング
・責務ごとにクラス分割
・デザインパターンを適用できるなら提案
・依存性注入(DI)を利用
・型ヒントを追加
・ユニットテストを書いてください
・変更理由も初心者向けに説明してください
このようなプロンプトを使えば、単なるコード整形ではなく、保守性・拡張性・テスト容易性を考慮した改善案をAIから得られます。
まとめ
技術的負債放置を卒業して、AIでクリーンコードに変換しましょう!
#まだやってるんですか #コードの女神はみた #プログラミングスキル
動画で見る
YouTubeショート動画でも同じテーマを解説しています👇
チャンネル登録・高評価もよろしくお願いします 🔔
この記事は「コードの女神は見た!」チャンネルの連動記事です。