Python中級

中級 Pythonで学ぶリファクタリング|ケーススタディ編

導入

ソフトウェア開発において、リファクタリングはコードの品質を向上させるための重要なプロセスです。特に中級エンジニアにとって、実務でリファクタリングを適切に行うことは、保守性や拡張性を高めるために欠かせません。本記事では、架空のプロジェクトを通じて、リファクタリングの具体的な適用方法を考察します。

教科書レベルの解説(リファクタリング)

重要な概念の整理

リファクタリングは、既存のコードの外部的な動作を変更せずに内部の構造を改善することを指します。これにより、コードの可読性を高め、将来的な変更を容易にします。リファクタリングは、次のような目的で行われます:

  • コードの可読性向上
  • 重複コードの削減
  • テスト容易性の向上
  • パフォーマンスの改善

コード例(Python)


class Order:
    def __init__(self, items):
        self.items = items

    def calculate_total(self):
        total = 0
        for item in self.items:
            total += item['price'] * item['quantity']
        return total

# 使用例
order = Order([{'price': 100, 'quantity': 2}, {'price': 200, 'quantity': 1}])
print(order.calculate_total())

コードの行ごとの解説

  1. class Order: 注文を表すクラスを定義しています。
  2. def __init__(self, items): 注文に含まれるアイテムを初期化します。
  3. def calculate_total(self): 注文の合計金額を計算するメソッドです。
  4. for item in self.items: 各アイテムについて、合計金額を計算します。
  5. return total 計算した合計金額を返します。

ケーススタディ編

架空のプロジェクトとして、オンラインショップの注文管理システムを考えます。最初の実装では、注文の合計金額を計算するメソッドが単純でしたが、将来的に割引や税金計算などの機能を追加する必要が出てきました。この場合、リファクタリングを行うことで、将来的な機能追加を容易にします。

まず、合計金額の計算ロジックを分離し、割引や税金を適用するためのメソッドを追加します。次に、アイテムのデータ構造を変更し、合計計算の際の柔軟性を持たせます。以下はリファクタリング後のコードです。


class Item:
    def __init__(self, price, quantity):
        self.price = price
        self.quantity = quantity

class Order:
    def __init__(self, items):
        self.items = items

    def calculate_total(self, discount=0, tax=0):
        total = sum(item.price * item.quantity for item in self.items)
        total -= discount
        total += tax
        return total

# 使用例
items = [Item(100, 2), Item(200, 1)]
order = Order(items)
print(order.calculate_total(discount=50, tax=30))

このリファクタリングにより、コードはより明確になり、将来的な変更が容易になります。また、各アイテムをクラスとして定義することで、アイテムに関連する属性やメソッドを追加することが可能になりました。

まとめ

  • リファクタリングは、コードの品質を向上させる重要な手法です。
  • 具体的なケーススタディを通じて、リファクタリングの実践的な適用方法を学びました。
  • 将来的な機能追加を考慮した設計が、リファクタリングの成功に繋がります。