背景
少し前から、Markdown文書から静的サイトを生成したいという欲求がありました。主な理由は以下です。- ソースがテキストなので
diff
形式で簡単に差分を可視化できる。- 変更点を伝えなきゃいけない相手と共有しやすい。
- 好きなエディタ(VSCode、Emacs、Vim etc…)で編集できる。
- 作業効率が良くなる
Install in seconds, build in milliseconds.
https://gohugo.io/
先人
実は社内の技術文書にこの技術を適用したいと考えていたので、以下の記事がとても参考になりました。HUGOでMarkdownを使った技術ドキュメントの管理が良いlearn テーマ、素晴らしいですね。
- 高速な全文検索が可能(日本語は難あり)
- パンくずリストっぽいのがある
- Edit this pageリンクも簡単につけられる
Search for your Hugo Websitelearnテーマはlunr.jsを使ってるようで、英語での検索は高速かつ良い感じなのですが、日本語検索はインクリメンタルサーチがうまくいきませんでした。
日本語検索については、ビルド時にインデックスのJSONファイルをを作って純粋にJSONをフロントエンドで検索する方法などが多く実践されているようです。むしろPublicなサイトならGoogleのサイト内検索に任せるのが良いのかぁ〜と思うのですが、この記事では解決策の実践には至っておりません。すみません(´・ω・`)
テーマ設定
テーマのインストールにgit submodule add
を使います。私のように、このコマンドにあまり馴染みがない方は以下の記事も参照してください。Git submodule の基礎コードのシンタックスハイライトのための書き方は、以下が参考になります。
Syntax Highlighting
GitLabによるCI/CD
この記事ではCI/CD基盤にgitlab.comを使います。以下を読みながら
.gitlab-ci.yaml
を作ってGitLabのパイプラインが動作するようにします。Host on GitLab
config.toml
のbaseURL
を修正します。変更点の詳細はこちら。GitLab公式のリポジトリに、Hugoを使った静的サイト生成のためのサンプルがあります。これも凄く参考になるのでオススメです。
hugo
つくったもの
こんな感じになりました!ʕ◔ϖ◔ʔ- ソース: hugo-trial
- CIで上記をビルドして生成したサイト: こちら
また、図らずも検索機能と面と向き合うきっかけになりました。今回は私のスキル不足で完全敗北でしたが、これについてはもう少し勉強して出直したいと思います。