Field Reportsの特徴 (1)
OCaml関係で興味を持って頂いている方が多いようなので,まずOCamlで開発を行った理由・効果などについて書いておきたいと思います。
なぜOCamlを使って帳票ツールを作ろうと思ったのか?
帳票ツールを開発する言語を選ぶにあたって,次のようなことを考えました。
- 他の言語から拡張ライブラリとして呼び出せること。
- できるだけ,色々な環境で動くようにしたい。
- 動作速度は速いほうが望ましい。
- 生産性が高いほうがよい。
普通に考えたらC++を選ぶところだと思います。ただ,C++は都合10年近く使ったと思うのですが,ホトホト疲れ切ってしまったので早々に却下しました。歳も歳なので,もっとラクチンな言語が良いと思いました。
次に,C#かJavaを検討しましたが,動作環境が限られてしまうのでこれも却下。
次に検討したのが,Lisp系の言語でした。
Common Lispは拡張ライブラリとして使うには重そうな気がしたので,Schemeを中心に探したところ,Bigloo と Chicken を見つけました。特に Bigloo は,JVMや.Netのバイトコードも出力できるようで,理想に近いと思いました。
実際,Biglooを使ってPDFライブラリをスクラッチから作り始めたのですが,しばらくすると,ちょっと不安を感じるようになってしまいました。詳細はよく覚えていないのですが,
- インタプリタモードで動かすときとバッチモードで動かす時でモジュールの振る舞いが異なっていて「デバッグが難しい」と思った。
- Biglooで大きなプログラムを書いた事例も見つからないが,このまま開発を続けて大丈夫だろうか?
- 最悪,他のScheme処理系へ乗り換えるにしても,モジュールシステムが独自仕様なので手間がかかりそう。
といった事だったと思います。
そんなこんなでモヤモヤしている時に,関数プログラミングつながりでOCamlに興味をもちました。最初の条件は満たしそうです。
- C言語I/Fのコールバック機能を利用すれば,他の言語から呼び出せそう。
- Linux, Windows, Mac OS Xなど様々な環境で動く。F#に移植すれば,.Netで動くかもしれない。OCaml-javaというのもある。
- 動作速度はC並に早いらしい。
- 生産性が高そうだ。
決定的だったのは,CamlPDFというPDFライブラリを見つけたことです。中身を解析してみると,自社製品を作るために開発しただけあって,提供する機能に派手さはないものの,実直な作りでした。これで,開発工数をかなり削減できそうです。
最後まで気になったのは,OCamlの独特の構文でしたが,まあやってみることにしました。
(続きは,次回に)