明けましておめでとうございます。新年最初の仕事は昨年の勤怠入力でした。
さて、2017/12/25 に Ruby2.5 がリリースされましたね。今日は、今私がやっているプロジェクトの Ruby を 2.5 にした時に行ったことを書きます。 リリース前のプロジェクトのため、Ruby2.5 対応のゴールは、アプリが起動し、テストがパスすることとしました。
私のプロジェクトでは、開発環境から本番(リリース前なので稼働はしていませんが)まで Docker を使っています。
まずは、https://hub.docker.com/_/ruby/ に 2.5.0-alpine が来ているのを確認後、Dockerfile を書き換えビルドしました。また開発環境には BUNDLE_PATH と node_modules に別途マウントした Volume を指定していたため、この Volume をクリアする必要がありました。これは、使っている gem や npm のライブラリにネイティブライブラリのものを使用していたためです。
アプリの起動までには、一箇所修正が必要でした。それは、devise 4.3.0 を使用していたのですが、そのバージョンだと Ruby2.5 の syntax change を踏んでいました。そのため、修正されたバージョンである 4.4.0 にアップデートすることで起動が可能となりました。
テストでも一箇所修正する点がありました。concern したモジュールのテストをモデル側でする際に、description に以下のような書き方をしている箇所がありました。
module Authenticable end class User include Authenticable end describe User::Authenticable do end
この User::Authenticable
と書かれているところで、NameError が発生するようになりました。
これは Ruby2.5 でトップレベルの定数探索が削除された ことによる影響でした。
なので、ここは User::Authenticable
を 'User::Authenticable'
のように文字列にすることで回避しました。
私のプロジェクトは、まだ規模も小さいため、これぐらいの修正で対応が完了しました。
これにより、pp
を require せずに使えたり、Hash#tranform_keys
や Hash#slice
を使えたり色々便利な機能を ActiveSupport なしで書けるようになって便利になりました。
また、3 倍早くなったと噂のブロックパラメーターや do ... end
に rescue
などが使えるようになるのも楽しみです。
それでは、良い一年を。