Dockerを使ってRe:VIEWで本が書きたい!~ステップ3:vvakameさんのDockerイメージで環境構築~
これは何をやりたい人向けのエントリ?
- 次をすべて満たす人向けのエントリです
- 技術書典に向けて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でした
- もし
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を出力して確認、をくり返せば設定項目は分かると思うので詳細は解説しません
原稿を書いてみる
articles
フォルダの下にあるpreface.re
で前書きを書き足してみましょう- 「ねこはかわいい!」と書いてみました
- コマンドプロンプトで
docker-compose run --rm review rake pdf
を叩いてみると、ちゃんと反映されています - なぜ
preface.re
に書くと反映されるのか?というと、catalog.yml
というカタログファイルでそう設定されているからです- カタログファイルについてはもう公式ドキュメントのRe:VIEW catalog.yml Guideをご覧いただいた方がよさそう
さいごに
- 技術書典のたびに「リポジトリ!環境構築!どうやるんだっけ?!」と困っていた頭弱い自分のために書きました