JRuby + GeoTools on Mac OS X がすごく気持ちよく使える件について

Ruby + GDAL + OGR がとても不安定*1だったので,かつて使っていた GeoTools に頼ることになりました。しかし,Java + Xcode という世界には戻りたくなかった*2ので,よせばいいのに冒険をして, JRuby を使うことにしました。
Mac OS X では,Java はまあ入っているので,

  1. JRuby をふつうにダウンロードして展開し,bin を PATH に追加。
  2. GeoTools のバイナリ配布をダウンロードして ~/Library/Java/Extansions にコピー。

するだけで準備完了です。Mac OS X ではアカウントごとに jre/lib/ext にあたるディレクトリが用意されていて,しかもそのパス名がすっきりしているので気持ちいいですね。この後,jirbJava Integration の基本動作を確認しました。JRuby による Java クラスの呼び出しの記法もすっきりしていて,気持ちよく作業が進みました。
私の作業でやりたいのは,Shapefile に対して簡単に読み書きすることで,

FeatureWriter.open(dst) do |w|
  FeatureReader.each(src) do |feat|
    w.write(feat.getDefaultGeometry, {'a' => 1})
  end
end

みたいなことができればよいと思っていたのでした。そこでとりあえず FeatureReader を書いてみたのですが,書いてみるとこんなにシンプルでした:

class FeatureReader
  include_class 'java.io.File'
  include_class 'org.geotools.data.shapefile.ShapefileDataStore'

  def FeatureReader::each(shapefile)
    store = ShapefileDataStore.new(File.new(shapefile).toURL)
    iter = store.getFeatureSource.getFeatures.features
    while(iter.hasNext)
      yield iter.next
    end
  end
end

地理情報処理系の仕事で,強い型付けのある言語がどんなに打鍵数を増やしているのか,とてもよく分かりました。打鍵数が 1/4 くらいになったと感じています。
この作業をやってみて,今日ブックマークさせていただいた,

100マイル制限で安全ってのは、型チェックや宣言されていない変数の出現とかを事前にコンパイラするから安全ということみたいだな

http://arton.no-ip.info/diary/20070830.html#p01

の話に少し関係あるかなと思いました。JRuby を使うことで,結構頑丈な GeoTools という車を型宣言という制限速度なしで走らせることができそうです。ドイツのアウトバーンは,本当にヒルトップ付近で速度差 60km くらいあるんじゃないかと思うような減速をさせられるようなところで,私の知っているドイツ人は舌打ち一つくらいでそのくらいの車の操作を普通にやるような人でした。JRuby + GeoTools は,そういう世界観のプログラミング環境になっちゃうのかもなと感じました。

*1:GDAL/OGR 開発者がまだ使うな危険と言っている C++ API を,さらに SWIG を使って ruby API にしてくれているものを使っていたのですが,これまで見たこともないような C++ レベルのエラーを毎日のように見るはめに陥ってしまっていました。

*2:JavaIDE で開発するほど大規模な開発をやっているわけではないので。