OCamlによるライフハック

関数型言語は素晴らしいので、仕事にも趣味にも生かしましょう。

求めているものは、カーネルだった。

My hobby is watching professional baseball.

プロ野球好きです。テレビで中継を見たり、インターネットの速報を追うことのほうが多いですが、球場にも割と行きます。

そして、最近はいろんなデータを簡単に手に入れることができるので、あれこれ見て楽しんでいます。その一環でデータ分析もたまにしているものの、どうせならOCamlでぬるぬるやりたいと思う次第です。

テーマ

OCamlでデータ分析する土台を作りたいです。

理由

データ分析といえばR言語Pythonが有名です。実際に自分が使ったことがあるのはPythonのみなので、そちらについてのみ言及します。

Pythonはとても扱いやすく、機械学習など専門的な処理でもシンプルに記述できるインタプリタ言語です。OCamlもシンプルさは負けていないのですが、データ分析などで有用なライブラリが豊富な点はPythonに軍配が上がります。Python専用というわけではありませんが、Jupyter Notebook というツールが使える点も非常に良いです。

しかし、インタプリタ言語の性質故にPythonは決して処理が速いとはいえません。同じことをやるならば、より高速な言語で開発を進めた方が効率的でしょう。それが慣れ親しんだ言語であれば尚更。

結局のところ

OCamlPythonの利点を合わせたツール−−すなわち、拡張したOCamlカーネル*1−−を開発します。OCamlはトップレベルと言う対話環境でプログラムファイルを読み込むだけでなく、ソースコードを直接書いてコンパイルさせることもできるので、Jupyter Notebookとの相性は良いはずです。

必要なこと

既存のOCamlカーネルの改良

同じようなことを考えている人は少なからずいるわけです。例えばこれ。GitHub - andrewray/iocaml: An OCaml kernel for the IPython notebook

そして、そのツールにない機能を色々と補ったのがこれ。GitHub - akabe/ocaml-jupyter: An OCaml kernel for Jupyter (IPython) notebook

これらをベースにしてあれこれ作っていこうかと思います。これに関する記事も追い追い書きます。

OCamlの拡張

方向性は二つ考えられます。ひとつは言語そのものの拡張、もうひとつは専用のライブラリを作成です。

前者は

のようなもの、後者は

のようなものを想定しています。

*1:開発ツールそのものではなく、Jupyter NotebookとOCamlの仲介役みたいなもの