FsLab JournalでReproducible Research(レポート)を簡単に作りたい

はじめに

この記事は

の17日目の記事です。前日はpocketberserkerさんのFsAttoparsecについて - pocketberserkerの爆走でした。

今日は最近流行り?のリプロデューシブル・リサーチというか、クヌースのいう文芸的プログラミングをF#で簡単にやるための方法の紹介です。

F#でレポートを作りたい

最近は、プログラミング言語問わず、特に動的な言語方面において、コードと文章本文を混ぜこぜにしたドキュメンテーションが、Reproducible Researchの観点、あるいは単純にその便利さからか、よく用いられているように見えます。
私の十八番のR言語だとR Markdown*1

PythonだとiPython Notebook

がその環境に相当します。R言語を用いた例は以下の資料に詳しく載っています。

また、上で挙げたiPython NotebookをF#で使うこともできるようです。これは以前に雑にまとめました。

一方、F#で同様のことをやろうとすると、(ワタクシ調べの範囲で)「F# Formatting」というライブラリを使うとよさそうなのですが、その導入・使用について、ひと手間必要で、上述の2つに比べるとやや面倒な印象があります。実際にF# Formattingをどう使ったらいいかについては、ありがたいことに日本語の情報があり、以下のBLOG記事で丁寧に解説されているので、これを見てみると良いでしょう。

これを見ていて、「これはお気軽に使うにしてはちょっと面倒だぞと。どこかにテンプレート的なもんが転がってないかな?」と探していたら見つけたのがFsLab Jounalでした。

FsLab Journal

FsLab Jounalは、F#界の神・トマスピ氏が用意してくださっている、テンプレートです。

実はこのテンプレートはVisual Studio Express版では使うことができませんでした。当時の私はこれを見つけた喜びに喚起する一方、使えないという現実に絶望を味わったものです。しかし、.NET大好きなF#界隈のみなさんならご存知のように、最近の.NETのオープンソース化に合わせ、Visual StudioもExpress版がCommunity版となり、ありがたいことにこのテンプレートをインストールできるようになったのです!こいつを使うと、いちいちビルドスクリプトを書いたりしなくていい!とても簡単にF#のコードと本文を合わせたレポートを作成することができます。

導入〜チュートリアルコンパイル

以下、使い方をざっくりと示します。

まず、上記のリンクよりFsLab Jounalをダウンロードすると、自動でVisual Studioに組み込まれ、プロジェクトを新規作成する画面で「FsLab Jounal」が選択できるようになるので、これを使います。

そして、作成されたプロジェクトに対して、何も考えずにビルド&実行(F5)すると結果として、チュートリアルとして用意されているレポートがHTML形式で出力されます*2

あとはチュートリアルのfsxなんかを見ながら独自のドキュメント&コードを書いていけば「やった!これで簡単にF#でReproducible Researchが出来るぞ!」となるわけです。

以下、ハマった点などをまとめます。

レポート内で日本語を使いたい

(私だけなのかもしれないが)デフォルトだとfsxがshift-jisの文字コードで保存されており、このままだと日本語が正しく表示されません。なので、fsxファイルの文字コードUTF-8にして再保存しておく必要があります。

レポートのひな型を修正したい

レポート&コードはfsxに書いたものがHTMLなる一方、レポートの外面を決めているひな型は、プロジェクトフォルダ下の

  • packages\FsLab.Runner.XXX\styles

にある*3、template.htmlです。なので、レポートの"見てくれ"を変えたければ、これに手を入れればOKです。あるいは、プロジェクト内にあるMain.fs内で呼ばれているJournal.Process関数のtemplateLocation引数にファイルパスを指定してテンプレートを変更することもできます。このとき、ファイルパスとして指定する先には、デフォルトでついてくるテンプレートのフォルダ構成同様に、cssからその他html, jsファイルまで入ったフォルダとすることが必要です。

その他

Main.fsにあるように"--latex"オプションを指定するとpdfでの出力も可能だそうですが、試していません*4

まとめ

この記事ではF#でReproducible Researchを行うための環境としてFsLab Jounalというテンプレートを使うという方法を紹介しました。「新しい項目」を追加する際には「FsLab Tutorial(using R)」なんてのもあり、RTypeProviderを用いてF#とRを連携させる方法についても簡単に試すことができます。

*1:これに加えてknitrというパッケージ

*2:正確には、プロジェクトのルート直下にあるすべてのfsxファイルが自動的にHTMLレポートへと変換されます

*3:XXXはライブラリのバージョン番号

*4:多分TeXの環境周りでハマってひどいめにあうことは目に見えているので…