rubyをdisってみる

自分で運用しているredmineが依存性の問題で動かなくなったので、腹いせ&八つ当たりでrubyをdisってみることにしました。

redmineが動かなくなりました。背景はこうです。

  1. FreeBSDにportsでredmine入れて快適だぜ!
  2. セキュリティとか怖いからなるべくportsは新しくするぜ!
  3. あれredmineが動かくなったぜ? なんでだぜ?

結論からいうとruby-gemsとrailsのバージョンがコンフリクトしたのが原因でした。もともとこのFreeBSD boxにはredmine 1.2.1とruby-gems 1.7が入っていました。そしてある時portsでruby-gemsが1.8にアップグレードされたのです。redmine 1.2.1にはrails 2.3.11がバンドルされています。このrails 2.3.11、実はruby-gems 1.7以前でないと動かないというモノでした。正確にはruby-gemsが1.8で後方互換性を捨てており、それを使っていたrails 2.3.11が動かなくなっていました。このことがわかった時リアルに声を張り上げました「ふざけんな!」

FreeBSDのportsでは問題が継続中であり、事実私はredmineに蓄積したデータにはここ数日アクセスできておらず、復旧の目処がたちません。

いやrubyそのものが悪いわけじゃないことはわかっています。それどころか良い言語だということもわかっています。私はPerlのほうが好きですが(笑)。見かたを変えれば主犯はFreeBSDのportsにruby-gemsのバージョン別パッケージが無いことともいえるでしょう。

ただソレ以外にもredmineには問題があります。

  • 古いruby 1.8でしか動かない
  • 古いrails 2.3.11でしか動かない
  • (rails 2.3.11は)古いruby-gems 1.7でしか動かない

こんなことは他の言語やライブラリではまずお目にかかれません。特に問題だと指摘したいのはruby-gemsというrubyのエコシステムを構築する重要なツールが、バージョンアップに伴いあっさり後方互換性を捨て去っていることです。新しいツールやライブラリが常に良いものだというわけではありませんが、古いツールに依存し続けるのも解せません。いや…ライブラリがバージョンアップに伴い後方互換性がなくなってしまうので、各種プロダクトは古いライブラリに依存し続けるしかない、そうとも考えられるかもしれません。

だとすればrubyという言語そのものにプログラマが「後方互換性を捨てたくなってしまう、実際に捨てさせてしまう」そんな性質があるといっても過言ではないでしょう。仮にこのような性質がruby自身にあるのだとしたら、いや私の視点からは実際にあるように見えるのですが、本当に問題です。少なくとも今後rubyで書かれたプロダクトは使いたくない、そう思うには十分な理由となりえるでしょう。

誤解のないように再度書きますがrubyやredmineは本当に素晴らしいプロダクトです。それだけに私が体験した(現在進行形ですがw)このようなことがあるのが腑に落ちないのです。