PelicanとGitHub Pagesを使う
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されます。しばらく待つと向こうの方のページにも反映されます。やったね!