asciidoctorで日本語の本文とPlantUMLのクラス図が入った文書をPDFに変換してみた

[Plain-text diagrams take shape in Asciidoctor! | Asciidoctor](http://asciidoctor.org/news/2014/02/18/plain-text-diagrams-in-asciidoctor/)という記事を見かけて、asciidoctorでPlantUMLのクラス図入りの文書をHTMLに出来ることを知りました。さらに日本語の本文を入れてPDFに変換できたのでメモしておきます。

サンプルソースは
[hnakamur/asciidoctor-ditaa-graphviz-plantuml-example](https://github.com/hnakamur/asciidoctor-ditaa-graphviz-plantuml-example)
に置きました。

AsciiDocのサンプルファイルは
https://github.com/hnakamur/asciidoctor-ditaa-graphviz-plantuml-example/blob/master/sample.adoc

サンプルPDFは
https://hnakamur.github.io/asciidoctor-ditaa-graphviz-plantuml-example/sample.pdf
です。

## AsciiDocについて

AsciiDocについては[AsciiDoc](http://pasberth.github.io/blog/entry/2014-03-02/index.html)のブログ記事がわかりやすかったです。
本家のページは[AsciiDoc Home Page](http://asciidoc.org/)。Wikipediaの[Lightweight markup language - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Lightweight_markup_language)というページにMarkdownやreSTなどの記法との対比表があります。

## セットアップ
### VLゴシックフォントをインストール
[ダウンロードページ](http://vlgothic.dicey.org/download.html)から[VLGothic-20130607.tar.bz2](https://sourceforge.jp/projects/vlgothic/downloads/58961/VLGothic-20130607.tar.bz2)をダウンロードして展開し、
Finderで*.ttlファイルをOSXのFont Bookアプリにドラッグ＆ドロップします。
ファイルは~/Library/Fonts/にコピーされます。

### graphvizとplantumlのインストール

Homebrewでインストールします。

```shell-session
brew install graphviz
brew install plantuml
```

## サンプルの実行手順

試した環境はOS X 10.8.5です。予め、rubyとbundlerとjavaがインストール済みです。私が試したのはruby 2.1.2, bundler 1.6.2, java 1.8.0_05です。javaは[Java SE - Downloads | Oracle Technology Network | Oracle](http://www.oracle.com/technetwork/java/javase/downloads/index.html)からJDK 8u5をダウンロード、インストールしました。

```shell-session
git clone --recursive https://github.com/hnakamur/asciidoctor-ditaa-graphviz-plantuml-example
cd asciidoctor-ditaa-graphviz-plantuml-example
bundle
make pdf
open sample.pdf
```

## 日本語の本文をPDF化する方法について

[Promisesの薄い本 · Issue #7 · azu/azu](https://github.com/azu/azu/issues/7#issuecomment-38006582)を参考にさせていただきました。ありがとうございます！

PDF化には[asciidoctor/asciidoctor-fopub](https://github.com/asciidoctor/asciidoctor-fopub)を使用しました。Gemfileに書いてbundleでインストールを試みたのですができませんでした。[asciidoctor-fopubのREADME](https://github.com/asciidoctor/asciidoctor-fopub)に書いてあるようにダウンロードして使う想定のようです。
https://github.com/hnakamur/asciidoctor-ditaa-graphviz-plantuml-example ではgit submoduleとして追加しました。

asciidocからasciidoctorでdocbook形式に変換し、その結果をasciidoctor-fopubでpdfに変換します。

```mf:https://github.com/hnakamur/asciidoctor-ditaa-graphviz-plantuml-example/blob/c4420c15a745aaec2f97907455a6cacfa9f8933c/Makefile#L1-L10
all: pdf

pdf:
	bundle exec ./asciidoctor -b docbook -d book sample.adoc
	./asciidoctor-fopub/fopub sample.xml \
		-param body.font.family VL-PGothic-Regular \
		-param dingbat.font.family VL-PGothic-Regular \
		-param monospace.font.family VL-PGothic-Regular \
		-param sans.font.family VL-PGothic-Regular \
		-param title.font.family VL-PGothic-Regular
```

## asciidoctorスクリプトの改変について

[Plain-text diagrams take shape in Asciidoctor! | Asciidoctor](http://asciidoctor.org/news/2014/02/18/plain-text-diagrams-in-asciidoctor/)の記事で紹介した文書では

* [ditaa](http://ditaa.sourceforge.net/)
* [Graphviz | Graphviz - Graph Visualization Software](http://www.graphviz.org/)
* [PlantUML](http://plantuml.sourceforge.net/)

の図を[asciidoctor/asciidoctor-diagram](https://github.com/asciidoctor/asciidoctor-diagram)という拡張によって扱っています。[Enable the extensions](https://github.com/asciidoctor/asciidoctor-diagram#enable-the-extensions)に説明があるのですが具体的にどう使うかは書かれていないので、今回は[asciidoctor/asciidoctor](https://github.com/asciidoctor/asciidoctor)に含まれるbin/asciidoctorを書き換えて試してみました。

オリジナルは

```ruby:https://github.com/asciidoctor/asciidoctor/blob/v0.1.4/bin/asciidoctor
#!/usr/bin/env ruby

$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')

if RUBY_VERSION < '1.9'
  require 'rubygems'
end
require 'asciidoctor'
require 'asciidoctor/cli/options'
require 'asciidoctor/cli/invoker'

invoker = Asciidoctor::Cli::Invoker.new(ARGV)
invoker.invoke!
exit invoker.code
```

となっていますが、これをコピーして```require 'asciidoctor-diagram'```の行を追加したものを https://github.com/hnakamur/asciidoctor-ditaa-graphviz-plantuml-example/blob/c4420c15a745aaec2f97907455a6cacfa9f8933c/asciidoctor としてサンプルに含めてあります。

## (番外編) ちなみにasciidoctor-pdfも試しましたが今のところイマイチでした

[asciidoctor/asciidoctor-fopub](https://github.com/asciidoctor/asciidoctor-fopub)の前に[opendevise/asciidoctor-pdf](https://github.com/opendevise/asciidoctor-pdf)というのを見つけたので、そちらも試してみました。そのままでは日本語フォントが使えなかったので、forkして
[Register 'VL PGothic' and 'VL Gothic' fonts for Japanese · 7ba4b79 · hnakamur/asciidoctor-pdf](https://github.com/hnakamur/asciidoctor-pdf/commit/7ba4b7952d5b335a524813d628d110264bac9751)という変更を加えて試してみました。

題材は[azu/promises-book](https://github.com/azu/promises-book)を使わせていただきました。手順は [asciidoctor-pdfによるPDF作成 (試行錯誤中)](https://github.com/hnakamur/promises-book/blob/a49148c7fbe574d6b77d1520e8cf09a65de209df/readme.md#asciidoctor-pdf%E3%81%AB%E3%82%88%E3%82%8Bpdf%E4%BD%9C%E6%88%90-%E8%A9%A6%E8%A1%8C%E9%8C%AF%E8%AA%A4%E4%B8%AD) で出力結果のPDFは http://hnakamur.github.io/promises-book/index-created-by-asciidoctor-pdf.pdf です。
目次の行が重なりまくってしまっているのと、本文中にバッククォートでコード片を囲っている箇所が多数あるのですが、閉じるバッククォートの後の日本語がいわゆるトーフ（白抜きの□）になっている箇所が何箇所か発生していました。

現時点ではasciidoctorでPDF生成は[asciidoctor/asciidoctor-fopub](https://github.com/asciidoctor/asciidoctor-fopub)を使うほうがよさそうです。