http://farm9.staticflickr.com/8002/7295729670_6261e7870c_m.jpg

リリースから2年以上が経った「モグリー」ですが、先日のリニューアルに続いて、(やっと重い腰を上げて)アプリケーションフレームワークをRuby on Rails 2.4から最新の3.2へとアップデートを実施した。Rubyも1.8.7から1.9.3へ。さらにライブラリの互換性の問題もあったのでPostgreSQLも8.1から9.1へアップデート。

Railsは結構容赦なく互換性を切り捨てて進化しているので、アップデート作業はすっげー大変だった。特にプラグインはヤバイ。新しいRailsでは使えなくなってて、開発も止まってるケースは最悪。Rails 2時代にそれなりにメジャーだったものでも、もうメンテされていないというものは少なくない。やむなくいくつかのブラグインは捨ててスクラッチで対応した。その他には、モデルのコールバックメソッドの指定方法なんかも変わってるから、うっかりするとコールバックが呼ばれてないとかヤバイ。あとは、コントローラにconfigという名前のアクションがあると、そのコントローラ全体が動作しなかったりとかひどい、ハマったわ。あとはひたすらエラーと動作不良を潰していく作業。

アップデートしてみた感想としては、Railsではプラグインの利用はよく検討したほうが良さそう(良し悪しで、難しいところだが)。また、スクラッチでも安易にトリッキーな手段に逃げずに、Railsのセオリーをよく学んだほうが良い(これは重要)。

Railsのバージョンアップは毎回アグレッシブだけど、先進性と洗練さを両立しているのが魅力でもあるから嫌いじゃないですよ。いくら枯れていても古臭いのは使う気がしないからね。

今回苦労したのは、間の3.0、3.1をすっとばしてのアップデートだからというところもあるかも。段階的にアップデートすればDeprecatedの警告表示が出たりするだろうから、もうちょっとはスムースに行くかも。

ところで、苦労してフレームワークをアップデートする必要があるのか?…アプリを長くメンテしたいなら必要だと思う。アプリに新しい機能を実装する時にはフレームワークの新しい機能を使いたい。これはモチベーションにもかなりかかわる。それに記憶の整理のためにも、たまにこうやって苦労してアプリ全体のコードに触れておくのは結構必要なことだったりする。古いコードは触る気がしないけど、最近見たコードならむしろいじりたくなるものです。まあ、受託開発のシステムでは、なかなかできないですけどね。