Re:View Starter で電子書籍
思い立ったが Re:View Starter インストール
なんか思い立ったので電子書籍の開発環境を整えてみることにする。理由はいろいろあるんだが、仕事でソフトウェアの開発をしているので、プライベートでも、なんかを開発してみたくなった。開発ジャンキーってことだ。まあ私のことはどうでもいい。忘れないうちに作業手順をまとめてみる。誰かの参考になればいいな。
Kindle 用の .mobi と電子書籍用の PDF が出力できれば当面はOKなので、それが可能な Re:View とその派生の Re:View Starter に目をつけた。上記ページを参照して Re:View Starter をインストールしてみる。
どちらかというと CircleCI や textlint を使っての継続的なイテレーションを行うことを考えると Re:View のほうが実施例も多そう。しかし Re:ViewStarter の方がセットアップするのが簡単なのと、吹き出しによる会話調の寸劇のような表現が可能であるということが気に入ったので、まずは Re:ViewStarter を使ってみる。自動処理の実施例が多いというメリットが欲しくなればそのときに Re:View に乗り換える。
1) docker 環境を作る
まずは Windows System for Linux2 をインストールするが、このPCにはすでに WSL2 がインストールされているので、WSL2 のメンテナンスから始める
% sudo apt-get update
% sudo apt-get upgrade
それから docker をインストール。
上記のサイトを参考。まずは docker の公式レポジトリと連携する。
% sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
% curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
% sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
% sudo apt-get update
その後、docker のインストール。
% sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
docker を起動させる。
% sudo service docker start
ちなみに docker の状態確認、停止は以下。
% sudo service docker status # ステータス確認
% sudo service docker stop # 停止
docker の起動時に毎回 sudo するのが面倒なら、以下のように docker グループに自アカウントを追加。
% sudo usermod -aG docker $USER
docker のスタート用、ストップ用のスクリプトを作っておくと楽かもしれない。
#! /bin/bash
/usr/sbin/service docker status
if [ $? != 0 ] ; then
sudo /usr/sbin/service docker start
fi
スタート用が上、ストップ用が下。
#! /bin/bash
/usr/sbin/service docker status
if [ $? = 0 ] ; then
sudo /usr/sbin/service docker stop
fi
2) Re:View Starter のインストール
さて docker の準備ができたので、次に Re:View Starter をインストール。ままずは ruby, texlive を使えるように Starter の開発元の kauplan さんから docker コンテナを引っ張ってくる。
% sudo docker pull kauplan/review2.5
% sudo docker run --rm kauplan/review2.5 ruby --version
% sudo docker run --rm kauplan/review2.5 uplatex --version
docker pull に時間かかるが、焦らず待とう。
できたら Re:View Starter 本体を取得。以下のサイトの「プロジェクト作成を始める」で、作りたい本の詳細を選択。表紙とか章立てのデザインとか。最終的には zip ファイルをゲットできるのでそれを展開する。
zip ファイルを展開したディレクトに下りて、rake docker:pdf とすれば、書籍サンプルが出来上がるのだけど、Windows の wsl2 環境でのビルドは書籍ファイルの持ち主が root ユーザーになってしまう模様。Mac ではそんなことは起こらないらしい。謎。
なので lib/tasks/starter.rake ファイルを少し改造。35行目と36行目の間に一般ユーザでの docker 起動の設定
docker_opts += " -u $(id -u):$(id -g) -e HOME=/work/tmp"
を追加する。こんな感じ。
docker_run = proc do |command, opt=nil|
docker_opts = "--rm -v $PWD:/work -w /work"
docker_opts += " -u $(id -u):$(id -g) -e HOME=/work/tmp"
docker_opts += ENV.keys().grep(/^STARTER_/).map {|k| " -e #{k}" }.join()
sh "docker run #{docker_opts} #{opt} #{docker_image} #{command}"
end
その後、
% rake docker:pdf
とすると pdf ファイルができる。万歳。
雑感
今回 Windows でいろいろ試してみた。
1. 本記事のように wsl2 上で kauplan さんの docker イメージを利用
2. wsl2 上に ruby と texlive をインストールして wsl2 上でビルド
3. Windows 版ネイティブの ruby.exe と texlive をインストールしてビルド
結局 1 の docker でやるほうが処理が早いという結論。
理由はいろいろ想像できる。ファイルを大量に読み込む必要のある TeX 処理には docker のファイルシステムのほうが向いている説。docker イメージ内の texlive が 2017 版で、その他の環境は最新の texlive 2021 なので重いという説。docker の texlive は Re:View Starter に最適化されている説。 まあ、詳しくパフォーマンス調査を掘り下げるために時間を食うのは、システムをサクッと立ち上げて、時間は執筆に使うという Starter の思想に反するわけなので、ここまで。
注)表紙画像は Chrome で Re:View Starter のユーザーガイドを表示したときのスクリーンショット。ユーザーガイドの URL は以下。
https://kauplan.org/reviewstarter/reviewstarter-usersguide-20210715.pdf