WordPressからJekyllへの移行手順
ココログ→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要素の中で{{x, y}
のように文字参照を使う。)
Ctrl-Cで止めてから,上のコマンドを実行すると,ブログを再生成します。
掃除
docker stop jekyll
docker rm jekyll
GitHubでの公開
$HOME/jekyll全体をプッシュすればいいのですが,詳細は割愛します。