これは何をやりたい人向けのエントリ?
- 次をすべて満たす人向けのエントリです
- 技術書典に向けてRe:VIEWで本が書きたい!
- Dockerを使えば手軽に環境作れるらしいと聞いたので手順が知りたい!
- もうDockerを使ってRe:VIEWで本が書きたい!~ステップ1:Docker for Windowsを入れよう~ - mochikoAsTechのdig日記はやった!
- それからDockerを使ってRe:VIEWで本が書きたい!~ステップ2:TechBoosterのテンプレートで原稿リポジトリを作ろう~ - mochikoAsTechのdig日記もやった!
前提
- 既にDockerが動く環境があること
- Dockerが動く環境…?という方はこちらを参照 mochikoastech.hatenablog.com
- TechBoosterのテンプレートを使った原稿リポジトリがあること
「ステップ3:vvakameさんのDockerイメージで環境構築」の手順
1. Re:VIEWのバージョンを確認しよう
Re:VIEWのGitリポジトリで最新バージョンを確認しよう
- https://github.com/kmuto/review/blob/master/NEWS.ja.mdを見ると、
Version 3.2.0とあるので2019年8月時点のRe:VIEWの最新バージョンは3.2だ!
ReVIEW-Templateの対象バージョンを確認
- https://github.com/TechBooster/ReVIEW-Templateに
vvakame/review:3.1を使ってね、と書いてあるので、2019年8月時点では3.1を対象としている模様
一式セットアップ済みのdockerイメージを用意してあるので使ってください。 Dockerがうまく動くようになっている場合、以下のコマンドで細かい準備なしにビルドを行うことができます。 $ docker pull vvakame/review:3.1
- TechBoosterのひつじさん曰く「動作確認は3.1でしたけど、たぶん3.2でも動く」ということなので
3.2でも大丈夫そうたぶん.1差ならうごくよ!動作確認は3.1でやった!
— mhidaka@4日目南ナ49ab (@mhidaka) 2019年8月8日
config.ymlでバージョンを確認
- ステップ2で作った原稿リポジトリで、
articlesフォルダの下にあるconfig.ymlを開く- 私の場合は
C:\Users\mochikoAsTech\Documents\startDNS\articles\config.yml
- 私の場合は
config.ymlに書いてあるreview_versionを確認するreview_version: 3.0とあるので「これはRe:VIEW3系に対応した設定ファイルなんだな」と分かる
# この設定ファイルでサポートするRe:VIEWのバージョン番号。 # major versionが違うときにはエラーを出す。 review_version: 3.0
どのバージョンのRe:VIEWを使うか決める
- ここまで確認したことから、本エントリではRe:VIEWの
3.2を使うこととする!
2. vvakameさんのDockerイメージを連れてこよう
Dockerイメージを連れてくる
- コマンドプロンプトを開いて、
docker images vvakame/reviewを叩く- まだDockerイメージがないことを確認
>docker images vvakame/review REPOSITORY TAG IMAGE ID CREATED SIZE
- コマンドプロンプトで
docker pull vvakame/review:3.2を叩いてvvakameさんのreviewのDockerイメージ(3.2)を連れてくる- 叩いた直下のフォルダに何かが置かれるとかではないので、どこで叩いても大丈夫
- ちなみに
docker pull vvakame/reviewのようにバージョン指定なしでたたくと、latest(最新バージョン)が来てくれる。2018年8月時点だとlatest=3.2なのでそれでもよし vvakame/review:3.2って書いただけで一体どこからDockerイメージ連れてきてくれるの?!と思うだろうが、Docker HubというたくさんのDockerイメージが登録されている場所から連れてこられるのだ- まじかー、なにそれー、Dockerよう分からんーと思ったらマンガでわかるDocker ① 〜概念・基本コマンド編〜がお勧め
>docker pull vvakame/review:3.2 3.2: Pulling from vvakame/review f5d23c7fed46: Pull complete 021db6e5dcda: Pull complete 771bbc40d6be: Pull complete 1738d9462c97: Pull complete 9c09143aac1c: Pull complete 97ee0730c016: Pull complete 1086092c9acc: Pull complete a40dfd0b3ecf: Pull complete 8f9d5bd5651d: Pull complete 48e10854c260: Pull complete 7a338c0510db: Pull complete 752184f974ea: Pull complete Digest: sha256:296a3eb7427d70f1dc581fa6566c1d2a3d45dbc8e0935b6672155b2049769bcf Status: Downloaded newer image for vvakame/review:3.2
- 再び
docker images vvakame/reviewを叩く- Dockerイメージがいる!
>docker images vvakame/review REPOSITORY TAG IMAGE ID CREATED SIZE vvakame/review 3.2 3168b41bd37d 2 weeks ago 2.04GB
3. Dockerコンテナを使ってPDFを吐き出す
docker-compose.ymlを用意する
- ステップ2で作った原稿リポジトリで、
articlesフォルダの下にdocker-compose.ymlを作る- 私の場合は
C:\Users\mochikoAsTech\Documents\startDNS\articles\docker-compose.yml
- 私の場合は
- 中身はこんな感じ
startDNSのところは自分の原稿リポジトリ名に書き換えてね
version: '3'
services:
review:
image: vvakame/review:3.2
volumes:
- .:/startDNS
build: .
working_dir: /startDNS
コマンドを叩いてPDFを吐き出す
- コマンドプロンプトで
cd C:\Users\%USERPROFILE%\Documents\原稿リポジトリ名\articlesを叩いて、原稿リポジトリのarticlesフォルダの下に移動する- 私だったらこんな感じ
>cd C:\Users\mochikoAsTech\Documents\startDNS\articles
- コマンドプロンプトで
docker-compose run --rm review rake pdfを叩く
>docker-compose run --rm review rake pdf review-pdfmaker config.yml INFO: compiling preface.tex INFO: compiling article.tex INFO: compiling contributors.tex INFO: uplatex -interaction=nonstopmode -file-line-error __REVIEW_BOOK__.tex INFO: uplatex -interaction=nonstopmode -file-line-error __REVIEW_BOOK__.tex INFO: uplatex -interaction=nonstopmode -file-line-error __REVIEW_BOOK__.tex INFO: dvipdfmx -d 5 -z 9 __REVIEW_BOOK__.dvi
articlesフォルダの下にReVIEW-Template.pdfが生まれる
4. 自分の本に合わせて色々カスタマイズする
印刷用PDFか電子書籍用PDFか?B5かA5か?を設定する
- いま、トンボ付きのPDFが出力されているのは、デフォルトが「B5で印刷用のPDFを出力する」という設定になっているからです
- 原稿リポジトリで
articlesフォルダの下にあるconfig.ymlを見てみましょう
# B5の設定(10pt 40文字×35行) - 紙版 texdocumentclass: ["review-jsbook", "media=print,paper=b5,serial_pagination=true,hiddenfolio=nikko-pc,openany,fontsize=10pt,baselineskip=15.4pt,line_length=40zw,number_of_lines=35,head_space=30mm,headsep=10mm,headheight=5mm,footskip=10mm"] # B5の設定(10pt 40文字×35行) - 電子版 # texdocumentclass: ["review-jsbook", "media=ebook,paper=b5,serial_pagination=true,openany,fontsize=10pt,baselineskip=15.4pt,line_length=40zw,number_of_lines=35,head_space=30mm,headsep=10mm,headheight=5mm,footskip=10mm"] # A5の設定(9pt 38文字×37行) - 紙版 # texdocumentclass: ["review-jsbook", "media=print,paper=a5,serial_pagination=true,hiddenfolio=nikko-pc,openany,fontsize=9pt,baselineskip=13pt,line_length=38zw,number_of_lines=37,head_space=15mm,headsep=3mm,headheight=5mm,footskip=10mm"] # A5の設定(9pt 38文字×37行) - 電子版 # texdocumentclass: ["review-jsbook", "media=ebook,paper=a5,serial_pagination=true,openany,fontsize=9pt,baselineskip=13pt,line_length=38zw,number_of_lines=37,head_space=15mm,headsep=3mm,headheight=5mm,footskip=10mm"]
- たとえば次のようにコメントアウトの場所を変更して「B5で電子用のPDFを出力する」という設定にした上で、再度コマンドプロンプトで
docker-compose run --rm review rake pdfを叩いてみましょう
# B5の設定(10pt 40文字×35行) - 紙版 # texdocumentclass: ["review-jsbook", "media=print,paper=b5,serial_pagination=true,hiddenfolio=nikko-pc,openany,fontsize=10pt,baselineskip=15.4pt,line_length=40zw,number_of_lines=35,head_space=30mm,headsep=10mm,headheight=5mm,footskip=10mm"] # B5の設定(10pt 40文字×35行) - 電子版 texdocumentclass: ["review-jsbook", "media=ebook,paper=b5,serial_pagination=true,openany,fontsize=10pt,baselineskip=15.4pt,line_length=40zw,number_of_lines=35,head_space=30mm,headsep=10mm,headheight=5mm,footskip=10mm"] # A5の設定(9pt 38文字×37行) - 紙版 # texdocumentclass: ["review-jsbook", "media=print,paper=a5,serial_pagination=true,hiddenfolio=nikko-pc,openany,fontsize=9pt,baselineskip=13pt,line_length=38zw,number_of_lines=37,head_space=15mm,headsep=3mm,headheight=5mm,footskip=10mm"] # A5の設定(9pt 38文字×37行) - 電子版 # texdocumentclass: ["review-jsbook", "media=ebook,paper=a5,serial_pagination=true,openany,fontsize=9pt,baselineskip=13pt,line_length=38zw,number_of_lines=37,head_space=15mm,headsep=3mm,headheight=5mm,footskip=10mm"]
- トンボが消えて、電子書籍用のPDFが出力されました!
- ちなみにDNSをはじめようはB5、技術をつたえるテクニックはA5でした

