WordPress から Jekyll に乗り換えました

4 年ほど WordPress 使ってたんですが、先日 Jekyll に乗り換えました。その感想と記録です。

Jekyll のいいとこ

  • 好きなエディタとコマンドラインだけで、執筆から公開までできる
  • Markdown で記事を書ける
  • 記事がテキストファイルなので、機械的な処理がしやすい
  • テンプレートも WordPress に比べシンプルで書きやすい
  • 最終的に静的な HTML になるので、デプロイ環境を整えるのが楽で、パフォーマンスもよい
  • git で管理できるので、bitbucket にでも push しとけば、ほとんどバックアップに気を使わなくてよい
  • Ruby で書かれてるのでカスタマイズも可能

いろいろ書きましたが、書いて公開するまでのストレスが大幅に軽減されたのが一番嬉しいです。

参考文献

コメントについて

WordPress にはコメント機能がありますが、Jekyll にはありません。

DISQUS の利用も検討しましたが、既存のコメントを移行することもできないし、はてブや Twitter があればコメント機能は不要かなと考えるようになりました。

エゴサーチしてますので、コメントいただける場合は、はてブか Twitter でお願いします。返信が必要であれば、お気軽に @labocho 宛に mention ください。

WordPress からの移行手順

初期化

jekyll new blog でひな形を作ります。以降はこの blog ディレクトリ下で作業します。

投稿のインポート

jekyll-import gem を使って 公式のドキュメント に従って、下記の様なスクリプトを作成、実行します。これにより _posts 下に 2014-02-10-記事スラッグ.markdown のようなファイルが作られます (タグやカテゴリ、コメントなども Front-matter で付与されます)。

require "jekyll-import"

print "Password: "
password = gets.strip

JekyllImport::Importers::WordPress.run({
  "dbname"   => "site",
  "user"     => "site",
  "password" => password,
  "host"     => "127.0.0.1",
  "prefix"   => "wpblog_",
  "clean_entities" => true,
  "comments"       => true,
  "categories"     => true,
  "tags"           => true,
  "more_excerpt"   => true,
  "more_anchor"    => true,
  "status"         => ["publish"]
})

私の場合、リモートサーバの MySQL に直接接続できないようにしていたので、下記コマンドで SSH ポートフォワーディングを行って接続するようにしました。この際、jekyll-import はポート番号を指定できないので、3306 で接続する必要がありました。

$ ssh -N -L 3306:127.0.0.1:3306 penguinlab.jp

アップロードしたファイル

jekyll-import は WordPress でアップロードしたファイルまでは取ってこないので、scp などでダウンロードします。

WordPress でアップロードしたファイルは [WordPress のルート]/wp-content/uploads にあるので、Jekyll のルートに wp-content/uploads ディレクトリを作って、ここにダウンロードしました。

フィード

WordPress では /feed で RSS、/feed/atom で Atom のフィードが得られるようになっていました。

フィードは jekyll-bootstraprss.xmlatom.xml を参考に作ればいいのですが、静的ファイルのみで上記の URL を維持し、適切な Content-Type で提供するのは結構面倒です。

そこで /feed.rss で RSS、/feed.atom で Atom のフィードを提供するようにし、Apache で既存の URL からリダイレクトするようにしました。

通常 .rss や .atom の Content-Type は定義されていないので、下記の設定を .htaccess に記述しています。

AddType application/rss+xml .rss
AddType application/atom+xml .atom

baseurl

このブログの URL は、/blog から始まります。

Jekyll では、_config.ymlbaseurl: /blog とすると、記事の URL などに /blog が前置されるようになります。

ただし、CSS の URL を書く場合などは {{ site.baseurl }}/css/bootstrap.min.css のように {{ site.baseurl }} を前置する必要があります。

いま思えば、WordPress に移行する際に http://penguinlab.jp/blog でなく http://blog.penguinlab.jp にしておけばいろいろ楽だったんですが...。

記事の URL

記事の URL に関しては、長くなるので別の記事に書きました。