`refresh!` メソッドの重複実装を `save_to_database` 呼び出しに統一
cf61b719 で導入された save_to_database メソッドが、既存の refresh! メソッド内に残っていた同一処理を置き換えていなかった問題を修正しました。
背景
save_to_database メソッドが追加された際、refresh! メソッド内に存在していた同一のデータベース保存ロジックがそのまま残されていました。同じ処理が2箇所に存在することで、将来の変更時に片方の更新を漏らすリスクが生じていました。
技術的な変更
lib/ruby_llm/active_record/model_methods.rb の refresh! メソッドから、save_to_database と重複していたインライン実装を削除し、save_to_database の呼び出しに置き換えました。
変更前:
def refresh!
RubyLLM.models.refresh!
transaction do
RubyLLM.models.all.each do |model_info|
model = find_or_initialize_by(
model_id: model_info.id,
provider: model_info.provider
)
model.update!(from_llm_attributes(model_info))
end
end
end
変更後:
def refresh!
RubyLLM.models.refresh!
save_to_database
end
変更の規模は9行削除・1行追加と小さいですが、transaction ブロックや find_or_initialize_by を使ったモデルの更新ロジックが save_to_database に一本化されたことで、データベース保存の挙動は単一の実装で管理されます。
設計判断
データベース保存の責務を save_to_database メソッドに集約する方針が採られました。
refresh! はモデルリストのリフレッシュという役割に特化し、永続化の詳細は save_to_database に委ねる設計です。これにより、保存ロジックを変更する際は save_to_database のみを修正すればよく、refresh! への影響は自動的に反映されます。PR本文でもこの変更が「Code maintainability(コードの保守性)」に分類されており、重複排除による一元管理がこの変更の主眼であることが明示されています。
まとめ
本PRは機能追加のない保守的な変更ですが、save_to_database 導入時に取り残された重複実装を解消することで、将来の変更に対する安全性を高めています。コードの変更点が1箇所に集約されたことで、バグ混入リスクの低減とメンテナンスコストの削減が期待できます。