これまではてなブログと Qiita に書いていた記事を、Hugo で生成して GitHub Pages でホスティングしているこの自前ブログへ移行した。
リポジトリも公開してある: dtan4/blog-ja
今後似たようなことをしたい人のために、移行手順を書き残しておく。
ブログのセットアップ
Quick Start | Hugo に沿ってブログの土台を用意した。 テーマは Hugo Themes で見つけた Pickles をもとに、テンプレートを少し弄った (記事一覧でのサマリ表示廃止、記事ページに Tweet button 設置) ものを使っている。
環境差異を吸収するために、Docker コンテナ上で Hugo コマンドを実行できるようにした。
はてなブログのインポート
Import hatenablog by dtan4 · Pull Request #1 · dtan4/blog-ja
まずは x-motemen/blogsync を使って、記事の Markdown をダウンロードしてくる。 このまま Hugo に持っていっても独自記法や front matter はそのまま使えないので、以下の作業を追加で行う。 複数記事を一括編集する必要があったので、適宜シェルスクリプトを書いた。
- front matter を Hugo compatible に書き換える (
format.sh
) [<URL>:embed:site]
なリンクを plain URL に書き換える- こういうやつ:
[https://github.com/dtan4/spotdog:embed:cite]
- こういうやつ:
- はてなフォトライフにアップロードしていた写真をリポジトリ内にダウンロードし、リンクも Markdown に書き換える (
replace-fotolife.sh
)- こういうやつ:
[f:id:dtan4:20170709174052p:plain]
- こういうやつ:
[<URL>]
なリンクから[]
を外して plain URL に書き換える (replace-bracketed-urls.sh
)- 他のクラウドにアップロードされていた画像をダウンロードし、リンクを書き換える (
replace-cloud-images.sh
)- GitHub (
raw.githubusercontent.com
) とか、Dropbox に Public でアップロードしてあったやつ
- GitHub (
- 各記事に
hatenablog
タグをつける - はてなブログ元記事へのリンクを記事内に書く (
add-ref.sh
)
Qiita のインポート
Import Qiita posts by dtan4 · Pull Request #2 · dtan4/blog-ja
ちょうどいいタイミングで tenntenn/qiitaexporter が公開されたので、これを使ってインポートした。 qiitaexporter は以下のことをやってくれるので、工数が減り便利。
- Hugo compatible な形式の front matter を埋め込む
- Qiita 元記事へのリンク埋め込み
- Qiita にアップロードしてあった画像を一括ダウンロード & リンク置換
ついでにやったのは、
- 他のクラウドにアップロードされていた画像をダウンロードし、リンクを書き換える
- 各記事に
qiita
タグをつける
だけ。
ブログ公開
GitHub Actions を使って、master branch に merge したら自動で GitHub Pages (gh-pages
branch) へ公開されるようにした。
.github/workflows/github-pages.yaml
一旦 https://dtan4.github.io/blog-ja でアクセスできるのを確認したあとは、Managing a custom domain for your GitHub Pages site - GitHub Help を参考に、カスタムドメイン https://blog-ja.dtan4.net で公開する設定を行う。
- GitHub Pages でカスタムドメインを設定して
- (自分の場合は) Route 53 で CNAME レコード作って
- GitHub に戻って “Enforce HTTPS” にチェックを入れてしばし待つ
static/CNAME
をリポジトリに置く- これを忘れると、デプロイのたびに GitHub Pages のカスタムドメイン設定が無効化される (
gh-pages
branch からCNAME
が消える) ことになる - ref: Host on GitHub | Hugo
- これを忘れると、デプロイのたびに GitHub Pages のカスタムドメイン設定が無効化される (
一旦ここで終わり。 Favicon 設定とか旧ブログのクリーンアップとか残っているけど、気が向いたらやる。