ブログをWordPressからHugoへ移行した

3 分で読める

blog.babibubebo.orgで公開していたWordPressのブログですが、静的サイトジェネレータであるHugoで構築しているこちらのサイトへコンテンツを移行しました。

WordPressの運用が面倒だと思いながらも惰性で使い続けていたのですが、WordPress 5.0で導入されたエディタGutenbergの体験が最悪だったことが決定打となり、WordPressを廃止する計画を立てておりました。移行先になぜHugoを選択したかというと、こちらのサイトが既にHugoで構築してありますし、ブログに求める機能を十分備えていることを理解していたからです。ただ、過去の記事データの移行がどうしても手間なのでしばらく保留していましたが、この3連休を使ってなんとか移行し終わりました。

WordPress記事の移行

WordPressからHugoへの移行は、ググれば多数の事例が見つかるので特に書くことがないです。Hugoのドキュメントにもいくつかツールの紹介がありますが、wordpress-to-hugo-exporterという素晴らしいプラグインが簡単でした。このプラグインを使って記事をエクスポートするだけで、とりあえず形式上はHugoのコンテンツとして移行は完了します。

Hugo: Migrate to Hugo - WordPress

なお、エクスポートされる時の各記事のファイル名がデフォルトだと {投稿日}-{記事タイトル}.md なのですが、日本語が含まれるといろいろ不便だったので、 hugo-export.php を以下のように修正して {記事ID}.md でエクスポートするようにしました。

384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
function write($output, $post)
{

    global $wp_filesystem;

    if (get_post_type($post) == 'page') {
        $wp_filesystem->mkdir(urldecode($this->dir . $post->post_name));
        $filename = urldecode($post->post_name . '/index.md');
    } else {
        //$filename = $this->post_folder . date('Y-m-d', strtotime($post->post_date)) . '-' . urldecode($post->post_name) . '.md';
        $filename = $this->post_folder . urldecode($post->ID) . '.md';
    }

    $wp_filesystem->put_contents($this->dir . $filename, $output);
}

$post のプロパティは以下あたりを参考に。

WordPress Codex 日本語版: 関数リファレンス/get post

あとは、エクスポートされたファイルに対して、正規表現を駆使しながら手動で記事を修正するしかありません。記事を書き換えたり、何かを埋め込んだりする系のWordPressプラグインを多用して記事を書いていた場合は、この修正作業で地獄を見ることになります。

コメントの移行

先ほどのwordpress-to-hugo-exporterプラグインでも、オプションでコメントをエクスポートできるのですが、記事の一部として出力される形になってしまいます。

Hugo自体はコメント機能はサポートしていませんが、Disqusとの統合がサポートされており、実際Hugo & Disqusを利用しているサイトをよく見かけます。では、WordPressのコメントをDisqusにインポートすれば移行できそうです。

Disqus: Importing comments from WordPress

WordPressからエクスポートしたWXRファイルをアップロードすれば簡単にできるっぽいのですが、私の場合は記事のURIが変更になるので色々書き換える必要があります。結局面倒くさくなってしまい移行するのを止めました。数は多くないものの、今までコメントくださった方には申し訳ありません。

comments powered by Disqus