ActiveRecord::Relation#valuesをnodoc化
ActiveRecord::Relation#valuesメソッドが:nodoc:としてマークされました。このメソッドは内部実装の詳細を返すものであり、公開APIとして提供する意図がないことが明確化されています。
背景
valuesメソッドは、Relationオブジェクトに対して呼び出されたクエリ句(where、order、limitなど)をHashとして返すメソッドです。しかし、PRの説明によれば、このメソッドはvalues_for_queriesのような内部メソッドと見なされています。
この状態は、開発者が誤って内部メソッドに依存するリスクを生み出していました。内部実装の詳細を露出させるメソッドを公開APIとしてドキュメント化することは、将来的な実装変更の自由度を制限する可能性があります。
技術的な変更
変更内容:
- def values
+ def values # :nodoc:
@values.dup
end
メソッド定義に:nodoc:ディレクティブを追加することで、RDocによるドキュメント生成時にこのメソッドが除外されるようになりました。メソッドの実装自体は変更されておらず、@valuesインスタンス変数の複製を返す動作は維持されています。
:nodoc:マーカーは、メソッドがRails内部でのみ使用されることを示すRubyドキュメント規約です。このマーカーがあることで、公式APIドキュメントからメソッドが除外され、開発者が誤って使用するリスクが軽減されます。
設計判断
この変更は、メソッドを削除するのではなく、ドキュメントから除外するアプローチを取っています。メソッド自体は残されており、Relation内部での使用は継続されます。
このアプローチにより、既存のコードとの互換性を保ちながら、新規のコードで誤って使用されることを防ぐ効果が期待されます。本変更は、ActiveRecordの公開APIと内部実装の境界を明確化する取り組みの一環といえます。
本PRは、内部メソッドをドキュメントから除外することで、開発者が安定したAPIのみに依存できる環境を整備しています。メソッドの削除ではなくnodoc化という穏健な対応により、互換性を維持しながらAPI境界の明確化を実現した変更です。