HugoでGithub Pages
Github Pages
Githubでは<username>.github.io
で個人ブログを持つことが出来る。
静的なものしか出来ないが、別途サーバーを用意する必要がない。
<username>.github.io
という名称のリポジトリをつくり、htmlを並べればWebサイトになる。
あるいは静的サイトジェネレータとしてJekyllがサポートされているので、これを用いたWebサイト作りも出来る。
これはHugoを用いてWeb サイトを作ったメモである。 参考としてHugo DocumentationとHugoで新規のWebサイトを作成する、Hugoで1からテーマを作ってGitHub Pagesにデプロイするなどを見た。
Hugoのインストール
Ubuntu20.04ではapt
で導入が可能になっている。
公式ではwget
による導入が記載されていたが、簡単にapt
で導入した。
$ sudo apt install hugo
リポジトリ作成(ローカル)
まずはローカルな環境で<username>.github.io
の名前でディレクトリを作ることになるが、mkdir
をする必要はなく
$ hugo new site <username>.github.io
を実行することでディレクトリと基本的なツリー構造
<username>.github.io/
├─ archetypes
├─ content
├─ data
├─ layouts
├─ resources
├─ static
├─ themes
└─ config.toml
が出来上がる。
config.toml
が基本となる設定ファイルである。
archetypes/
に記事を作る際のテンプレート用ファイルがあり、記事はcontent/
に保存していく。
記事は基本的にマークダウンファイル.md
として作る。
Theme
themes/
にWebサイトの基本となるテーマをインストールする。
これはHugo Themesから選べる。
ここではArchie を選んだ(athul/archie Github, Archie Sample)。
$ cd themes
$ git clone https://github.com/athul/archie.git
でテーマのインストールは完了となる。
ここにarchetypes/
とconfig.toml
の参考に出来る例があるので適宜コピペする(実際の設定はこちら)。
また後のために.git/
などのGitまわりのディレクトリは削除しておく。
Content
content/
内での構造は
content/
├── about
├── notes
└── posts
とした。
各々好きなディレクトリ名、構造にすることが出来る。
それぞれに適宜.md
ファイルの記事を置いていく。
先述の参考にしたconfig.toml
の内容を見て、上記の構造と合っているかどうか確認する。
ここでの確認においてはcontent/
がルートディレクトリになっており、それ以下の構造を考える。
Webページの確認
途中でサイト作成がうまく行っているかのローカル環境での確認は
$ hugo server
で行える。
ブラウザでhttp://localhost:1313/
を打ち込めばアクセスできる。
正しい構造になっていればcontent/
以下に作成した.md
ファイルがWebページとして表示される。
別途Hugoで必要な設定
Githubが対応している静的サイトジェネレータはJekyllなので、Hugoを使う際は別途設定をしなければならない。
まずは<username.github.io
に空ファイルで.nojekyll
を作る(無い場合を確認していない。公式にはこう書いてある。)。
次にconfig.toml
に
$ publishDir = "docs"
を追加する。 HugoはGithubの対応が無いため、ローカル環境で
$ hugo
を実行することでhtmlファイルなど一通りのファイルをローカルでビルドする必要がある。
この際、デフォルトでは作成されたファイルはpublic/
に保存される。
このディレクトリはGithubで対応されていないため、対応されているdocs/
に変更することで読み込まれる。
上述の設定ファイルへの記述はこの対応のためである。
またこのままではHomepageが機能せず、PDFなどのリンクを貼っても機能しない。
これはdocs/
以下のファイルを読み込むようにはなっているが、ルートの指定が正しくされていないため、リンクが機能していないためだ。
これを修正するために
canonifyurls = true
をconfig.toml
に追記する。
一通り公開する記事の準備が出来たらhugo
でビルドしてdocs/
以下にhtmlファイルなどを生成しておく。
PDFファイルなどへのリンクを貼るときはdocs/pdf/
のようにディレクトリをつくり、そこにPDF を保存しておく。
リンクは[テキスト](https://<username>.github.io/pdf/ファイル名.pdf)
と書いておけばつながる。
Github(リモート)まわりの設定
ローカルでしか設定を行なっていないので、リモートのGithubでの設定を行なう。
Githubで通常どおりリモートリポジトリを作る。
ただしリポジトリ名は<username>.github.io
という名称で作る。
またREADMEやLICENSEなどの設定の選択肢があるが、これらは全て作らないようにしておく。
このとき、デフォルトのブランチ名はmain
である。
一方でローカルの<username>.github.io
にて
$ git init
を行なう。
以下通常通りgit add .
とgit commit -m "initial commit"
を行なう(コミットのメッセージの文言は各々自由)。
次に
$ git remote add origin git@github.com:<username>/<username>.github.io
を行ない、
$ git push -u origin main
することでローカルで行なった設定がGithubに反映される。
リモートリポジトリを作る時にREADMEなどを作ってしまう、あるいはgit
実行時にmain
とせずmaster
としてしまうとプッシュ(あるいはマージ)が失敗してしまう。
これはヒストリーを共有しない2つの独立なブランチを作ったことによる失敗であり、前者は
$ git push -f origin main
で、後者は
$ git merge --allow-unrelated-histories main master
(Git fatal: refusing to merge unrelated historiesを解決する話)で解決される。
余分なmaster
はgit branch -d master
なりgit push --delete origin master
なりで削除。
既にローカルで編集してビルドまで済ませたディレクトリとファイルとがGithubにプッシュされているが、このままではまだhttps://<username>.github.io
につながらない。
リポジトリ<username>.github.io
のSettingsからGithub Pagesの項目のところへ行き、Sourceの欄で/(root)
から/docs
へ変更してSaveしておく。
これで自分のサイトへつながるようになっている。