みんなでつくるダンジョンをRails5 -> Rails6にアップグレードしました

みんなでつくるダンジョンのアップグレード業をして、Rails5 -> Rails6 になりました。 使っている人からすると「なんのこっちゃ~」と思われるかもしれませんが、いろいろ開発に必要な足回りの環境が最新のものになったよ!ということです。

なんでアップグレードしたの?

みんなでつくるダンジョンにリアルタイムっぽい機能を付けたくなったのでした。たとえば、ログイン中のユーザーをマップに登場させたり、会話できるようにしたり...などなど。 みんなでつくるダンジョンで使わせていただいているRuby on Railsでは、バージョン5から「ActionCable」という、WebSocketを扱えるフルスタックなフレームワークをサポートしています。 しかしながら、デフォルトJavaScriptクライアントがCoffeeScriptなため、既にES201xなソースコードで開発している部分にどうやって組み込もうかな~などと考える必要がありました。

Rails6ではJavaScriptクライアントがnpmで取得できるようになり、かつES2015なソースコードになったということで、これをつかいたい~ということになりました。

railsguides.jp

アップグレードはどのように行ったの?

Railsガイド(日本語版)のアップグレードガイドの手順に従ってアップグレードしました。

railsguides.jp

まずは既に導入済みのGemがRails6対応しているかどうかを確認しつつ、古いパッケージを一つずつアップデートし、都度テストコードを走らせます。 (趣味開発ながら、一応きちんとテストコードを書いていたのでよかった~...)

つづいてGemfileを書き換えてRails6のバージョンを上げます。いくつかのテストが落ちるので、適切に修正していきます。 ちなみに、みんなでつくるダンジョンのRailsアプリケーションはほぼ単純なAPIサーバなこともあり、なにもせずともテストもだいぶ通過し、修正もさほど大変ではありませんでした。

あとは、テストを走らせるとDeprecatedなメソッドやモジュールの警告が出るので、適宜修正していきます(どのように修正すればよいかは警告文に表示されているのでありがたや~)。

はまったところ

ActiveStorage::Downloading がDeprecatedになったからなのか、明示的に require 'active_storage/downloading' しないと動かない箇所があったくらいだったと思います

まとめ

テストコードの存在や、こまめなGemのバージョンアップのおかげでさほど苦労せずにアップグレード業が完了しました。(ゴールデンパスはそれなりに手元で動かして確認しましたが、趣味開発プロダクトなので、わりとえいやっと本番環境に出してしまったので、不具合を見つけた方はこっそりおしえてください。)

維持管理しながらいろいろ機能を追加しようとしているんだよ!という話でした。

ではでは~