FIELD NOTES: 書を持って街へ出よう

合同会社フィールドワークス プログラマ兼代表のブログ

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の独特の構文でしたが,まあやってみることにしました。

(続きは,次回に)