ブログを Hugo に移行した

2015/06/21 2:43pm

すでに4年半近くの時が経過したが、ひさしぶりの投稿だ。Google AppEngine (Python + Django) で動かしていた自作ブログエンジンを Hugo に移行している。

Go で実装されているおかげでもあるのだろうが、サイトの生成スピードが速い。組み込みサーバには、ファイルの変更を検知してサイトを更新する機能が備わっているので、ストレスなく記事を書くことができる。ブラウザのリロードも不要。

URL を記事ごとに指定可能なのは助かった。デフォルトだと /post/title/ のような URL になるのだが、古い記事は /YYYY/MM/DD/title/ という形式で URL を決めていたので、そのままだと URL が変わってしまう。記事中の YAML (Front Matter) で URL を上書きしてやることで、URL を変えずにすんだ。

---
title: "Ruby-FFI 1.0.0 からは Ruby 1.9.2 以降が必要になった。"
url: "/2010/12/16/ffi-requires-ruby-version-1-9-2/"
...

とはいえ、今後もこの指定をしていくのはしんどいので、この記事から URL の形式を /post/title/ に変えるつもり。

移行スクリプト

移行にあたっては古い記事を Markdown + Front Matter に変換する必要があり、変換スクリプトを Ruby で書いた。

  1. 指定された記事の URL から HTML を取得
  2. Nokogiri で HTML をパースしてタイトルや日付といったメタデータを抽出
  3. 本文を Markdown に変換
  4. Hugo コマンドを起動してファイル作成
  5. Markdown を書き込んで、次に実行するコマンドを出力

移行しながら発展させていき、最終的には上のようなスクリプトに落ち着いた。 最初のうちは 3 までをスクリプトでやって残りは(変換結果が正しいことを確認しつつ)手作業だったのだが、 しばらくしてから 4, 5 を実装して一気に終わらせた。