sphinxをmarkdownで使い隊

25
SphinxMarkdownで使い隊 2013-07-07 @iktakahiro ~ ついでに渡り廊下も走り隊 ~

Upload: takahiro-ikeuchi

Post on 29-Nov-2014

6.546 views

Category:

Technology


0 download

DESCRIPTION

Sphinxを、MercurialとPandocを組み合わせて
Markdown記法で運用できるようにしたお話。


TRANSCRIPT

Page 1: SphinxをMarkdownで使い隊

SphinxをMarkdownで使い隊

2013-07-07@iktakahiro

~ ついでに渡り廊下も走り隊 ~

Page 2: SphinxをMarkdownで使い隊

このスライドに書いてあること

Sphinxを、MercurialとPandocを組み合わせてMarkdown記法で運用できるようにしたお話。

Mercurialとの連携方法も紹介するよ。

Page 3: SphinxをMarkdownで使い隊

自己紹介

✓@iktakahiro✓株式会社ALBERT システム開発部✓レコメンドエンジンとか作ってるよ!

最近気になっていること: 近頃のIPAはなぜ初音○ク推しなのか

Page 4: SphinxをMarkdownで使い隊

背景

社内でHRTKさんがSphinx勉強会を開催してくれて、

やっぱ便利よねぇと思ったのでなんとかカジュアルに

使える運用を検討したいと思ったでござる。

Page 5: SphinxをMarkdownで使い隊

Sphinxとは?✓Python製のドキュメンテーションツール✓reStructuredTextでマークアップする✓拡張でダイアグラムとかも書ける✓Wikiではない

[参考]ドキュメントを作りたくなってしまう魔法のツールSphinx http://www.slideshare.net/shimizukawa/sphinx-6084667

Page 6: SphinxをMarkdownで使い隊

reStructuredTextとは?✓軽量マークアップ言語の1つ✓Sphinxに採用されている✓Markdownよりも表現力に優れる✓Markdownほど使われていない

[参考]reStructuredText入門 http://sphinx.shibu.jp/rest.html

Page 7: SphinxをMarkdownで使い隊

何が問題か?Sphinxは楽しいけど、2つの壁がありそう。

reStructuredText覚えるの面倒くさい

make html は誰がいつやるの?

Page 8: SphinxをMarkdownで使い隊

ではどうするか?

reStructuredText覚えるの面倒くさい

=> Markdownで書いてみよう

make html は誰がいつやるの?

=> hookスクリプトにやらせてみよう

Page 9: SphinxをMarkdownで使い隊

Markdownで書くために

✓SphinxはreStructuredTextにのみ対応

Pandocを使おう!

Page 10: SphinxをMarkdownで使い隊

Pandocとは?✓Haskell製ドキュメント変換ツール✓軽量マークアップ言語の相互変換✓WordやPDFへの変換もできるすぐれもの✓当然Markdown -> reStructuredText も対応[参考]多様なフォーマットに対応! ドキュメント変換ツールPandocを知ろう http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee

Page 11: SphinxをMarkdownで使い隊

# markdown を reSTに変換

pandoc -f markdown -t rst -o test.rst test.md

インストールすればコマンドラインから↑このように使える。

互換性を見たければ↓で試せる http://johnmacfarlane.net/pandoc/try/

Page 12: SphinxをMarkdownで使い隊

# 見出し1

## 見出し2

```pythonprint('test')```

見出し1========

見出し2-------

.. code:: python

print('test')

Markdown reStructuredText

Pandocさんによる変換の例

Page 13: SphinxをMarkdownで使い隊

運用に乗せたい

✓Markdownで書けそうなことは分かった✓ドキュメントはレポジトリで管理したい✓Commit~Pushしたらmake htmlして欲しい

hookを使おう!

Page 14: SphinxをMarkdownで使い隊

ディレクトリ構成/var/hg/sphinx => Webサーバーの doc root にしておく

/var/hg/sphinx/manual1 => Sphinxプロジェクト [manual1] のroot

/var/hg/sphinx/manual1/source => rstファイル置き場。ここをレポジトリにする

/var/hg/sphinx/sphinx_hook.sh

Page 15: SphinxをMarkdownで使い隊

ディレクトリ構成(つづき)/var/hg/sphinx/manual1/build/html => make htmlしたときのhtml出力場所 ※プロジェクト作成時の設定による

http://example.com/manual1/build/html/ => ブラウザから確認できるURI例

Page 16: SphinxをMarkdownで使い隊

hookスクリプトの中身#!/bin/bash

repository=$1BASE_DIR="/var/hg/sphinx"DIR="${BASE_DIR}/${repository}"

# pyvenvにSphinx環境がある場合を想定source /usr/local/sphinx/bin/activate

# 変換処理 (長いけどワンライナーだよ)cd ${DIR}/source && find ./ -name "*.md" | sed -e 's/^.*\///' -e 's/\.md$//' | xargs -i pandoc -f markdown -t rst -o {}.rst {}.md

Page 17: SphinxをMarkdownで使い隊

source/.hg/hgrc の中身

[hooks]pretxnchangegroup.make /var/hg/sphinx/sphinx_hook.sh manual1

レポジトリ名を引数に与えて実行外部からPUSHされたら実行するhook(hookが失敗したらロールバック)

Page 18: SphinxをMarkdownで使い隊

処理の流れ

1. レポジトリにPushすると、hookスクリプトが実行される

2. 拡張子 .md のファイルを探し、pandoc で reSTに変換する

3. make html を実行

[補足]変換後の reSTファイルはレポジトリ管理されない。あくまで Markdownのファイルをレポジトリ管理する。index.rst だけはそのまま使ってくだしあ。。。

Page 19: SphinxをMarkdownで使い隊

Pushするだけでブラウザから最新のドキュメントを確認できる!

Page 20: SphinxをMarkdownで使い隊

Markdownで書ける!

Page 21: SphinxをMarkdownで使い隊

もっと改善ポイント

✓差分だけpandocすればおk✓Jenkinsにビルドさせるのも良いかも✓スクリプトも適当なのでエラー制御ちゃんとしよう✓100%互換性がある訳ではないので要研究。 特に拡張周りは結構地雷がある予感がする。

Page 22: SphinxをMarkdownで使い隊

今回のオチ

Page 23: SphinxをMarkdownで使い隊

sphinxcontrib_markdown✓SphinxでMarkdownを利用するための拡張✓make htmlのあとで変換しているようだ (暗躍しているのはやはりPandocさん)

[参考]Sphinx 文書に markdown フォーマットを利用する http://tk0miya.hatenablog.com/entry/2012/12/19/233642

Page 24: SphinxをMarkdownで使い隊

あ、あたしのほうが疎結合なんだからねっ!(ノ∀\〃)

Page 25: SphinxをMarkdownで使い隊

おわり。