Re:VIEW環境をWindows10上で簡単に構築してPDFを出力するまで

本記事は2019年のものです。案内しているUbuntu 16.04も既に**取得困難**（標準サポート終了済み）のため、こちらではなく、以下のUbuntu 22.04 LTSを用いた更新版の記事を参照ください。

https://qiita.com/hoshimado/items/eb7b9d719132a00d9a31


# 概要

はじめてRe:VIEWを導入する方、且つ、Windows10ユーザーの方、を対象に「とりあえずPDFを作れる環境を構築する」までの手順を記載します（RubyもLaTexも不要で所要１ｈほど）。

Windows 10（Home含む）環境にて、WSL上にDockerイメージ経由でRe:VIEWコンパイルを行います。これにより、**LaTeXやRubyの（ネイティブ）セットアップを不要**とできます。

なお、内容としては当方の次の過去記事と同様です。ただし、切り取り方を「背景はさておき、PDFを作れる環境を構築する」に変えたのがこの記事です。

- [Windows 10 HomeでWSL越しにDocker for Ubuntu+Re:VIEWを使う（VM不要）](https://qiita.com/hoshimado/items/78cccdaffd41dc47837e)


## 環境構築の所要時間

本記事に記載の手順を実行する所要時間は、インターネット回線の速度に依存しますが、ダウンロードの実効速度が10～30Mbpsの環境で１ｈ程度です。その大半は、ダウンロード時間です。


## 大まかな手順

次の手順で、Window10へRe:VIEW環境を導入します。

1. Ubuntu on WSL (=Windows Subsystem for Linux) をセットアップ
1. Re:VIEW image for Docker をセットアップ
1. テクブさん（Teckboosterさん）のテンプレートをコンパイルしてサンプルPDF作成

## 動作環境

動作検証した環境は以下です。

- Microsoft Windows 10 Home (10.0.17134)
    - Windows 10 April Update 2018 適用済み。
- メモリ：4GB
- WSL : Ubuntu 16.04
- Docker version : 17.03.2-ce
    - より詳しいバージョン情報は過去記事の「 [§動作検証した環境（2019/07/22）](https://qiita.com/hoshimado/items/78cccdaffd41dc47837e#%E5%8B%95%E4%BD%9C%E6%A4%9C%E8%A8%BC%E3%81%97%E3%81%9F%E7%92%B0%E5%A2%8320190722) 」を参照
    - WSLとDockerバージョンの組み合わせによっては動作しないことがあるので注意
    - 少なくとも、Decker 18.xxだと動かない（→ [最新のdocker-ceではなく、docker.ioを入れる](https://qiita.com/hoshimado/items/78cccdaffd41dc47837e#%E6%9C%80%E6%96%B0%E3%81%AEdocker-ce%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8Fdockerio%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B) ）

<!-- 
- CPU：Intel Core i5-7200U (2.5GHz)
-->

環境構築に必要なストレージの空きスペースは以下です。

- ストレージ内に最低でも3.2GB以上の空き領域。 
    - Windows Subsystem for Linuxをインストールすると1GBと少し使用します。
    - Re:VIEW image for Dockerをインストールすると2GB前後を使用します(Re:VIEW 2.5、3.1で確認)。

なお、実行時のメモリ使用量は、**0.1GB程度**です。


# §1. Ubuntu on WSL のセットアップ

※過去記事の「Windows Subsystem for Linux のセットアップ」節と全く同じです。

## WSLの機能を有効化

以下の操作で、WSLを有効化します。

1. スタートメニューの「設定」から「アプリと機能」を開く
![スクリーンショット 2018-07-22 01.07.44-a.png](https://qiita-image-store.s3.amazonaws.com/0/125588/79cd284c-3a36-4e97-9960-c7ac6fe3a64e.png)

2. 下の方へスクロールして「関連設定」の「プログラムと機能」を開く（※右ペインに表示されることもあるので、右側になければ下へ）
![スクリーンショット 2018-07-21 09.23.03-a.png](https://qiita-image-store.s3.amazonaws.com/0/125588/c00c7397-4d94-a5f9-2450-289a83f6a346.png)

3. 「Windowsの機能の有効化または無効化」を開く
4. 「Windows Subsystem for Linux」にチェックを入れて「OK」ボタンを押す
![スクリーンショット 2018-07-21 09.23.25.png](https://qiita-image-store.s3.amazonaws.com/0/125588/33cdda23-d738-22c4-fe2a-1d0e4826889f.png)

5. WSLのインストールが始まるので、終了したら「今すぐ再起動」をクリックして再起動する

※WSLのインストール自体はすぐ終わります。再起動後に「インストールしています・・・」などの追加処理はありません。



## Ubuntu 16.04のインストール

つづいて、WSL環境の上で実際に動作するLinuxディストリビューションアプリをインストールします。「Ubuntu 16.04 LTS」を取得します。具体的には以下の操作を行います。

* ※2020-05-02現在、当方の環境ではStoreの検索ボックスに「`Ubuntu 16.04 LTS`」を入力してもヒットしなくなっていました。以下のリンクから直接ジャンプすると未だ取得できる（～2022年まで？）ようです。
    * https://click.linksynergy.com/deeplink?id=zufrxFCTPNQ&mid=39726&murl=https://www.microsoft.com/store/apps/9pjn388hp8c9
    * 上記↑のリンクは以下の記事から取得↓。
        * [Canonical、「Ubuntu 20.04 LTS」の提供を開始 ～“Microsoft Store”からWSL導入も可能](https://forest.watch.impress.co.jp/docs/news/1249447.html)

> “Microsoft Store”では現在、「Ubuntu」（そのときどきの最新版にアップデートされる）と「Ubuntu 16.04 LTS」、「Ubuntu 18.04 LTS」、「Ubuntu 20.04 LTS」の4バージョンが利用できる。

1. 再起動後、スタートメニューから「Microsoft Store」を選択し、検索ボックスに「Ubuntu」を入力して「`Ubuntu 16.04 LTS`」を選択する
![スクリーンショット 2018-07-21 09.30.46-a.png](https://qiita-image-store.s3.amazonaws.com/0/125588/d8d68126-ea4d-58ba-41a3-1b8c4ae9bf17.png)

2. 「入手」ボタンをクリックして（ダウンロード＆）インストールする
![スクリーンショット 2018-07-21 09.31.09.png](https://qiita-image-store.s3.amazonaws.com/0/125588/79be43c2-5519-5d8a-19c5-2f43f0547214.png)

3. インストールが完了すると、次の画面になる（2020-05.02の時点で確認して追記）ので、「起動」を押す。
![スクリーンショット 2020-05-02 18.05.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125588/e1318aeb-5769-637b-2325-b408e933772a.png)

4. WSLのコマンドラインが開いて、**Ubuntuの初期設定**としてユーザー名とパスワードを聞いてくるので、Linux（Ubuntu）上で利用するユーザー名とパスワードを入力する
    - ※ここで入力したパスワードは、**今後も入力する**場面が多いので覚えておく。
![スクリーンショット 2018-07-21 09.37.05-a.png](https://qiita-image-store.s3.amazonaws.com/0/125588/32f800d3-2b88-4a89-cb3f-f4b087e6c558.png)

5. 初期設定が完了すると、Ubuntu on WSLのコマンドプロンプト（ターミナル）が表示される
![スクリーンショット 2018-07-21 09.37.43-a.png](https://qiita-image-store.s3.amazonaws.com/0/125588/6c77e409-7d2b-9a70-d616-dc15abb9d955.png)


以上で、Docker for UbuntuをWindows10上で利用するための準備「`Ubuntu on WSL`」環境のセットアップが完了しました。

次のコマンドを打ち、WSLをいったん閉じます。

```
exit
```


# §2. Re:VIEW image for Docker をセットアップ

## Docker for Ubuntu on WSLをインストール

先ほどまでの手順で準備した「`Ubuntu on WSL`」環境に対して、次の手順でDocker for Ubuntu をインストールします。

1. 「スタートメニュー＞Ubuntu」を選んで（もしくは検索ボックスに入力して検索）、右クリックします
2. 「その他＞管理者として起動」を選択します
3. 開いたUbunutのコマンドライン上で、次のコマンドを**一行ずつ**実行します

```sh
sudo apt update
sudo apt upgrade
```

※「一行ずつ」なのは途中でパスワード入力を求められたり、「ディスクスペースをxx使うがOKか？」なのど確認が入るため。
※パスワードを要求された場合は、先ほどの「Ubuntuの初期設定」で設定したパスワードを入れます。

4. 次のコマンドを1行ずつ打ち込み、Dockerの17.03.3-ceを明示的に指定して取得してインストールします。（以前、～2020/01の時点では、`sudo apt install -y docker.io`でインストールすれば動くバージョンが入っていたのだが、その後NGになったようだ）

```sh
$ 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 update
$ sudo apt install -y docker-ce=17.03.3~ce-0~ubuntu-xenial
$ sudo usermod -aG docker $USER
```

次のように画面表示で、Dockerの取得とインストールが進みます。

![スクリーンショット 2018-07-21 09.53.30.png](https://qiita-image-store.s3.amazonaws.com/0/125588/98591188-264a-47fa-bbe0-9cb923ee0e43.png)

![スクリーンショット 2018-07-21 10.05.02.png](https://qiita-image-store.s3.amazonaws.com/0/125588/accbcd05-d600-c219-b2f0-3de4415bfef9.png)

5. 上図のようにコマンドラインが入力待ちに戻ったら、次のコマンドを実行します。

```sh
sudo cgroupfs-mount
sudo service docker start
docker version
```

6. インストールされたDockerバージョンが表示されるので「`Version: 17.03.03-cd`」となっていることを確認します。
7. コマンドライン上で「`exit`」を入力し、Ubuntu on WSLをいったん終了します
8. 「スタートメニュー＞Ubuntu」を選んで、Ubuntu on WSLを改めて起動します（※この場面では、管理者権限での起動は不要です）
6. dockder が正しくセットアップされたの確認のため、次のコマンドを入力してHello Worldのイメージを起動します

```sh
docker run hello-world
```

![スクリーンショット 2018-07-21 10.11.17-hello-docker.png](https://qiita-image-store.s3.amazonaws.com/0/125588/93c3149d-226d-db55-89ac-1d34994c309a.png)

上図のように「Hello from Docker!」が表示されれば成功です。


## Re:VIEW image for Dockerの取得

続いて、「Re:VIEW image for Docker」を取得します。
これは「必要なコマンドや動作環境を、簡単に導入できるようまとめたパッケージ」と捉えてください。

先の「Hello World」を実行したコマンドライン上で、次のコマンドを実行します（※2019/05/08時点で最新のVer.3.1を指定）。

※パスワードを要求された場合は、先ほどの「Ubuntuの初期設定」で設定したパスワードを入れます。

```sh
sudo docker pull vvakame/review:3.1
```

イメージのダウンロードが終わるのを待ちます。

![docker-image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125588/430a3570-0635-edd2-c38b-3fe251791a70.png)

<!--
◆Docker Image取得開始から、6分くらい◆
-->


ダウンロードが終わりましたら、動作確認を目的に、次の操作を行います。
具体的には、WSLのコマンドライン上で先の「`pull` ～」に続けて、次のコマンドを実行します。

1. 作業用のフォルダ「`D:\repo-doc`」を作成します（※パスは任意に変更可能。変更した場合、以降は読み替え）。
    - このフォルダ配下に、**プロジェクトごとのフォルダ**（PDFの作成単位）を作成します。

```
mkdir /mnt/d/repo-doc
```

2. dockerイメージを利用して、reviewのサンプルファイルの作成とコンパイル（PDFの作成）を行います。

```
docker run -v /mnt/d/repo-doc:/work -it vvakame/review:3.1 /bin/sh
```

コマンドラインの表示が微妙に（`$`→`#`）切り替わりますが（WSL上からdockerコンテナ上に切り替わる）、気にせず続けて次のコマンドを実行します。

```
cd /work
review-init review-sample
cd review-sample
review-pdfmaker config.yml
exit
```

※上記をコピペで一気に入力すると、表示の順序の異なる場合がありますが、気にしなくてよいです。気になる場合は、一行ずつ入力してください。

最後で、コマンドラインの表示が微妙に（`#`→`$`）切り替わりますが（dockerコンテナから抜ける）、気にしないでください。

![docker-image3-pdfmaker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125588/55395a12-b7cd-f949-e63e-38884aff4028.png)


Windows上のExplorerでDドライブのルートにある「repo-doc」フォルダを開きます。中に「review-sample」というフォルダが作成され、フォルダ内に「`book.pdf`」ファイルが生成されていることを確認してください。このpefファイルが、「review-sample」のReviewドキュメント（`review-sample.re`）から作成されたpdfです。

以上で、Windows10上で、（Ubuntu on WSL上に`Ubuntus for Docker`と`Re:VIEW image for Docker`を用いて）Re:VIEWのreviewコマンドによるPDF作成を行う環境構築が**完了**しました。

次のコマンドを打ち、WSLを抜けて通常のコマンドラインに戻ります。コマンドラインはそのまま閉じてください。

```
exit
```

ここまでの作業は初回のみです。
普段の作業「Re:VIEWファイル（`*.re`）を書く→PDFファイルに出力する」は、次の節の「§3」からになります。


# §3. テクブさん（Teckboosterさん）のテンプレートをコンパイルしてサンプルPDF作成

テクブさん（Teckboosterさん）のテンプレートを用いて、書籍用（同人誌などの製本用）のPDFを作成します。
※ここでテクブさんのテンプレを使うのは、単に筆者の好みです。

<!--
◆Docker Image取得開始から、12分くらい◆
-->


## TechBooster/ReVIEW-Templateを取得

次のURLのページを開き、「clone or download」＞「Download ZIP」からテンプレートをZipファイルで取得します（Gitが分かる方は、Cloneして構いません）。

https://github.com/TechBooster/ReVIEW-Template

![review-techbooster-template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125588/d8da3253-e582-1588-2018-2af5917f30b5.png)


取得したZipファイルを展開します。ここでは、「`D:\repo-doc\ReVIEW-Template-master`」に展開したものとして話を進めます。なおフォルダ名は任意に変更可能です。変更した場合は、以降は読み替えてください。

この時点で、`D:\repo-doc\ReVIEW-Template-master\articles` 配下にはPDFファイルがまだありません。

## article.reをreviewコマンドでコンパイルしてPDFファイルを作る

`D:\repo-doc\ReVIEW-Template-master\articles` 配下にある `article.re` がPDF作成のもとになるテキストファイルです。

１つ上のフォルダ「`D:\repo-doc\ReVIEW-Template-master`」でコマンドラインを開きます。※通常のコマンドラインで、WSLではありません。

コマンドライン上で、次のコマンドを実行します。wslコマンド実行で、表示が微妙に変わりますが気にしないでください（WSL上に入った）。

```
wsl
docker run --rm -v `pwd`/articles:/work vvakame/review:3.1 /bin/sh -c "cd /work && review-pdfmaker config.yml"
```


## 「Cannot connect to the Docker」のエラーが出る場合

先のコマンドの実行時にもし次のようなエラーが出る場合があります。

```
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
```

その際は、次の操作を行います。

1. 「スタートメニュー＞Ubuntu」を選んで（もしくは検索ボックスに入力して検索）、右クリックします
1. 「その他＞管理者として起動」を選択します
1. 開いたUbunutのコマンドライン上で、次のコマンドを実行します

```
sudo cgroupfs-mount && sudo service docker start
```

![docker-pdfmaker2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125588/845cc040-eac0-c7e5-10c7-fe55544ce6c3.png)


実行を終えたら「`exit`」と打ち、後から開いたUbuntuコマンドライン閉じます。先のWSL上のコマンドラインに戻り、改めて、次のコマンドを実行します。

```
docker run --rm -v `pwd`/articles:/work vvakame/review:3.1 /bin/sh -c "cd /work && review-pdfmaker config.yml"
```

## reviewコマンドによるPDF作成結果

正常に「`docker ～（中略）～ review-pdfmaker`」コマンドが終了すると、次の図のようになります。

![docker-pdfmaker4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125588/a062be7e-6a5e-3279-7931-33f9e8d0ef40.png)

`D:\repo-doc\ReVIEW-Template-master\articles` フォルダ配下に、PDFファイル「`ReVIEW-Template.pdf`」が作成されていることを確認してください。

以降、`article.re` ファイル他に文章を書き足したら、先の節「article.reをreviewコマンドでコンパイルしてPDFファイルを作る」を再実行することで、PDFファイルを再作成できます。

なお、「`wsl`」コマンドを一度打った後は、「`exit`」コマンドを実行するまでは、「`wsl`」は省略して「`docker ～（中略）～ review-pdfmaker ～（略）`」のみでPDF作成を行えます。


<!--
◆Docker Image取得開始から、27分くらい◆
-->

以上です。

# 余談

「`re:view windows10`」で検索すると、「LaTex＋Rubyをインストールして」という正攻法の記事がヒットする。その方法でも構わないのだけれど、LaTexやRubyは環境依存でハマることがあるので、その辺りの「環境依存を回避しやすい」Docker使う方法を纏めたくなって、まとめてみた。

なお本記事は、2019/05/10時点のWSLを前提としている。
今月2019/05月末に「WSL2が出る」との噂話なので、そちらだと変わるかも知らん？でも操作としては「Docker for Ubuntuでの標準操作」と同一なので、変わらない可能性が高い、かな？


# 参考サイト

- Re:VIEW ナレッジベース
    - https://review-knowledge-ja.readthedocs.io/ja/latest/index.html
- 公式FAQ（Re VIEW knowledge ドキュメント） - Re VIEW の使い方について
    - https://review-knowledge-ja.readthedocs.io/ja/latest/faq/faq-usage.html?highlight=Windows
    - 「`Ruby インタプリタ 2.1 以上がインストールされた OS 環境であれば、基本的に動作します。TeX を使った PDF 生成を行う場合は、別途日本語 TeX 環境のセットアップが必要です。`」の記載がありますが、本記事で紹介したDockerを使う方法では、Docker Image内にRubyもTexも内包されています。個別調達は不要です。
- Re:VIEW公式Github
     - https://github.com/kmuto/review     - 
- vvakame_docker-review  Re VIEW build container by docker
    - https://github.com/vvakame/docker-review
- Re:VIEWの3.10での更新履歴 - kmuto_review
    - https://github.com/kmuto/review/blob/master/NEWS.ja.md#version-310
- TechBooster_ReVIEW-Template  TechBoosterで利用しているRe VIEWのテンプレート（B5_A5_電子書籍）を公開しています
    - https://github.com/TechBooster/ReVIEW-Template
- [2019年1月版]WSL + Ubuntu で Docker が動くっ！動くぞコイツッ！
   - https://qiita.com/koinori/items/78a946fc74452af9afba#ubuntu-1604-lts--docker-17033
   - ↑こちらの記事、Dockerのバージョンを指定してインストールする方法を「コピペで使える」レベルで記載してくれており、大変助かりました！

<!--
Windows 10 HomeでWSL越しにDocker for Ubuntu+Re VIEWを使う（VM不要） - Qiita.htm
https://qiita.com/hoshimado/items/78cccdaffd41dc47837e

Re VIEWのVer2系からVer3系への移行に関する覚書き - Qiita.htm
https://qiita.com/hoshimado/items/834ed3f3f0c3382f3df7
-->