TeXとRubyだけでWindowsにRe:VIEW環境を構築した話

この記事は[技術系同人誌 Advent Calendar 2017](https://qiita.com/advent-calendar/2017/tech-fanbook)の（形式上）7日目の記事です．
追記しました（2017年12月17日）．
宣伝はダメだと聞いたので告知の表現を変えました（2017年12月17日）．

# 背景
詳しくは[技術系同人誌 Advent Calendar 2017第11日目](https://qiita.com/oyakata2438/items/a721a03e3a118590ab2c)に書かれていますが，親方Projectさんが合同誌を企画されています．執筆にはRe:VIEWを用い，GitHubを介して共同執筆するスタイルでした．この合同誌に参加するためにはRe:VIEW環境を一から構築しなければならなかったのですが，ネットの記事の解説よりもかなり簡単にWindows 7上に環境を構築できたので，その経験をまとめて共有します．

## Re:VIEWとは何か
Re:VIEWとは書籍執筆の支援ツールであり，ざっくりと，独自記法をRubyでTeX形式に変換する，LaTeXのフロントエンドであると理解しています．つまり，Re:VIEW環境の構築にはTeXとRubyの二つが必要になるということです．

## Windows上へのRe:VIEW環境構築の情報
Re:VIEWの解説書[^1]にはWindowsに関する記述はコラム一つ分しかなく，まともなTeX環境を構築していないから”素直に”仮想環境を利用していると書かれています．「"Re:VIEW" Windows」あるいは「"Re:VIEW" Windows 構築」で検索すると，いくつかに大別された情報が見つかります．新しい記事に多いのはWindows 10のBash on Windowsを使う方法です．例えば，

 * [Bash on WindowsでFirstStepReVIEW-v2をビルドする](https://qiita.com/atsushieno/items/e87783cfb056f627c4eb)
 * [Windows10環境でRe:VIEWの執筆環境を構築する方法](http://kaiware007.hatenablog.jp/entry/2017/08/15/025618)
 * [bash on Windows(WSL)でRe:VIEW環境を構築する](https://szkn27.blogspot.jp/2017/09/bash-on-windowswslreview.html)
 * [Re:VIEW の環境を構築する](http://tk3log.hatenablog.com/entry/2017/03/05/235417)

などが上位に出てきます．Cygwinを利用してTeXとRubyをインストールする方法もあり，これは古めの記事に多く見られる傾向です．（推定される理由を追記しました．2017年12月17日）

 * [Windows で ReVIEWを使う](http://www.naturalsoftware.jp/entry/20120710/1341889820)
 * [執筆支援ツール「Re:VIEW」をWindowsにインストール書籍制作をCIする](http://blog.ch3cooh.jp/entry/20130826/1377523171)
 * [Cygwinを使ってWindows上でReVIEWを動かしてepubを作る](http://d.hatena.ne.jp/hyuki/20121205/cygwin)

他にもVirtualBoxを使って仮想環境を構築する方法（[Windows で Re:VIEW 環境を構築する](http://u64178.blogspot.jp/2015/01/windows-review.html)）や，Cygwinの代わりにMSYS2を使う方法（[Windows10でRe:VIEWでPDFを作成するまでの環境構築](https://blog.naotaco.com/archives/1396)）などもあります．流行りのDockerを使う方法もありますが，WindowsにDockerをインストールするにはVirtualBoxが必要なので，負担はVirtualBoxを使って仮想環境を構築する方法と同じです．

# Re:VIEW環境の構築
## 本当にこんなに面倒なの？
記事を読んだときの著者らの素直な感想です．WindowsにはW32TeXやTeX LiveといったTeX環境があります．検索すると，RubyにもWindows版があり，RubyInstallerを使えば簡単にインストールすることができることが分かりました．それなのに，面倒なことをしている記事ばかりということは，何か根本的な問題があるのかもしれないと考えざるを得ません．問題があるとすれば，Rubyは動けどRe:VIEWが動かないか，Re:VIEWからTeXが叩けないかのどちらかだろうと推察しました（結局これらは杞憂でした）．

## TeXのインストール
著者らは元々TeX（W32TeX）を利用していたので，TeX環境は既に構築されていました．構築されていない場合は，[W32TeXのインストーラ](http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html)をダウンロードして，インストールを実行します．ウィザードに沿って進めて行くだけなので，失敗することはまずありません．GhostscriptやGSView，dvioutもインストールしておきます．
![ReviewWin7_texinst_1_start.png](https://qiita-image-store.s3.amazonaws.com/0/224040/d696c8bb-a65b-fff8-ac76-5cac072fc60f.png)


## Rubyのインストール
次にRubyをインストールします．[RubyInstaller](https://rubyinstaller.org)をダウンロードし，インストールしました．これもウィザードに沿って進めていくだけでした．
![ReviewWin7_rubyinst_1_license.png](https://qiita-image-store.s3.amazonaws.com/0/224040/a1e635d1-8a8a-45ea-a718-6c5adfbe126f.png)


## Re:VIEWのインストール
Rubyをインストールし終えたら，スタートメニューのすべてのプログラムを展開し，Rubyのフォルダ（執筆時の最新バージョンをインストールするとRuby 2.4.2-x64）を開き、Start Command Prompt with Rubyを実行したのち，開いたコマンドプロンプトで

```
gem install review
```
を実行すると，何事もなくRe:VIEWがインストールされました．
![ReviewWin7_rubyinst_5_startmenu.png](https://qiita-image-store.s3.amazonaws.com/0/224040/7546ac2e-a8d8-e82c-427d-3d2d9c0bc73b.png)

![ReviewWin7_reviewinst.png](https://qiita-image-store.s3.amazonaws.com/0/224040/eb4ae813-5f6d-163d-c11f-aea99215fc60.png)


## Re:VIEWの動作確認
Re:VIEWの原稿を作成するには，`review-init`を実行します．

```shell
review-init reviewSample
```

でreviewSampleという名前の原稿を作成し，ディレクトリreviewSampleに移動して

```shell
review-pdfmaker config.yml
```

を実行すると，Re:VIEWが動き出し，見慣れたTeXのコンパイル画面が出てきました．TeXとRe:VIEWの連携は何も問題なかったようです．
![ReviewWin7_pdfmake_2_progress.png](https://qiita-image-store.s3.amazonaws.com/0/224040/5df9cbf0-bea0-6224-79e4-162365f2bd4e.png)


## dvipdfmxのオプションの設定
何事もなくコンパイルが進んで行きましたが，dviをpdfに変換する途中でエラーが出ました．
![ReviewWin7_pdfmake_3_error.png](https://qiita-image-store.s3.amazonaws.com/0/224040/4e65c07f-08f9-9758-b088-6cbb01498657.png)

エラーの内容は，フォント（ヒラギノ）が見つからないということだったので，Re:VIEWやTeXの問題ではありません．MSゴシックやMS明朝を使うようにconfig.ymlを編集しました．

```shell:before
# dvioptions: "-d 5"
```

```shell:after
dvioptions: "-f msmingoth.map -d 5"
```

これでdviからpdfの変換ができ，無事にpdfファイルが作られました．
![ReviewWin7_pdfmake_4_result.png](https://qiita-image-store.s3.amazonaws.com/0/224040/76e9f041-8f33-c532-016b-0788a03de54b.png)


# まとめ
Windows 7上にRe:VIEW環境を構築し，原稿pdfを出力するのには，CygwinもVirtualBoxもDockerも要りません．必要だった手順は以下の通りです．

 1. TeXをインストール
 2. Rubyをインストール
 3. RubyからRe:VIEWをインストール
 4. config.ymlのdvioptionsに`-f msmingoth.map`を追加

手順4は環境によっては必要ない可能性もあります．もし手順4が必要な場合は，原稿毎にconfig.ymlを編集する必要があります．

なお，Windows 7を搭載したPC 2台でこの手順を確認し，どちらもRe:VIEW環境を構築できています．ですが，全てのPCで成功することを保証するものではありません．TeX Liveを利用した場合も，手順が変わる可能性があります．

本記事手順を詳細に解説し，さらにVisual Studio Codeで執筆，コンパイルするまでを解説した内容を，親方Projectさんの新刊に寄稿しています[^4], [^5]．

[^4]: 親方Project編，ワンストップ！技術同人誌を書こう，コミックマーケット93，1st day-東3-カ41b，親方Project，2017．
[^5]: 親方Project編，ワンストップ！技術同人誌を書こう，コミックマーケット93，3rd day-東4-リ05b，Clear-mint，2017．

# 補足
~~画像を貼ろうとすると![Payload Too Large]()とでてアップロードできなかったので，解決方法が分かれば後で図を追加します（可能なら）~~
画像をアップロードできるようになったので追加しました．（2017年12月17日）

# 追記（2017年12月17日）
Re:VIEW開発者のkmutoさんがTwitter上の会話[^2]の中で，Re:VIEWからのシェルスクリプトの呼び出しを概ねなくしていると言及されているのを見つけました．つまり，過去にはRe:VIEWの利用にはシェルが必須であり，そのためWindowsではCygwinが必要であったと読み取れます．古めの記事でCygwinに言及していたのはこうした背景があったからだと考えられます．

正確にいつのバージョンからシェル無しでRe:VIEWが利用できるようになったのかは分かりません[^3]が，シェルが必須，すなわちWindowsではCygwinが必須であった頃にCygwinを介してRe:VIEWを利用する方法がまとめられ，Re:VIEWがバージョンアップを重ねてシェルが必須ではなくなった頃にはWindowsユーザの多くがWindows 10に移行し，Bash on Windowsを介してRe:VIEWを利用するようになった，という流れと推察します．

[^1]: Techbooster編著，技術書を書こう！～はじめてのRe:VIEW～，2015．
[^2]: https://twitter.com/kmuto/status/836083164351082500
[^3]: Githubでさかのぼれば分かるのでしょうが．