WSL2でOCamlとSATySFiを動かす

OCamlWindowsで動かすにはいろいろと問題があるらしい。しかしWSL2ならなんとかなるんじゃないかと思ってインストールしてみたら、嬉しいことに特別な配慮をすることなく動かすことができた。

WSL2の導入

WSL2はこの春(2020年)に一般提供されるらしいが、まだ正式にリリースされていない。待ちきれないのでWindows Insider Programに登録して先に使わせてもらおう。

LinuxディストリビューションにはUbuntu 18.04 LTSを選択した。Ubuntu 16.04 LTSだとopamのインストールに関していろいろと面倒なことがありそうである。

導入は公式の指示通りにやればできる。資料が日本語なのでうれしい。 docs.microsoft.com

Windows Terminalの導入

WSL2はコマンドプロンプトPowerShellから使えるのだが使い勝手が怪しい。ちょうどマイクロソフトが出しているWindows Terminal (Preview)がよさそうなのでMicrosoft Storeからインストールして使うことにした。

いくつかWindows Terminalの設定をいじくる。設定ファイルはJSONで書かれている。

WSLを起動するとカレントディレクトリが/mnt/c/Users/(Windowsユーザ名)の状態で開始される。これをホームディレクトリに変更したい。
profilesにあるUbuntuのprofileに以下の項目を加える。

"startingDirectory": "//wsl$/Ubuntu-18.04/home/(UNIXユーザ名)"
  • カラースキーム

わたしは個人的にIcebergが好きなのでIceberg color scheme for Windows Terminal · GitHubから色設定をもってきた。

ただしgreenが背景になったとき文字が見づらくなるので、greenだけ元の色のRGB値をそれぞれ半分にした"#5a5f41"に変えてある。

opamのインストール

まずOCamlコンパイラなどをビルドするために必要なソフトウェアをインストールしておく。

sudo apt update
sudo apt install build-essential m4

次にopamをインストールするのだが、aptで入るopamはバージョンが古いのでよろしくない。
opam - Installに従って次のようにすると最新安定版が入る。

sudo add-apt-repository ppa:avsm/ppa
sudo apt update
sudo apt install opam

あとは普通に初期設定をする。--disable-sandboxingなどの変なオプションは必要ないので安心。

opam init
eval $(opam env)

これでOCamlが使えるようになった。非常にうれしい。

$ ocaml
        OCaml version 4.10.0

# print_endline "hogeeeee";;
hogeeeee
- : unit = ()
#

SATySFiのインストール

OCamlが入ったので、調子に乗って GitHub - gfngfn/SATySFi: A statically-typed, functional typesetting system も導入してしまった。

基本的にreadmeの通りにやればインストールできるのだが、つい先日(2020/4/5)にSATySFiがサポートするOCamlのバージョンが4.06.0から4.08.0以上に引き上げられて、2020/4/9現在readmeが更新されていないのでそこだけ注意が必要である。

readmeに依存するソフトウェアの一覧があるので、ないものはインストールしておく。

sudo apt install ruby

SATySFi用のスイッチを作成する。ここでOCamlのバージョンには以前4.10.0でビルドに失敗したので4.08.0を選択したが、今は4.10.0がサポートされていそうだ。

opam switch create satysfi 4.08.0
eval $(opam env)

なおSATySFi用のスイッチでインストールを行うと、スイッチをデフォルトに戻したときsatysfiコマンドが見つからないということになってしまう。この面倒をいくらか減らすにはスイッチの自動切換え機能を使うとよい。SATySFiを扱うディレクトリでopam switch link satysfiを実行すれば、以降はそのディレクトリ以下では自動的にスイッチがsatysfiに切り替わるようになる。

あとは適当なインストールディレクトリにてreadmeに従って次のコマンドを順に実行するとインストールが完了する。

opam repository add satysfi-external https://github.com/gfngfn/satysfi-external-repo.git
opam update

git clone https://github.com/gfngfn/SATySFi.git
cd SATySFi

opam pin add satysfi .
opam install satysfi

./download-fonts.sh
sudo ./install-libs.sh

最後のinstall-libs.shはsudoがないと実行できなかった、、、

デモをコンパイルしてみよう:

cd demo
make
explorer.exe .

f:id:rood_ni:20200409180711p:plain
demo

explorer.exe .を実行することでwindowsエクスプローラーからLinuxファイルシステムを覗けるので、そこから出力されたpdfを簡単に見ることができる。