satysfi-docker を使って SATySFi をお手軽に試す

この記事は SATySFi Advent Calendar 2019 3日目の記事です。 2日目はSATySFiの作者であるgfngfnさんによるSATySFiの2段組機能でした。

前置き

SATySFi をインストールするためには opam と OCaml コンパイラのインストールが必要ですが、OCaml を使わない人にとっては SATySFi のためだけに opam 環境を入れるのは面倒です。 opam をすでに使っている人にとっても、SATySFi のインストールには専用の opam repository を使うので環境を分けるために SATySFi 用の switch を作って OCaml コンパイラをビルドして〜といったことをすることになると思います。この作業もそれなりに時間がかかるので面倒です。 ようやく opam 環境を用意して SATySFi をインストールする環境が整った後も、SATySFi のインストールでまた少し時間がかかります。 いずれもやればよくはあるのですが、少しだけ試したいときでも時間がかかりますし、罠にはまる可能性もありますし、もっとお手軽に SATySFi を試せたらいいですよね。

ホストの環境を壊さずにソフトウェアを試すために、最近は Docker を使うことが多くなっていると思います。 SATySFi も有志の方が作ってくださった Docker イメージがあったのですが、バージョンが古いあるいは不明だったり、メンテされているか怪しかったので、自分で作ってみました。

github.com

satysfi-docker の使い方

まず docker をインストールしていない方はしてください (結局インストールするのかという感じですが、opam よりは Docker のほうがすでにインストールしている人が多そうなのと、いろいろ便利なので入れておいて損はないのではと思います。Docker のインストールに関する資料も少なくとも SATySFi のそれよりは多いはずです)。なお、以降 Docker に関する説明は省略します。

Docker Developer Tools | Docker

Docker をインストールできたら、あとは .saty ファイル (今回は demo.saty とします。 ) があるディレクトリに行き、

docker run --rm -v $(pwd):/satysfi amutake/satysfi satysfi demo.saty 

で文書 (ここでは demo.pdf) がビルドできます (イメージは勝手にダウンロードされてきます)。イメージのダウンロードと展開に多少時間がかかります(後述する slim タグを使うともっと速くなります)が、何も考えなくていいのでお手軽なのではないかと思います。

各タグの紹介

amutake/satysfi にはいくつかタグがあります。 無印、slim、nightly と、バージョン付きかそうでないかの組み合わせがあります。 すべてのイメージで SATySFi と Satyrographos (SATySFi のパッケージマネージャ。これについては7日目、12日目で作者の na4zagin3 さんによる解説があることと思います) が含まれていますが、それぞれ特徴があるので、適切に使い分けていただけたらと思います。

タグ 説明
latest SATySFi の新しいバージョンが出たら更新されます (2019-11-19 時点では 0.0.3-dev2019.11.16 と同じイメージ)。opam 環境と、ビルドに便利ないくつかのパッケージ付き。
slim SATySFi の新しいバージョンが出たら更新されます (2019-11-19 時点では 0.0.3-dev2019.11.16 と同じイメージ)。opam など諸々が入っていないのでサイズが小さいです。
nightly 毎日朝9時 (JST) に更新されます。SATySFi と Satyrographos の master ブランチが入っています。slim と同様に opam 環境は入っていません。
0.0.3-dev2019.11.16 2019年11月16日時点の SATySFi の master ブランチのスナップショットが含まれます。更新しません。
0.0.3-dev2019.11.16-slim 0.0.3-dev2019.11.16 の slim バージョン。
0.0.3 SATySFi の 0.0.3 が入っています。基本更新しません (といいつつ2019年11月15日くらいにインタフェースの破壊的変更を入れました…)
0.0.3-slim 0.0.3 の slim バージョン。

無印

latest, 0.0.3-dev2019.11.16 のようなタグをここでは無印と呼ぶことにします。無印は opam 環境がフルで入っている環境です。また、 make や fontconfig など、文書のビルドに便利そうないくつかのパッケージも含まれています。

opam と Satyrographos を使って SATySFi のいろいろなパッケージをインストールするのであればこちらを利用してください。

欠点はイメージのサイズが大きいことです。opam 環境がフルで入っているので、圧縮した状態で715MBほど、解凍すると2.2GBくらいあります。

slim

無印は2GB以上のイメージになっているのに対し、こちらは圧縮した状態で50MBほど、展開して150MB程です (これでも大きいと言えば大きいですが)。 SATySFi 単体で使う場合はこちらで SATySFi を試すのがいいんじゃないかと思います。

ただしこちらは opam 環境を削除して SATySFi と Satyrographos のバイナリだけを置いているので、 opam を使って SATySFi のパッケージをインストールすることはできなくなります。 システムフォントを Satyrographos でインストールして使うくらいであればこちらで十分です。

nightly

「SATySFi の master ブランチに面白い機能が入ったけど自分でビルドするの面倒」という方はこちらを利用してください。 毎日 09:00 (JST) 時点の SATySFi と Satyrographos が入っています。

中身は slim 版と同様に opam 環境が削除されたものになっています。おそらく nightly は SATySFi の新機能を軽く試すものになると思っていて、その場合は外部パッケージも使わなさそう、かつサイズは小さい方がよさそうなため、こうしています。

イメージの中には /satysfi-revision/satyrographos-revision/build-date という3つのファイルが含まれていて、それぞれどのリビジョンの SATySFi・Satyrographos が同包されているか、そしてビルドした日付が書かれています。

バージョン付き

GitHub - na4zagin3/satyrographos-repo: Custom OPAM repository for SATySFi libraries managed by Satyrographos不定期で SATySFi のスナップショットを取ってくださっているので、 そのバージョンと同一のタグがついています (0.0.3+dev2019.11.16 なら 0.0.3-dev2019.11.16 というタグ。docker のタグは + が使えないようなので - にしています)。 複数人で SATySFi の文書を書くときには生成物の違いをなくすために各自のローカル環境のバージョンと CI のバージョンを揃えておきたいので、バージョン付きが便利です。

他の手軽に試す方法

macOS を使っている方は GitHub - nyuichi/homebrew-satysfi で1コマンドでインストールできます。こちらの方法でインストールすると (おそらく) HEAD になります。

他には Web 上で SATySFi による組版を試すことができるページがいくつかあります (以下2019-11-19時点で動いているもの)。

  • SATySFi Playground
    • 中で satysfi-docker (amutake/satysfi:slim) を使っていただいています。ありがとうございます。
  • satysfi.ml

おわりに

satysfi-docker はちゃんとメンテしていくつもりなのでなにか不具合や要望があれば issue にお願いします。 6日目には satysfi-docker と GitHub Actions を使って文書やパッケージの CI をする話を書くのでそちらもよろしくお願いします。