Rubyは1995年に発表されたオープンソースのオブジェクト指向なスクリプト言語ですが、今でも改良が続けらており、バージョンアップが継続されています。バージョンアップがあるのはRubyだけではありません。Ruby on Railsでも改良が継続されています。
そのため、新しい機能を追加しようとしたらRubyやRuby on Railsのバージョンにその機能で必要なGemが対応しておらず、その機能を追加できないこともあります。同じバージョンのRuby on Railsを使い続けるのはリスクでしかありません。定期的にバージョンアップを実施しましょう。
今回はRuby on Railsのバージョンアップ手順を紹介します。
バージョンアップの準備
Ruby on Railsは頻繁にバージョンアップされています。新しい機能を追加するケースもありますが、不具合の修正も少なくありません。Webアプリケーションを安定して運用するためには定期的なバージョンアップをお勧めします。
しかし、いきなりアップデートするのは危険です。まずはしっかり事前準備を実施し、必要な手順をこなしてからアップデートを実施してください。次からRuby on Railsをバージョンアップする前に必要な準備作業を紹介します。
今動作している環境をバックアップ
Ruby on Railsをバージョンアップすると、それまで動作していたWebアプリケーションが動作しなくなるケースがよくあります。事前に開発環境で動作することをチェックしてからバージョンアップしてください。
さらに開発環境では正常に動作したのに、本番環境でワーニングが出たりエラーが出ることもあります。そのためバージョンアップする前に、今動作している環境をバックアップし、いつでも戻せるようにしてから実施してください。
さらにRuby on Railsの公式サイトにはアップグレードガイドが掲載されています。ぜひこのアップグレードガイドも目を通しておきましょう。
RubyGemsのアップデート
Ruby on Railsで構築したWebアプリケーションは多くのRubyGemsから入手したライブラリを利用しています。Ruby on Railsをバージョンアップするとライブラリのバージョンの違いによりエラーが発生するかもしれません。
そのため事前にRubyGemsから入手したライブラリをバージョンアップしてください。手順は次のとおりです。
- 最新でないライブラリを探す
bundle outdatedコマンドを使って、最新バージョンを使っていないライブラリをチェックしてください。 - 個別にライブラリをアップデートする
バージョンが大きく変わったライブラリは問題が発生しやすいので、個別アップデートしてください。なお個別にアップデートするには、bundle updateコマンドにそのライブラリ名を指定します。もし、うまくいかない場合は、そのライブラリの改版情報などを検索してチェックしましょう。 - ライブラリをまとめてアップデートする
先ほどのbundle updateコマンドを何も指定せずに実行すると、まとめてライブラリをアップデートします。
Rubyを最新にする
Ruby on RailsをバージョンアップするならRubyのバージョンも見直ししてください。そしてRubyのバージョンを切り替えるにはRuby用のバージョン管理ツールrbenvを利用します。もしrbenvを利用していないのなら、事前に設定しておきましょう。
なおrbenvは指定したバージョンのRubyのソースリストをダウンロードし、それを使って実行可能なRubyを作成して、使えるように設定します。もしrbenvを利用してRubyを最新のバージョンにアップするなら、そのRubyの構築にある程度時間がかかります。Ruby on Railsが対応しているRubyのバージョンをチェックし、できれば最新バージョンのRubyを準備してください。
Ruby on Railsをバージョンアップする
先ほど紹介した準備作業でライブラリとRubyをバージョンアップができたら、Ruby on Railsをバージョンアップします。なおRuby on Railsのバージョンアップは、railsコマンドを実行するだけで実施できます。次のその手順について紹介します。
今のバージョンをチェックする
まずは今のRuby on Railsのバージョンをチェックしてください。そしてバージョンをチェックするためのコマンドは、次のとおりです。
$ rails -v Rails 6.1.4.1
続いてRuby on Railsの公式サイトで最新のバージョンをチェックします。公式サイトで案内されている最新バージョンにアップしましょう。
なお、先ほどの例で表示されたバージョンは「6.1.4.1」でしたが、最も左側の数字が上がっている場合は注意が必要です。例えば今使っているバージョンが6で始めるに対し、公式サイトの最新が7で始まるバージョンだった場合は、一旦6の系列の最新にバージョンアップし、その後に7の最新バージョンにアップしてください。
bundle updateでダウンロードする
今使っているRuby on Railsのバージョンとその最新バージョンをチェックしたら、さっそくそのバージョンをダウンロードしましょう。ただしRuby on Railsは幾つものライブラリの集合体です。整合性を保ちながら必要なライブラリをダウンロードしてバージョンアップしなければなりません。
ライブラリの整合性を保ったままでダウンロードするためのコマンドがbundleです。まずはGemfileに記載されたRuby on Railsのバージョンを変更し、そのうえでbundle updateを実行してください。
Gemfileの例
gem ‘rails’, ‘6.1.4.1’
bundle updateの実行例
$ bundle update
rails app:updateを実行する
先ほどのbundle updateが終わったら、Ruby on Railsをバージョンアップできます。そしてRuby on Railsをバージョンアップするコマンドが、rails app:updateです。なおこのコマンドを実行すると新しいファイルの作成や、既存ファイルの変更を対話形式で処理していきます。必要に応じて質問に回答してください。
$ rails app:update
なおrails app:updateで全て上書きしてしまうと、重要な設定がデフォルトに戻ってしまいます。routes.rbなどの重要なファイルについては差分を表示する機能を利用して、復元できるようにしておきましょう。
バージョンアップ後の動作チェック
Ruby on Railsのバージョンアップが済んだら、さっそく正常に動作するかチェックしてみましょう。動作チェックの手順を次に紹介します。
railsコマンドが使えるかチェック
Ruby on Railsのアップデートが済んだら、最新バージョンにアップできたかチェックします。バージョンを表示するコマンドは際ほどと同じrails -vです。
$ rails -v
さらにrailsコマンドが正常に動作するかを、rails consoleとrails serverを実行してチェックしてください。
$ rails console ... $ rails server ...
もしこの2つのコマンドを実行してエラーが発生した場合は、エラーメッセージを頼りにそのエラーを修正します。
実際のアプリでチェック
Ruby on Railsが正常に動作するのをチェックしたら、Webブラウザでアクセスして操作に対して正常に表示されることをチェックしてください。人が操作して問題なければ、これでRuby on Railsのバージョンアップは完了です。
なお、開発環境でチェックして問題が無くても、本番環境では正常に動作しないケースも稀にあります。そのため本番環境でも実際に使ってみて問題がないかをチェックしておきましょう。
まとめ
Ruby on Railsのバージョンアップ手順を紹介してきましたが、実際にバージョンアップを実行するとうまくいかないケースも発生します。
Ruby on Railsは多くのライブラリを含んでおり、バージョンアップによってそれらの整合性が崩れると正常に動作しなくなります。さらに、後から導入したRubyGemsのライブラリが合わなくなるケースも少なくありません。
そのためバージョンアップのための日程を確保し、Ruby on Railsの更新履歴と使っているGemsの更新の有無などをチェックするなど、しっかりと準備してからバージョンアップしてください。
Ruby on Railsの使い方を日本語で紹介しているWebサイト「Railsガイド」にはアップデートのガイドも掲載されています。Ruby on Railsをバージョンアップする前に、このサイトも読んでおいてください。
Rails アップグレードガイド – Railsガイド