OctopressからHugoに移行
March 13, 2016 - 雑記
Octopressを使い始めて約2年。Hugoに乗り換えました。
WordpressからOctopressに移行が2014年の4月なので約2年です。
そんなに記事はたくさん書いているわけでなはいのですが、それでもrake preview
しながら編集しているときのストレスはそれなりにありました。
なので、快適さを得るためにHugoに乗り換えました。
やったこと
hugo new
でプロジェクト生成した- Octopressのmarkdownファイルのみ
content/post
以下にコピー
- Octopressのmarkdownファイルのみ
- permalinkの設定を維持できず、シェルスクリプトでslugを追加した
- config.tomlで
post = /:year/:month/:day/:title
とすると/2016/01/01/2016-01-01-hogehoge
のようなパーマリンクになってしまう - slugを設定しておけばそのままいけるので修正した。
- 生成元がマルチバイト含んでるとエスケープ処理まわりで互換性が壊れるのでaliasを設定した
- Hugoでマルチバイトのタイトルをうまいこと使う - Unresolved
- https://gohugo.io/extras/aliases/
- config.tomlで
- テーマのhydeをカスタムして最低限の要素を取り入れた後、cactusに乗り換えた
- ソーシャルタグとか色日調整とか細かいところに手を入れた
- 本当はもう少しマシにしたいけどとりあえずここまで
- 最後に手動で1ファイルずつ調整した
- Wordpress時代の設定とか残ってたり、descrptionが雑だったりしたので最終的に1つずつメタデータを修正
ファイル名からslugを追記するシェルスクリプト
#!/bin/bash
for file in $(ls content/post | grep '\.markdown$'); do
SLUG="$(echo ${file:11} | sed -E 's/.markdown$//')"
[ -z $SLUG ] && continue
file="./content/post/$file"
echo $file
cat <<EOF > $file.tmp
---
slug: "${SLUG}"
EOF
cat $file.tmp
sed -e '1,1d' ${file} >> $file.tmp
mv $file.tmp $file
done
これを実行する前に、content/post以下はコミットしておいたほうが安心かと。
で、実行おわったら再度git add
してgit commit
。
github pagesのリポジトリへの登録
あとはReSTARTR/restartr.github.ioをsubmoduleにしてそこに生成ファイルを配置
git submodule add git@github.com:restartr/restartr.github.io public
# 必要なファイルを生成元にコピー
cp ./public/{CNAME,humans.txt,crossdomain.xml} ./content
# いったん全削除
cd public && rm -rf ./$(git ls-files | grep -v gitignore) && cd ..
# コンテンツ生成
hugo -d public
# 別ブランチにcommit && push
cd publid
git checkout migrate-to-hugo
git add -A .
git commit -m 'Migrate to Hugo'
git push origin master
あとは、githubでプルリクエストつくってマージすればOK。 失敗したらRevertできるので安心です。
という感じで移行が完了したわけですが、テーマとか周辺環境はOctopressに比べると貧弱です。 が、一度もろもろ設定してしまったらそんなにいじることもないしまぁ問題ないかと思います。
ストレス感じながら文章かくよりは、気持よく文章書けるほうが良いです。