2012-02-14
■[Python] reStructuredText を使った静的 HTML 生成ツール
heavenshell’s note -reStructuredText を使った静的 HTML 生成ツール の転載。
静的 HTML 生成ツールをブログとして使う最近だと Jekyll と Octpress を使って Github pages と連携させるというのが流行ってるんだろう。
Jekyll は Ruby で書かれているツールで、その Python 版として Hyde というのがあるが、 Sphinx 並みにもっと手軽なものがないものかと思ったら、 rstblog があったのを思い出した。
rstblog は文字通り reStructuredText で本文を記述して HTML を生成する。個人的には Markdown 形式より慣れているので嬉しい。
インストール&設定
サイト用のディレクトリを作成する。
$ mkdir -p /path/to/site
rstblog は PyPi にはアップロードされていないので、Github からダウンロードしてインストールする。
$ git clone https://github.com/mitsuhiko/rstblog.git $ cd rstblog $ python setup.py install
rstblog から必要なものをコピーする。
$ cp -r templates /path/to/site/_templates $ cd /path/to/site
config.yml を作成する。
--- active_modules: [pygments, tags, blog, latex] author: Your name canonical_url: http://heavenshell.github.com/ modules: pygments: style: tango
css などの静的ファイルを格納するディレクトリを作成する。 static ディレクトリにテンプレートから読み込む css ファイルを作成する。
$ mkdir static
ブログを配信するディレクトリを作成する。ディレクトリ名は配信する日付になる。
$ mkdir -p 2012/01/28
記事を reStructuredText で作成する。
$ cd 2012/01/28 $ vim start_rstblog.rst
public: yes tags: [python, restructuredtext] summary: | reStructuredText を使った静的 HTML 生成ツールを使ってみた reStructuredText を使った静的 HTML 生成ツール ============================================= 静的 HTML 生成ツールをブログとして使う最近だと `Jekyll <https://github.com/mojombo/jekyll>`_ と `Octpress <http://octopress.org/>`_ を使って Github pages と連携させるというのが流行ってるんだろう。
public はトップの一覧に表示するかどうかの設定。
これが no の場合トップにリンクが表示されなくなる(ただし url で直接アクセスすれば表示はできる)。
tags はその記事のタグでタグ一覧に表示される。
summary はトップページに表示される要約。
デザインカスタマイズ
自分でデザインなどをカスタマイズするには、基本的に _templates の下のテンプレートファイルを編集する。
テンプレートエンジンに Jinja2 が使われているが、さほど難しい事をやってる訳ではないので、基本的には css をいじる感じ。
HTML 生成
以下のコマンドを実行すると、_build というディレクトリが出来る。
$ run-rstblog build
$ tree _build
_build
├── 2012
│ ├── 01
│ │ ├── 28
│ │ │ └── start_rstblog
│ │ │ └── index.html
│ │ └── index.html
│ └── index.html
├── archive
│ └── index.html
├── feed.atom
├── index.html
├── static
│ ├── _pygments.css
│ ├── site.css
│ └── style.css
└── tags
├── index.html
├── python
│ ├── feed.atom
│ └── index.html
└── restructuredtext
├── feed.atom
└── index.html
9 directories, 14 files
このまま生成した HTML ファイルをブラウザで開いても css などが絶対パスになるので、組み込みの Web アプリケーションとして起動する。
$ run-rstblog serve Serving on http://127.0.0.1:5000/
ブラウザで http://127.0.0.1:5000/ にアクセスすると表示される。
一々コマンドを打つのが面倒くさいので、Makefile にした。
all: build serve clean: rm -rf _build build: run-rstblog build serve: run-rstblog serve
まとめ
HTML 生成ツールとして Hyde より手軽な感じがした。
特に Sphinx をバリバリ使っているような人は reStructuredText になれているだろうから、やりやすいと思う。
- 48 http://www.google.co.jp/url?sa=t&rct=j&q=php 配列 最後&source=web&cd=1&ved=0CC8QFjAA&url=http://d.hatena.ne.jp/heavenshell/20080429/1209480357&ei=m2U6T5avAoPjmAX41rSlCw&usg=AFQjCNHkDMII_6rH6porHWzKbK6dMYiR
- 16 http://d.hatena.ne.jp/
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=pyramid python&source=web&cd=1&sqi=2&ved=0CC0QFjAA&url=http://d.hatena.ne.jp/heavenshell/20101107/1289123824&ei=XcQoT-TuLKeviQenksnAAg&usg=AFQjCNEEcCr8vzFKXGDpFni-jAOpPQdMfA&sig2=u8XYiufeD5xwh1scf2Xbz
- 12 http://search.minakoe.jp/rsss/rsss.asp?pid=221627&plp=1&pd=2008/09/30&lid=3969&nlp=1&sd=2008/09/30&base=20&blp=1&bd=2008/09/30&multi=1&qry=perl
- 12 http://www.google.co.jp/url?sa=t&rct=j&q=配列 最後の要素 PHP&source=web&cd=1&ved=0CDAQFjAA&url=http://d.hatena.ne.jp/heavenshell/20080429/1209480357&ei=sg47T_34DMHumAWZ9pSlCw&usg
- 11 http://b.hatena.ne.jp/tksthdnr/
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=backborn.js&source=web&cd=2&ved=0CDwQFjAB&url=http://d.hatena.ne.jp/heavenshell/20111225/1324802748&ei=gfo6T6ugMM7nmAWziqG0Cw&usg=AFQjCNHq7fpqptaX0x9ljZx_Ln6geMADcQ&sig2=TnFyu_KoqOfoYh7mkrzuMA&cad=rja
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=php 配列の最後の要素&source=web&cd=1&ved=0CDEQFjAA&url=http://d.hatena.ne.jp/heavenshell/20080429/1209480357&ei=_xc7T5zEFsHumAWZ9pSlCw&usg
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=php+配列 一番最後&source=web&cd=1&ved=0CCYQFjAA&url=http://d.hatena.ne.jp/heavenshell/20080429/1209480357&ei=UGU6T9jGDsHvmAXo6M22Cw&usg=AFQjCNHkDMII_6rH
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=php+配列+先頭要素&source=web&cd=1&ved=0CDEQFjAA&url=http://d.hatena.ne.jp/heavenshell/20080429/1209480357&ei=Bjg7T52RMo7PmAXRvOjHCw&usg=AFQjCNHkDMII_6rH6porHWzK
