PelicanとGitHub Pagesを使う

Posted on 2012-03-16

reStructuredTextが使いたかったので、Pythonで書かれてるPelican という静的ブログジェネレータを使ってHTMLを出力し、GitHub Pagesで公開するようにしました。

Pelican

最近は静的にブログを生成してくれるツールはたくさんあると思うんですが、どうも Markdownをなんか拡張したやつだったり、reStructuredTextを使っていても、ファイル内のメタデータをうまく使ってくれなかったり、自分が書いたエントリのディレクトリ内の位置を日付ごとのディレクトリにしなければいけなかったりして、あんまり好みのやつが見つからなかったんですが、最近みつけたPelicanはそのような制限がないので気に入って使っています。

自分はPelicanのソースを引っ張ってきて、開発中のバージョンを直接使っています。開発中のバージョンを使うにはこれだけでOK:

$ git clone https://github.com/ametaireau/pelican.git
$ cd pelican
$ python setup.py develop

こうするとcloneしてきたディレクトリにあるファイルを使うようにうまくリンクが張られて、ちょっとコードの修正して動かしてみるっていうのが簡単にできるようになります。

GitHub Pages

なんかGitHubには GitHub Pages っていうPushすると中のHTMLが公開されるというおしゃれ機能があって、それを使って公開するようにしました。で、自分が使っているのはUser Pagesなんですが、どのブランチにPushしたら公開されるのかが書いてなくて、どうもやってみた感じmasterに公開されたやつしか公開されないみたいです。UserPagesの場合はgh-pagesにPushしても無駄みたいですよ。わからないけど。なので次のようなブランチ構成にしてみました:

source   -> origin/source
gh-pages -> origin/master

こういう風にするには、たぶん次のようにすればいいはず:

$ git init .
$ git branch -m master source
$ git remote add origin <自分のGitHubリポジトリでコピーしてきたなにか>

gh-pagesはなんかよしなに作ってくれるghp-import があるので、それを導入しました:

$ pip install ghp-import

conf.pyを書く

conf.pyみたいに書いています。なんか下の方で怪しいことしてますが。ディレクトリ構成はdraftcode/draftcode.github.comみたいになってます。

post-commitを仕込む

次のような内容のファイルを、 .git/hooks/post-commit に仕込んでおきます:

$ pelican -s conf.py && ghp-import output && git push origin gh-pages:master source:source

これでなんかコミットしたらページがビルドされてPushされます。しばらく待つと向こうの方のページにも反映されます。やったね!

Disclaimer: The opinions stated here are my own, not necessarily those of my company.