- ちなみにDNSをはじめようはB5、技術をつたえるテクニックはA5でした
- もし
docker-compose run --rm review rake pdfを叩いたときにこんなエラーが出たら、PDFを開いたまま出力しようとしているのが原因です!一度PDFを閉じてからやりなおしましょう
>docker-compose run --rm review rake pdf
review-pdfmaker config.yml
INFO: compiling preface.tex
INFO: compiling article.tex
INFO: compiling contributors.tex
INFO: uplatex -interaction=nonstopmode -file-line-error __REVIEW_BOOK__.tex
INFO: uplatex -interaction=nonstopmode -file-line-error __REVIEW_BOOK__.tex
INFO: uplatex -interaction=nonstopmode -file-line-error __REVIEW_BOOK__.tex
INFO: dvipdfmx -d 5 -z 9 __REVIEW_BOOK__.dvi
Traceback (most recent call last):
16: from /usr/local/bin/review-pdfmaker:23:in `<main>'
15: from /usr/local/bin/review-pdfmaker:23:in `load'
14: from /var/lib/gems/2.5.0/gems/review-3.2.0/bin/review-pdfmaker:16:in `<top (required)>'
13: from /var/lib/gems/2.5.0/gems/review-3.2.0/lib/review/pdfmaker.rb:97:in `execute'
12: from /var/lib/gems/2.5.0/gems/review-3.2.0/lib/review/pdfmaker.rb:156:in `execute'
11: from /var/lib/gems/2.5.0/gems/review-3.2.0/lib/review/pdfmaker.rb:282:in `generate_pdf'
10: from /usr/lib/ruby/2.5.0/fileutils.rb:358:in `cp'
9: from /usr/lib/ruby/2.5.0/fileutils.rb:1461:in `fu_each_src_dest'
8: from /usr/lib/ruby/2.5.0/fileutils.rb:1479:in `fu_each_src_dest0'
7: from /usr/lib/ruby/2.5.0/fileutils.rb:1463:in `block in fu_each_src_dest'
6: from /usr/lib/ruby/2.5.0/fileutils.rb:359:in `block in cp'
5: from /usr/lib/ruby/2.5.0/fileutils.rb:432:in `copy_file'
4: from /usr/lib/ruby/2.5.0/fileutils.rb:1291:in `copy_file'
3: from /usr/lib/ruby/2.5.0/fileutils.rb:1291:in `open'
2: from /usr/lib/ruby/2.5.0/fileutils.rb:1292:in `block in copy_file'
1: from /usr/lib/ruby/2.5.0/fileutils.rb:1292:in `open'
/usr/lib/ruby/2.5.0/fileutils.rb:1292:in `initialize': Device or resource busy @ rb_sysopen - /startDNS/ReVIEW-Template.pdf (Errno::EBUSY)
rake aborted!
Command failed with status (1): [review-pdfmaker config.yml...]
lib/tasks/review.rake:96:in `block in <top (required)>'
/var/lib/gems/2.5.0/gems/rake-12.3.3/exe/rake:27:in `<top (required)>'
Tasks: TOP => pdf => book.pdf
(See full trace by running task with --trace)
色々カスタマイズする
- PDFをどんなファイル名で出力するか、書名や著者名は何にするか、などはすべて
articlesフォルダの下にあるconfig.ymlで設定します- 書いてあるコメントを見ながら直す→PDFを出力して確認、をくり返せば設定項目は分かると思うので詳細は解説しません

- 書いてあるコメントを見ながら直す→PDFを出力して確認、をくり返せば設定項目は分かると思うので詳細は解説しません
原稿を書いてみる
articlesフォルダの下にあるpreface.reで前書きを書き足してみましょう- 「ねこはかわいい!」と書いてみました

- コマンドプロンプトで
docker-compose run --rm review rake pdfを叩いてみると、ちゃんと反映されています
- なぜ
preface.reに書くと反映されるのか?というと、catalog.ymlというカタログファイルでそう設定されているからです- カタログファイルについてはもう公式ドキュメントのRe:VIEW catalog.yml Guideをご覧いただいた方がよさそう

- カタログファイルについてはもう公式ドキュメントのRe:VIEW catalog.yml Guideをご覧いただいた方がよさそう
さいごに
- 技術書典のたびに「リポジトリ!環境構築!どうやるんだっけ?!」と困っていた頭弱い自分のために書きました