logoSteel Dragon 14106
Categories

技術ブログを静的ページジェネレータPelicanで始めることにした

By raimon, 2014年11月09日(日), in category Python

GitHub, Pelican, Python

技術ブログを静的ページジェネレータPelicanで始めることにしたのでセットアップ手順のメモとかを残す。

2015年04月19日追記

最新のセットアップ手順は、このブログ自身のリポジトリトップに置いてあるREADME.mdに簡潔にまとめてある。

動機

もともとウェブ日記ツールtDiaryを使ってプログラミング系の記事も書いていたのだけど、

といった理由により、GitHub Pagesにホスティングして別ブログを始めたいと考えた。

GitHub Pagesの準備

あらかじめGitHub側に {username}.github.io.git という名前のリポジトリを作っておく。

手元に持って来て、ここを作業ディレクトリにする。GitHub Pagesとして公開するページとPelican作業用ディレクトリとで内容が一致できないので、 source というブランチで公開ページの元となるMarkdownファイルを管理して行く事にした。これが正しいやり方なのか良く分からない。

$gitclonegit@github.com:raimon49/raimon49.github.io.git
$cdraimon49.github.io
$gitcheckout-bsource

Pelican環境のセットアップ

以下のページを参考にPelican 3.5.0の環境をセットアップした。

まずPython 2.7系でPelican用のvirtualenv環境を作る。

$pyenvvirtualenv2.7.8venv-2.7.8-pelican
$pyenvlocalvenv-2.7.8-pelican

依存するパッケージのインストール。

Makefile と一緒に fabfile.py も作ってくれるらしいので、Fabricも入れてみることにした。

$pipinstallpelicanmarkdownfabric
$piplist
blinker(1.3)
docutils(0.12)
ecdsa(0.11)
Fabric(1.10.0)
feedgenerator(1.7)
Jinja2(2.7.3)
Markdown(2.5.1)
MarkupSafe(0.23)
paramiko(1.15.1)
pelican(3.5.0)
pip(1.5.6)
pycrypto(2.6.1)
Pygments(1.6)
python-dateutil(2.2)
pytz(2014.9)
setuptools(3.6)
six(1.8.0)
Unidecode(0.04.16)
wsgiref(0.1.2)

pelican-quickstart というコマンドで質問に答えてテンプレートを生成する。

ほとんどデフォルトの回答にした。

$pelican-quickstart
Welcometopelican-quickstartv3.5.0.
ThisscriptwillhelpyoucreateanewPelican-basedwebsite.
Pleaseanswerthefollowingquestionssothisscriptcangeneratethefiles
neededbyPelican.
>Wheredoyouwanttocreateyournewwebsite?[.].
>Whatwillbethetitleofthiswebsite?SteelDragon14106
>Whowillbetheauthorofthiswebsite?raimon
>Whatwillbethedefaultlanguageofthiswebsite?[en]ja
>DoyouwanttospecifyaURLprefix?e.g.,http://example.com(Y/n)y
>WhatisyourURLprefix?(seeaboveexample;notrailingslash)http://raimon49.github.io
>Doyouwanttoenablearticlepagination?(Y/n)y
>Howmanyarticlesperpagedoyouwant?[10]10
>DoyouwanttogenerateaFabfile/Makefiletoautomategenerationandpublishing?(Y/n)y
>Doyouwantanauto-reload&simpleHTTPscripttoassistwiththemeandsitedevelopment?(Y/n)y
>DoyouwanttouploadyourwebsiteusingFTP?(y/N)n
>DoyouwanttouploadyourwebsiteusingSSH?(y/N)n
>DoyouwanttouploadyourwebsiteusingDropbox?(y/N)n
>DoyouwanttouploadyourwebsiteusingS3?(y/N)n
>DoyouwanttouploadyourwebsiteusingRackspaceCloudFiles?(y/N)n
>DoyouwanttouploadyourwebsiteusingGitHubPages?(y/N)y
>Isthisyourpersonalpage(username.github.io)?(y/N)y
Done.Yournewprojectisavailableat/home/raimon49/works/git/raimon49.github.io

