ブログをOctopressからHugoに移行してみた
「ブログの更新が面倒」という理由でWordPressをやめてOctopressを使うようにしてました。
でも、Octopressも面倒になりました。rubyだったりpython(pygments)だったりのバージョンを合わせたり、テーマの構成がよく分からなくてちょっとした変更も辛くなってきて、、
そこで、最近人気があるらしいHugoにしてみました。動作が速くて構造がシンプルみたい。
インストール
Golangの環境はあるので、go get
でインストールします。Macの人はbrew、Linuxの人はyumやdpkgなんかでも入れられると思います。
go get -v github.com/spf13/hugo
移行
記事と画像ファイルをコピーして、front matterのフォーマットをyamlからtomlに変更したくらいです。
OctopressからHugoに移行する際、日付フォーマットや画像タグの変更が必要みたいですが、私の場合は元々Hugoに合っていたので変更しなくてもOKでした。
また、テーマは公式にまとめられているみたいです。全部、個別どちらでも簡単に導入できます。今回はhugo-zenとhugo-zenの作者さんのサイトを参考にして、[my_blog]/layouts
に適当に作りました。
hugo server -w
でプレビューしながら記事やレイアウトを作って、この時点でのHugoのディレクトリはこんな感じ。
tree -L 1 [my_blog]
[my_blog]
├── README.md
├── archetypes
├── config.toml
├── content
├── data
├── layouts
├── public
└── static
ホスティング
既存のGithubのユーザーページのリポジトリ([username].github.io.git)を使います。
Octopressの時はsource
ブランチはBitbucketにしていたのですが、別に分ける必要ないかなと思ったので両方Githubにまとめます。
やり方は自信ない。あってるのかなぁ。
# Octopressで生成していたサイトのデータを取得
git clone git@github.com:[username]/[username].github.io.git
# 全部消す
cd [username].github.io.git]
rm -rf ./*
# とりあえずREADME.mdを入れておく
touch README.md
# masterブランチをコミット
git add -A
git commit -m 'delete octopress'
git push origin master
# sourceブランチを作る
git checkout -b source
# Hugoで生成したサイトのデータをコピーしてくる
cp -a [my_blog]/* ./
rm -rf public
# sourceブランチをコミット
git add -A
git commit -m 'initial commit hugo'
git push origin source
# Hugoの公開ディレクトリをsubtreeでmasterブランチに切り出す
git subtree add --prefix=public --squash origin master
git subtree pull --prefix=public --squash origin master
# 記事生成(publicディレクトリが作られる)
hugo
# publicの内容をsource、masterブランチにコミット
git add -A
git commit -m 'subtree public directory'
git push origin source
git subtree push --prefix=public origin master
記事を書いて更新していく
以下のコマンドを実行する。
hugo
git add -A
git commit -m 'xxxxxx'
git push origin source
git subtree push --prefix=public origin master
Hugoのチュートリアルにデプロイスクリプトがあったのでそれを元に作る。
#!/bin/bash
echo -e "\033[0;32mDeploying updates to GitHub...\033[0m"
# Build the project.
hugo
# Add changes to git.
git add -A
# Commit changes.
msg="rebuilding site `date`"
if [ $# -eq 1 ]
then msg="$1"
fi
git commit -m "$msg"
# Push source and build repos.
git push origin source
git subtree push --prefix=public origin master