見出し画像

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

いいなと思ったら応援しよう!