9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails 2.3 から 4.2 にアップグレードした所感

Last updated at Posted at 2016-07-31

Rails 2.3.5 から Rails 4.2.7 へアップグレードした。
かなり試行錯誤して苦労した。
その所感を以下に記す。

RailsGuides には、「なるべく小刻みに少しずつアップグレードしていくのがよい」と書いてある。最初はそのつもりだったのだが、実際にやってみると、いろいろ大変で、結局次のようにした。

  1. Rails 2.3.5 -> Rails 3.0.11
  2. Rails 3.0.11 -> Rails 3.2.22
  3. Rails 3.2.22 -> Rails 4.0.13
  4. Rails 4.0.13 -> Rails 4.2.7

アップグレード作業

1. Rails 2.3.5 -> Rails 3.0.11

  • 基本的に、このブログエントリのやり方に従った。とてもわかりやすかった。ありがとう。

  • rails_upgrade というプラグインが Rails 2 -> 3 で注意すべき点などを指摘してくれてとても役に立った(Rails の公式サイトのお墨付きもあるらしい)。

  • アップグレード全体で、この Rails 2.3 -> 3.0 が一番面倒だった。なにせ、ここで bundler が導入されるので。

2. Rails 3.0.11 -> Rails 3.2.22

  • rake rails:update で設定ファイル更新。

  • このプロジェクトは /public 以下が肥大化していたので、asset pipeline の導入は諦めた。ただ、これは設定ファイルで、簡単に disable にできる。disable してしまえば、画像・スタイルシート・JavaScript 周りは、Rails 2 時代とまったく同じに使える。

3. Rails 3.2.22 -> Rails 4.0.13

  • rake rails:update で設定ファイル更新。

4. Rails 4.0.13 -> Rails 4.2.7

  • rake rails:update で設定ファイル更新。

・・・と Rais をアップグレードしていった。Ruby も

  • 1.8.7 (Rails 2.3)
  • 1.9.3 (Rails 3.0)
  • 1.9.3 (Rails 3.2)
  • 2.0.0 (Rails 4.0)
  • 2.3.1 (Rails 4.2)

と rvm でアップグレードしていった。

所感

アップグレードしてみて思ったのは次のようなこと。

1. アップグレードの刻み方

おそらく Rails 2.3 -> Rails 3.0, Rails 3.0 -> Rails 4.2 の2段階だけで十分。ディレクトリ構成は Rails 3.0 でいまの形になる。Rails 3.0 以降にはある、rake rails:update は、/config 以下の設定ファイルをそのバージョンの Rails で動くようにアップグレードしてくれる。いったん Rails 3.0 まであげたら、次は一気に Rails 4.2 まで上げて、rake rails:update で設定ファイルを新しくすればよいのではないか。

2. Ruby 1.9

Rails 3.x は基本、Ruby 1.9 で動くのだが、Ruby 1.9 は日本語の扱いに難があり、マジックコメントを付けないと日本語を含むファイルでエラーになる。だから、Rails 3 で動かそうとすると大変なことになる。だから、Rails 2 -> 4 とアップグレードするなら、Rails 3 での動作は確認しなくても良いのではないか。

3. gem

本当に大変なのは Rails 本体より依存する gem (plugin) への対応。Rails 2 時代に使えていた gem / plugin が Rails 4 時代もあるとは限らない。仮に残っていても、APIが大幅に変わることもよくある。

4. テスト

アップグレードする前に網羅的なテストがあることが望ましい。けれども、テストが書かれていないのなら、アップグレード後にテストを書いてもいいのかもしれない。いずれにしろ、Rails 2 -> 4 とアップグレードしたら、Rails にしろ gem にしろ API が大幅に変わっていて、いろいろ手直ししないと動かないからだ。テストを書きながらデバッグして、Rails 4 に合わせていくというのでもよいかもしれない。

ただ、プロジェクトのサイズにもよるだろう。今回のプロジェクトは小さかったので、このやり方でも良かったが、もっと大きくて複雑なプロジェクトならやはり基本どおり、マイナーバージョン一つずつアップグレードしていくべきなのかもしれない。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?