Pelicanで複数のサイトを生成・管理する

スポンサード リンク

Wordpressにはマルチサイト機能というのがあって,1つのWordpressで N 個のサイトを管理できる。サイト間でプラグインとかは共通にできるので,設定変更のたびにN個のサイトでポチポチ作業する必要がなくなって楽になる。(個人的にはWordpressのマルチサイトは無駄に複雑化すんので素直に複数インストールするが吉と思うが)

Pelicanでも同じようなことをやってみた。

プレフィックスでファイルを分ける

まず,適当なプレフィックスを付けて:

cache/
contents/
output/
pelicanconf.py
publishconf.py

を分ける。例えば,IT関連の記事は tech ,日記は diary として区別するなら:

tech_cache/
tech_contents/
tech_output/
tech_pelicanconf.py
tech_publishconf.py

diary_cache/
diary_contents/
diary_output/
diary_pelicanconf.py
diary_publishconf.py

をそれぞれ作るわけだ。

Makefileを書き換える

次に,Makeファイルの変数を少し書き換える。デフォルトで tech をmakeするようにするならこんな感じか。

PREFIX?=tech

BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/$(PREFIX)_content
OUTPUTDIR=$(BASEDIR)/$(PREFIX)_output
CONFFILE=$(BASEDIR)/$(PREFIX)_pelicanconf.py
PUBLISHCONF=$(BASEDIR)/$(PREFIX)_publishconf.py
CACHEDIR=$(BASEDIR)/$(PREFIX)_cache

cacheディレクトリを指定するオプション --cache-path $(CACHEDIR) はついていないので,これも Makefile に書き加えておく。

html:
    $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) --cache-path $(CACHEDIR) $(PELICANOPTS)

regenerate:
    $(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) --cache-path $(CACHEDIR) $(PELICANOPTS)

publish:
    $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) --cache-path $(CACHEDIR) $(PELICANOPTS)

こうしておけば,今後はPREFIXを指定していつもどおりにmakeするだけでマルチサイト機能を利用できる。 diary をコンパイルするなら

$ make html PREFIX=diary

とする。あるいは,しばらく diary を編集しつづけるなら環境変数を設定してやればオプションを省略できる。

$ export PREFIX=diary
$ make html
$ make serve

develop_server.shを書き換える

Pelicanでブログを書きながらプレビューするときは

$ make html      # htmlファイルを作る
$ make serve     # pythonの簡易Webサーバを起動する

localhost:8000 をブラウザで開けば良い。記事を更新するたびに make html するのは面倒なので,ファイル更新を監視して自動的に make html してくれるルール regenerate もある。

$ make regenerate

しかし, make regeneratemake serve のためにシェルを2つ開きっぱなしにするのは無駄なので,1つにまとめてしまった devserver がある。(個人的にはデバッグメッセージが読めにくくなるので使っていないが)

$ make devserver

で,これは develop_server.sh を呼び出しているだけだから,こいつも Makefile と同様にマルチサイト対応版に書き換えてやる。デフォルトを tech にするなら次のように書く。

PREFIX=${PREFIX:-tech}
BASEDIR=$(pwd)
INPUTDIR=$BASEDIR/${PREFIX}_content
OUTPUTDIR=$BASEDIR/${PREFIX}_output
CONFFILE=$BASEDIR/${PREFIX}_pelicanconf.py
CACHEDIR=$BASEDIR/${PREFIX}_cache

最後に,pelicanの呼び出し部に -cache-path の指定を加えておしまい。

$PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS --cache-path ${CACHEDIR} &

最後に

あとは,サイトによってちょっと背景色を変えたいとか,そういう必要があるなら pelicanconf.py で適当な変数を定義しておいて,jinja2の書式で適当にテンプレートを書き換えておけば良いだろう。

てな感じで,今回は非常にシンプルかつ柔軟にマルチサイト対応できた。Wordpressではこうはいかないね。pelicanを使っていて良かったと思える瞬間だ。

Comments !

social