🙅‍♂️

Ruby 3.0 から OpenStruct が非推奨になった

2022/10/02に公開

はじめに

標準ライブラリのOpenStructクラスは柔軟に使用出来るため、気軽に使ってきたものの、Ruby3.0から非推奨になった。

DTOパターン(クラス間のデータの受け渡し)や型を気にしなくても良いテストコードなどで使用してきたが、RuboCop1.23で監視されることになったため気を付けないといけなさそうなので簡単に調べてみた。

なぜ非推奨になったのか?

公式コメント

簡単に翻訳すると以下のようなことらしいです。

  • パフォーマンスが悪い
    • クラス内部でmethod_missingやdefine_singleton_methodが多用されているために、見えないところでループ処理が実行される
    • StructやHashよりも明らかに遅い
    • Hashと比べると200倍遅い。。
  • バージョン間で非互換性がある
    • バージョンの違うと特定のメソッドで返り値の型が変わることがある
  • 組み込みのメソッドが簡単にオーバーライド出来てしまう
    • バグやセキュリティ上の問題を引き起こす可能性がある

Discussion