生成された pelicanconf.py というファイルを自分用に編集する。

変更・追加したのは以下の辺り。

# Atom/RSS Feedの生成に必要
SITEURL = 'http://raimon49.github.io'
# SITEURLが指定されているとローカルサーバでもリンクに使われてしまうので
# ローカルサーバのプレビュー時は相対リンクするように指定
RELATIVE_URLS = True
# SITEURL/YYYY/MM/DD/Markdown fileというルールでURLを発行
ARTICLE_PATHS = ['blog']
ARTICLE_SAVE_AS = '{date:%Y}/{date:%m}/{date:%d}/{slug}.html'
ARTICLE_URL = '{date:%Y}/{date:%m}/{date:%d}/{slug}.html'
# ブログ記事の日付フォーマットを指定
TIMEZONE = 'Asia/Tokyo'
DATE_FORMATS = {
 'en': '%a, %d %b %Y',
 'ja': '%Y-%m-%d(%a)',
}
# ブログのデザインテーマを指定(後述)
THEME = './vendor/pelican-sober'
# ブログのRSSフィードを全文配信
FEED_ALL_RSS = 'feeds/all.rss.xml'
# Social widget
SOCIAL = (('GitHub', 'https://github.com/raimon49'),
 ('Twitter', 'https://twitter.com/raimon49'),
 ('Last.fm', 'http://www.lastfm.jp/user/raimon_49'),
 ('Website', 'http://sangoukan.xrea.jp/'),)

ブログのデザインテーマは pelican-themes というコマンドラインツールを使って管理できるみたいだけど、まぁ気に入ったものをGitHubから持って来て使えば途中で変更することも無いかなと考えて、submoduleとして追加して参照することにした。

$gitsubmoduleaddgit://github.com/fle/pelican-sober.gitvendor/pelican-sober

ブログ記事の投稿とページ生成

後は content/blog-title.md みたいな感じで好きなテキストエディタで記事を書けば良いようだ。

記事に埋め込むメタデータについてはWriting contentの章を参考にする。

HTMLの生成とローカルサーバでの確認は Makefile または fabfile.py を利用すると簡単。

$makehtml
$makeserve
$fabbuild
$fabserve
# 2つをまとめてやってくれる
$fabreserve

ローカルでの確認が終わったらTips - Publishing to GitHubを参考にGitHub Pagesに記事をpushする。

$fabrebuild
[localhost]local:rm-rfoutput
[localhost]local:mkdiroutput
[localhost]local:pelican-spelicanconf.py
Done:Processed1article(s),0draft(s)and0page(s)in0.15seconds.
# 現在のoutputディレクトリの内容をgh-pagesというローカルブランチに反映する
$pipinstallghp-import
$ghp-importoutput
# コミットされた内容をリモートpushする
$gitcheckoutgh-pages
$gitpush-forigingh-pages:master

ghp-import -b master みたいにブランチ名を指定した方が楽かもしれない。

source ブランチと master ブランチは全く別の歴史を持って行くので混ぜるな危険な感じになってしまった。記事生成元データは別リポジトリとして管理する方がベターなのかな。

よって更新手順としては以下のようなフローとなる

# sourceブランチで記事を編集
$gitcheckoutsource
$vimcontent/blog/2014/11/09/start-tech-blog-by-pelican.md
$gitcommit-a
$gitpushoriginsource
# GitHub Pagesに反映
$fabrebuild
$ghp-import
$gitcheckoutgh-pages
$gitpushgh-pages:master

ローカルブランチを切り替えるのは面倒なので、この辺はコミットフックを使って自動化するのが良いかも知れない。

はてなスターとか設置したいんだけど今日は疲れたのでこれまで。

Please enable JavaScript to view the comments.
Sitemap
Social
Links

Proudly powered by pelican
Theme and code by molivier
© raimon 2014-2019

AltStyle によって変換されたページ (->オリジナル) /