😺

コードの「再利用」という言葉への気づき

2024/12/22に公開

この記事のコードの再利用とは?

  1. コードをコピペで使う再利用
  2. クラス設計としての再利用(デザインパターンとか)
  3. インターフェースとしての再利用
    ※ ここが僕が認識していなかった部分で、まだうまく言語化できていません

「再利用」という言葉を再確認したきっかけ

最近コードを書きながら、 「こういう機能作りたいんだけど、どういう実装パターンがある?」 みたいなことを ChatGPT に聞くことがあって、そのときに「再利用性が高まります」って言葉がピンとこなくて、自分が理解している「再利用」って言葉は何なんだろう?と考えたのがきっかけです。

また「再利用」という言葉は抽象度があがるので、この記事では具体的な再利用の方法についてまとめています。

自分の思う「再利用」

「この記事のコードの再利用とは?」で書いた通り、自分が思う「再利用」は1,2の部分でした。

1. コードをコピペで使う再利用

コードをコピペして使う再利用は、一番簡単で、一番よくやる再利用方法だと思います。

2. クラス設計としての再利用(デザインパターンとか)

クラス設計としての再利用は、クラス設計のパターンを使って、クラスを再利用する方法で、これもよくやる再利用方法だと思います。

3. インターフェースとしての再利用

インターフェースとしての再利用は、同じインターフェースを再利用して機能追加していく方法で、これを「再利用」という言葉で認識していなかったので、この記事を書くきっかけになりました。

具体的に言うと以下のようなデータを異なるフォーマット(CSV、JSON)でエクスポートするコードがあるとします。

class DataExporter
  def initialize(exporter)
    @exporter = exporter
  end

  def export(data)
    @exporter.export(data)
  end
end

class CsvExporter
  def export(data)
    # NOTE: CSV にデータをエクスポートする処理
    puts "Exporting data to CSV: #{data.to_s}"
  end
end

class JsonExporter
  def export(data)
  
    puts "Exporting data to JSON: #{data.to_json}"
  end
end

csv_exporter = DataExporter.new(CsvExporter.new)
json_exporter = DataExporter.new(JsonExporter.new)

csv_exporter.export({ name: "Alice", age: 30 })
# => Exporting data to CSV: {:name=>"Alice", :age=>30}

json_exporter.export({ name: "Alice", age: 30 })
# => Exporting data to JSON: {"name":"Alice","age":30}

エクスポートの処理を抽象化し、インターフェースとして再利用することで、新しいフォーマットを追加する際に、既存のコードを変更せずに追加できるようになります。

以下は XML フォーマットを追加する例ですが、既存のコードを変更せずに追加できることがわかります。

# XML フォーマットを追加
class XmlExporter
  def export(data)
    puts "Exporting data to XML: <data>#{data.to_s}</data>"
  end
end

xml_exporter = DataExporter.new(XmlExporter.new)
xml_exporter.export({ name: "Alice", age: 30 })
# => Exporting data to XML: <data>{:name=>"Alice", :age=>30}</data>

このコードを見ると、

  1. コードをコピペで使う再利用
    -> 例えばCSVを使いたければCsvExporterをコピペすれば使える
  2. クラス設計としての再利用(デザインパターンとか)
    -> DataExporterみたいに一つ抽象化を入れて、具体的な実装は別クラスにする設計パターンを再利用する
  3. インターフェースとしての再利用
    -> DataExporterを使って、新しいフォーマットを追加すること(例ではXmlExporterを追加)は、DataExporter という既存のインターフェースを利用して実装していて、ここも「再利用」という概念に入るなというのが新発見というか、気づきでした

まとめ

普段何も考えず使っている言葉ですが、「再利用」って何を指して再利用って言ってるのか?というのを改めて考えてみて、自分が認識していた「再利用」の範囲を広げられたので忘れないようにメモしておきます。

GitHubで編集を提案

Discussion