November 23, 2017

HugoからPelicanへの移行を検討中

このブログは夏に静的サイトジェネレータの Hugoに移行したばかり ですが、同様に静的サイトジェネレータの Pelicanへの移行を検討しています。

Pelicanを検討する訳

1番の理由は、コンテンツの記法としてMarkdownだけでなく reStucturedTextが 使えることです。

reStucturedTextの良い点は、 以下の3つでしょうか。

  • 仕事のドキュメンテーションでreStructuredTextを使い出したので、統一したい。
  • Markdownより表などの表現力が高い。
  • ソースコードのシンタックス表示をJavaScriptに依存せずレンダリングできる。
  • コンテンツ・ソースが読みやすい。

Hugoについては、他の静的サイトジェネレータと比較すると 圧倒的なビルド速度と日本語情報の多さがメリットでした。

ビルドの早さについては、Netlifyで自動ビルドして いるのでどうでもよくなってしまいました。

情報量が多いのは助かりますが、まぁなんとかなるかと。

Pelican移行の進め方

コンテンツの移行

Pelicanもマークダウンが扱えるので、コンテンツは基本的にそのまま持ち込め そうです。

ただし、メタ情報については記法が違うのでコンバートが必要です。これはすでに HugoからPelicanへの 移行を行った方 が、メタデータ変換のPythonスクリプトを書いていらっしゃいました。テストした ところウチのブログは問題なく変換できそうです。

コンテンツ・ソースのフォルダ構成を私は年度ごとに以下のような構造にしています。 Pelicanでは USE_FOLDER_AS_CATEGORYTrueにしなければ、フォルダには特に 意味はないので問題なさそうです。

.
├── about.md
├── post
│   ├── 2011
│   ├── 2012
│   ├── 2013
│   ├── 2014
│   ├── 2015
│   ├── 2016
│   └── 2017
└── search.md

また、コンテンツ・ソースのファイル名に私はYYYYMMDD.mdという形式を使用しています。 同日に複数の記事を書く場合は、20171123-2.md などとしています。

Pelicanにはファイル名からメタデータを取得する機能があります。 以下のように設定すればファイル名からうまく日付を取ってくれます。そして、都合が よいことに、ファイルの中にメタデータが書かれている場合はそちらを優先して くれるようです。

FILENAME_METADATA=r'(?P<date>\d{4}\d{2}\d{2}).*'

以上から、ほぼ移行スクリプトと流せばコンテンツの移行は終わりそうです。

生成後の互換性について

サイトついては、現在も使用しているNetlifyに載せよう と思います。テストしたところ、Netlifyでpelicanの生成も問題なくできました。

生成する記事のURLも設定ファイルの pelicanconf.pyでうまく設定すれば大丈夫 そうです。

以下の2つの設定でHugoで生成しているこのブログと同じ構成になりそうです。

ARTICLE_URL = '{date:%Y}/{date:%m}/{date:%d}/{slug}/'
ARTICLE_SAVE_AS = '{date:%Y}/{date:%m}/{date:%d}/{slug}/index.html'

問題はテーマです。

現在HugoのHemingway2というテーマを元にかなり自分で修正を加えてしまっています。

Pelicanのテーマは、http://www.pelicanthemes.com で色々公開されていますが、気に入ったものがありません。

自分で作るかな。

関連記事

© 沙門