ユユユユユ

webエンジニアです

Ruby 2.7 + hanami 1.3.3 + pg のプロジェクトでは bigdecimal 1.4 を使う

sqlite を pg アダプタに付け替えていた。一通り設定を終えて、開発サーバーを立ててみると、こんなエラーが発生した。Ruby 2.7 + hanami 1.3.3 + pg 1.2.3 で再現するはず。

f:id:jnsato:20200609142915p:plain
undefined method `new' for class `#<Class:BigDecimal>'

bigdecimal とは標準ライブラリで、 Ruby 2.7 のリリースとともにバージョン2.0にアップデートされていたようだ。メジャーアップデートとして、BigDecimal.newという API を廃止したよう。それでこのエラーが出る。

スタックトレースをみると、 sequel という gem からきている様子。hanami の ORM である rom SQL アダプタである rom-sql が呼び出し元である。

で、 sequel のレポジトリを見に行ってみると、イシューがすでに上がっていた。

github.com

いわく sequel はすでに2年前のアップデートでこの問題には対応済みである。つまり、 sequel に依存している ROM および hanami が、依存をアップデートできていないことになる。

困ったな...と思いつつ hanami-model の gemspec を覗いてみる。すると、あれ?  bigdecimal 1.4 が明記されている?

要するに、 hanami-model の master ではすでに対応済みであり、リリース待ちであった様子。該当のプルリクエストも確認できた。

とはいえこれはリリース前なので、ひとまず自分自身の Gemfile にも bigdecimal 1.4 への依存を明示的に追記して、なんとか動作は正常化できた。

  source 'https://rubygems.org'

  gem 'rake'
  gem 'hanami',       '~> 1.3'
  gem 'hanami-model', '~> 1.3'

- gem 'sqlite3'
+ gem 'bigdecimal', '~> 1.4'
+ gem 'pg'

  ...