ブログを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-zenhugo-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

参考ページ