hugo 
 2018-10-16

GitHub Pagesを使ってHugoを公開する手順をメモ
やりたいこととしては、

  • Hugoのプロジェクトを丸ごとgitで管理
  • プロジェクトの下に作られるpublicをGitHub Pagesで公開
  • 独自ドメインの設定

の3つです。

GitHub Pagesで公開

まずは、Hugoのプロジェクトルートをgitで管理します。
GitHub Pagesで公開するために、GitHubのリポジトリの設定からPagesで公開するための設定を行います。このとき、そのまま公開すると、Hugoをビルドして生成されるファイルはプロジェクトルート直下のpublic以下に生成されるので、

 https://{ユーザー名}.github.io/{リポジトリ名}/{public}

というように、URLにpublicが付いてしまいます。これは嫌なので、git subtreeを使います。
gh-pagesという新しいブランチを作成し、public以下のファイルのみをpushしています。github pagesではgh-pagesを公開するよう設定します。

$ git subtree push --prefix public/ . gh-pages
$ git push origin gh-pages:gh-pages

GitHubから独自ドメインの設定をすると、ブランチgh-pagesにCNAMEファイルが追加、commitされるのですが、この変更をローカルのmasterに取り込めないという問題が発生しました。このため、ローカルで記事を追加したときなど、non-fast-forwardでpush、pullもできなくなりました。そこで、しょうがなくmaster側にローカルからCNAMEファイルを追加しました。

それでもうまくいかないときは、エラー文のcommitのハッシュを使って無理やりpushしてとりあえず回避してます。

 $ git subtree push --prefix public/ . gh-pages
 git push using:  . gh-pages
 To .     59 (58)
  ! [rejected]        95625bda7b4247ff0d05b2e76c8db1cbb7e87dad -> gh-pages (non-fast-forward)
 error: failed to push some refs to '.'
 hint: Updates were rejected because a pushed branch tip is behind its remote
 hint: counterpart. Check out this branch and integrate the remote changes
 hint: (e.g. 'git pull ...') before pushing again.
 hint: See the 'Note about fast-forwards' in 'git push --help' for details.
 $ git push origin 95625bda7b4247ff0d05b2e76c8db1cbb7e87dad:gh-pages

独自ドメインの設定

今回は、お名前.comでドメインを取得しました。お名前.comでDNSの設定をします。
GitHub Pagesのドメインは

 https://{ユーザー名}.github.io/{リポジトリ名}

なので、取得したドメインでGitHub PagesのドメインがひけるようにCNAMEの設定を行います。

GitHub側では、リポジトリの設定からCustom domainを取得したドメインで設定します。Custom domainを設定すると、Enforce HTTPSにチェックを入れることができるので、設定するとhttpsで通信が行えるようになります。

See Also