ココログ→Movable Type(自前サーバ)→WordPress(自前サーバ)と移ってきたブログを,静的なものにしてGitHub Pagesに置くことにしました。

参考:https://jekyllrb.com/日本語訳

移行の理由

ブログを静的にする理由は以下の通りです。

  • WordPressの更新が面倒
  • WordPressのプラグインの更新が面倒
  • WordPressのためのソフトウェア(ApacheやMySQL,PHP)の更新が面倒
  • OSの更新が面倒
  • HTTPS対応が面倒
  • ブログサービスを使いたくない
    • サービスが終了したときに別のサービスに引っ越さなければならない
    • サービスに記事を非公開にする権利を渡すことになる

静的にしておけば,ウェブサーバさえあれば公開できます。最悪,ZIPで固めて配布したとして,受け取った側もダブルクリックで読めるので簡単です。

具体的な手順

Dockerが動くことを前提に進めます。

Jekyllのhttps://import.jekyllrb.com/docs/wordpressdotcom/で紹介されているExitwpを使って移行します。

作業用のフォルダを作ります。

mkdir $HOME/jekyll

Docker run!

docker run --rm -it -v $HOME/jekyll:/jekyll ubuntu bash

コンテナのシェルで,以下を実行します。

apt update
apt install -y git python-pip
pip install PyYAML bs4

cd /jekyll
git clone https://github.com/thomasf/exitwp.git

(ホスト側で)$HOME/jekyll/exitwp/wordpress-xmlに,WordPressからエクスポートしたファイル(例:wordpress.2018-08-19.xml)を置きます。

コンテナのシェルで,変換を実行します。

cd /jekyll/exitwp
python exitwp.py

これで,ブログの1記事が1ファイルになって,ホストの$HOME/jekyll/exitwp/build/jekyll/{ブログのBase URL}/_posts に格納されます。この_postだけホストの$HOME/jekyllに移動して,あとは消しておきましょう。コンテナのシェルで,以下を実行します。

mv build/jekyll/{ブログのBase URL}/_posts /jekyll
rm -r exitwp
exit

Jekyllの準備(1回だけ)

WindowsでDocker Toolboxを使う場合は,4000番ポートを使えるようにしておきます。

VBoxManage controlvm "default" natpf1 "jekyll,tcp,127.0.0.1,4000,,4000"

JekyllはDockerのイメージjekyll/jekyllを使って実行します。

docker run -it -p 4000:4000 -v $HOME/jekyll:/srv/jekyll --name jekyll jekyll/jekyll bash

コンテナのシェルで,以下を実行します。Jekyllのテーマはとりあえずminimaということにします(GitHubでサポートされるテーマ)。設定ファイル(_config.yml)は https://github.com/jekyll/minima を参考に書くといいでしょう。GitHubでの公開用には,https://jekyllrb.com/docs/github-pages/ も参考になります。

touch README.md

cat << EOS > _config.yml
title: ブログのタイトル
author: 著者
description: 概要
theme: minima
EOS

cat << EOS > Gemfile
source "https://rubygems.org"
gem "github-pages", group: :jekyll_plugins
EOS

bundle update

このままdocker exec -it jekyll jekyll serveを実行してもいいのですが,一度終わらせます。

exit

Jekyllの実行

コンテナを起動します。

docker start jekyll

ブログを生成します(Ctrl-Cで停止)。

docker exec -it jekyll jekyll serve

http://localhost:4000 にアクセスして,変換後のブログを閲覧します。

記事中に{{x, y}のような文字列があるとエラーになるので,何らかの方法で直す必要があります。(解決策の例:p要素の中で&#x7b;&#x7b;x, y&#x7d;のように文字参照を使う。)

Ctrl-Cで止めてから,上のコマンドを実行すると,ブログを再生成します。

掃除

docker stop jekyll
docker rm jekyll

GitHubでの公開

$HOME/jekyll全体をプッシュすればいいのですが,詳細は割愛します。