2016年06月12日

Redmineいじって思ったRubyの遺産的課題

Redmine便利ですよね。会社でも使ってるけど家で一人プログラミングしてるときも前何やってたっけって時に的確に思い出せるし半年前に作ってほっぽったソースコードに一人ツッコミ(コードレビュー)できるし。ってこんなことしてるの俺だけかな。

そうそうコードレビューといえばRedmineにはレビューにとっても便利なプラグインがあるんですよ

Redmine Code Review plugin

リポジトリに入ったソースにコメント入れるとかってにそういうチケットが作られて、FIXすると同時にチケットがクローズされるやつ。
githubのプルリクエストみたいでまじ便利。こういうの会社のチーム開発でも使ってみたいわー。
今プロセスが厳密に決められてて無理だけど。
screenshot.2.jpg
そう、こんな便利プラグインをどしどし追加できるのがRedmineの魅力だ。
そんで、今回はこんなの会社で導入できたら素敵だろうなーっていうプラグインを自分の家でお試ししたくて、
スクラム開発に便利と噂のプラグイン、Redmine Backlogsを入れようとした


んだが、その時の苦戦の経過とRubyに対して気づいた多少の文句を記録しておく。つまりこの記事は単なる愚痴だ。


 
まずインストールできやがらねえ

公式のインストール手順にしたがってインストールしますよ。
http://www.redminebacklogs.net/en/installation.html

まずbundle installを行う。これはもう事前にやっている

bundle install --without development test

次にholidaysとかいうgemをインストールしますよ。ナニコレ?でもまあいいや言われる通り

gem install holidays --version 1.0.3gem install holidays

うちはubuntuだからいちいちsudoつける。うざいね。
そしてgithubからプラグインをダウンロードする。おおー。今風でかっこいいねこのダウンロード方法

(Redmineインストールフォルダのplugins、うちだと/usr/local/redmine/pluginsに移動して)
git clone git://github.com/backlogs/redmine_backlogs.git


んで複数あるバージョンから最新の1.0.6をチェックアウトする

cd redmine_backlogs
git tag
git checkout 1.0.6

そしてproductionからインストールする

RAILS_ENV=productionexport RAILS_ENV
bundle exec rake db:migrate
bundle exec rake tmp:cache:clearbundle exec rake tmp:sessions:clear
bundle exec rake redmine:backlogs:install

そしてインストールでコケる。ギャー!

checking for libxslt/xslt.h... no

JRubyだとうまくいく・・・

デスクトップで使ってるWindowsでも試験用にRedmine作っててね、WindowsじゃRubyまともに動かないからJRuby使ってるのよ
正確には普通に動かす分には問題ないんだけどちょっとgemインストールしたらヘッダがないとかライブラリがないとかコンパイラがないとか怒られるんでJRuby使うんだけどね、

ちなみに話はそれるけどこの環境、USBメモリに入れてポータブルに実行できるように工夫してて、
  • JRubyはvendor/jrubyに導入している
  • DBにはjdbcsqlite3を採用している(adapter: jdbcsqlite3)
  • DB保存先はfielsフォルダにしておいてfilesフォルダまるごとコピーすればバックアップリストアできるようにしている(database: files/redmine.db)
と、少しばかりこだわりで作った環境なんだけど、コレの作り方はまた別の記事で。

そんでもってこのJRubyのRedmineでRedmine_Backlogプラグイン入れたら普通にはいるのよ。
なんでや!むしろWindows環境の方が素直に動くじゃん!!!

と、ここまで喋ったらオチはわかるよね。要はUbuntu環境ではヘッダとライブラリが足りなかったんですよ。
だって言ってるじゃん。libxslt/xslt.h... noって。

解決編

正解はQiitaのこっちの記事にありました。


sudo yum install -y libxml2 libxml2-devel libxslt libxslt-devel

うちはUbuntuなんでyumじゃなくてaptitudeなんだけどやることは大体おんなじだね
コケてる原因はnokogiriというxml解析ライブラリ。こいつはどうもインストールが難しいことで悪名高いらしく、
「nokogiri イントール」でググると出てくる出てくる怨嗟の声
みんなであのライブラリ足りない、このヘッダが足りないと情報を出し合ってる。なんでこのライブラリ使うの?便利なの?

んまあgemのインストールで失敗したら何かしら「〜〜_devel」っていうのをaptitudeでインストールしてみるってのは
いつものパターンなんだけどね。それにしてもなんでRubyはこんなに依存関係で苦しむんだろう
そんでなんでJRubyは素直なんだろう

Rubyの遺産的課題

これ思うに、Rubyが生まれたての頃のある開発スタイルが今にまで引きずってるのが原因なんじゃないのかな
それは何かって言うと、足りない機能はCの拡張ライブラリで補いましょうというヤツ。
そもそもRubyは2004年くらいにRailsでブレイクスルーする10年位前から生まれてた隠れ古参なんだけど、
その時代はスクリプト言語は目に見えて処理速度が遅かったし、Perlに比べて後発のRubyは便利なライブラリも世の中になかったもんで
積極的にC拡張を書きましょうみたいな風潮だった。実際Perlよりか拡張書きやすい環境を作っていた。

んで、その頃の運用を今もひきずってて、Rubyは何かgemをインストールするたびにネイティブのモジュールを必要とするようになってるんじゃないか。
まあネイティブ拡張の依存は別にRuby以外の言語にも色々あるし、たとえばJavaにはJNIとかあるわけだけど
そのうち100%Pure Javaに置き換えたほうが便利で速いってことになって徐々に依存関係が消えていくじゃん?
いまだと典型はSWTかと。今やSwingやJavaFXの方が速いし、もうEclipse以外使われてないよね?

Rubyも今だったら100%Pure Rubyで走らせてもそんなに不便はないと思うんだけど、どうだろう
10年前に比べてハードウェアも進歩してるし、ソフトウェア的にもvm導入で早くなってるだろうし・・・

まあそんなこんなで、変にJavaに乗っかってるJRubyの方が普通のCRubyより便利になっているというなんか本末転倒なような状況が発生しているように思える。これから乗っかるならJRubyの方がいいんだろうか・・・
こういうの他の言語はどうなんだろう。例えばRubyの永遠のライバルPythonでもJPythonの方が便利とかあるのかな
ラベル:Rails ruby redmine
posted by LoyalTouch at 06:43| Comment(0) | TrackBack(0) | インフラ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック