JRuby + GeoTools on Mac OS X がすごく気持ちよく使える件について
Ruby + GDAL + OGR がとても不安定*1だったので,かつて使っていた GeoTools に頼ることになりました。しかし,Java + Xcode という世界には戻りたくなかった*2ので,よせばいいのに冒険をして, JRuby を使うことにしました。
Mac OS X では,Java はまあ入っているので,
するだけで準備完了です。Mac OS X ではアカウントごとに jre/lib/ext にあたるディレクトリが用意されていて,しかもそのパス名がすっきりしているので気持ちいいですね。この後,jirb で Java 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 は,そういう世界観のプログラミング環境になっちゃうのかもなと感じました。