ご無沙汰しております。技研の(ほ)です。
突然ですが、仕様書などの各種ドキュメントを作る際には、みなさんは何を使っていますか?
Sphinxのエディタ選択の際にも同じことを書いたのですが、私は今でもSphinxがベストだと思っています。
ただ、ベストだとは思っているのですが、インストール、設定、記法などのハードルの高さは確かに感じております。
そのため、今回はお手軽に使えそうな Gitbook を紹介したいと思います。
Gitbook は Markdown で書かれたドキュメントをHTMLやPDFなどで出力することができるサービスですが、Githubでソースが公開されているため、自分の開発環境にデプロイして使うことが可能です。
| Sphinx | Gitbook | |
|---|---|---|
| 記法 | reStructuredText | Markdown |
| 実行環境 | python | Javascript(node) |
| エディタ | as you like | 専用エディタあり |
GitbookはMarkdown記法なので、GithubやQiitaなどの普及により慣れた開発者が増えてきていると思います。
また、Atom や VisualStudio Code、StackEditなどのMarkdownのプレビューが標準で搭載されているエディタが多いだけでなく、Gitbookが専用のエディタを提供しています。
このGitbookエディタがとても良くできていており、Markdown記法を知らなくても書けるような機能もあります。
これで、Sphinxの時のようにエディタ探しの旅にでる必要もありません。
今回はAWS EC2 t2.small の ubuntu 16.04 環境で行っています。
t2.micro で運用した場合、メモリ不足で Gitbook の plugin の多くがインストールできないようです。
(そればかりか、同じ環境で動かしていたJenkinsが停止してしまいました)
あとからSWAPを足したりも面倒ですので、コスト的に問題なければ t2.small 以上を使った方が良いと思います。
インストールは下記のコマンドだけでOKです。
| npm install -g gitbook-cli |
Gitbookはnodeを使用するため、事前にnvm などを使用して “node” をインストールしてください。
もし、ubuntu のリポジトリに登録されている “nodejs” を使用する場合は、シンボリックリンクなどで “node” を作成してください。
| sudo ln -s /usr/bin/nodejs /usr/bin/node |
下記のコマンドで helloworldディレクトリ下に Gitbook に必要なファイル(README.md, SUMMARY.md)が作成されます。
| mkdir helloworld |
| cd helloworld |
| gitbook init |
Gitbookのプロジェクトは下記のような構成になります。
README.md, SUMMARY.md 以外は必要に応じて自分で作成することになります。
.
├── book.json (optional: configuration data)
├── README.md (required: Preface/Introduction for this book)
├── SUMMARY.md (optional: Table of Contents)
├── Glossary.md (optional: Lexicon/List of termes to annotate)
├── chapter-1/
| ├── README.md
| └── something.md
└── chapter-2/
├── README.md
└── something.md
ルートの README.md が index.html に変換されて、ドキュメントのトップページになります。
SUMMARY.md に記載の内容がHTMLにナビゲーションとして挿入されます。
下記のようにリンクのシンタックスを使用して記載してください。
| # Summary |
| * [Part I](chapter-1/README.md) |
| * [Writing is nice](chapter-1/README.md#writing) |
| * [GitBook is nice](chapter-1/something.md#gitbook) |
| * [Part II](chapter-2/README.md) |
| * [We love feedback](chapter-2/README.md#feedback) |
| * [Better tools for authors](chapter-2/something.md#useful-tools) |
標準のMarkdown記法だけで良ければプラグインは不要なのですが、数式やUMLを入れたい場合にはプラグインが必要になります。
使うプラグインは “book.json” ファイルに記載する必要があります。
| # create config file |
| vi book.json |
| # install plugin |
| gitbook install |
私は “book.json” は下記のようにしています。
| { |
| "plugins": ["sequence-diagrams", "flowchart", "plantuml", "mathjax"], |
| "pluginsConfig": { |
| "sequence-diagrams": { |
| "theme": "simple" |
| }, |
| "mathjax": { |
| "forceSVG": true |
| } |
| } |
| } |
設定しているプラグインは下記です。
チャート類は書くのは大変ですが、修正差分が取りやすい点が良いと思います。
* sequence-diagrams : js-sequence-diagrams (シーケンス図)のためのプラグイン。
* flowchart : flowchart.js (フローチャート)のためのプラグイン
* plantuml : plantuml (UML)のためのプラグイン
* mathjax : mathjax(数式記述)のためのプラグイン
下記のコマンドで “_book” にHTMLが出力されます。
| gitbook build |
EC2 環境では使えませんが、ローカルの場合には下記のコマンドでlocalhostで確認ができます。
| gitbook --port 8080 serve |
EC2環境でPDFを作成するためには calibre と日本語フォントのインストールが必要です。
| # install converter |
| sudo apt-get install calibre |
| # install Japanese font |
| sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho |
| # install svgexporter |
| npm install -g svgexport |
| # create pdf |
| gitbook pdf |
さて、ここまで来たらビルドなども自動でやりたくなりますよね。
私の場合は、HTMLはデプロイして公開、PDFはSlackへアップロードするため、下記のようなシェルを実行するようにしました。
(ファイル名やToken情報は変更しています。)
| #!/bin/bash |
| # install gitbook plugin |
| gitbook install |
| # delete previous pdf |
| rm cresco-book*.pdf || true |
| filename=cresco-book-${GIT_BRANCH////-}-${BUILD_NUMBER}.pdf |
| echo $filename |
| # make html |
| gitbook build |
| # make pdf |
| gitbook pdf ./ ${filename} |
| # slack file upload setting |
| channel=gitbook |
| token=xoxp-XXXXXXXXXXX-YYYYYYYYYYY-ZZZZZZZZZZ-ZZZZZZZZZZZZZZZZZZZZZZZZ |
| echo $channel |
| echo $token |
| curl -F file=@${filename} -F channels=${channel} -F token=${token} https://slack.com/api/files.upload |
| # notify url to slack |
| content=http://xxxx.com/cresco-book/branch/${GIT_BRANCH////-}/index.html |
| payload='payload={"username":"Jenkins","text":"'${content}'"}' |
| curl -X POST --data-urlencode $payload https://hooks.slack.com/services/xxxxxxx/yyyyyyyyy/zzzzzzzzzzzzzzzzzz |
| # nginx root=/home/ubuntu/public |
| # /home/ubuntu/public/cresco-book/branch directory group is jenikns |
| rm -rf /home/ubuntu/public/cresco-book/branch/${GIT_BRANCH////-} || true |
| cp -r ./_book /home/ubuntu/public/cresco-book/branch/ |
| mv /home/ubuntu/public/branch/cresco-book/_book /home/ubuntu/public/cresco-book/branch/${GIT_BRANCH////-} |
どうでしょう。環境構築が簡単で、インストールにほとんど時間もかかりません。
これで好きなだけドキュメントが書けますね。
みなさんも試してみてください。
次回はGitbookの便利機能やGitbookエディタについて書きたいと思いますので、お楽しみに。


