独自テーマの新規作成
Hugo には、ネット上に公開されているテンプレートがたくさんありますが、思い通りのデザインをするときは、自分でテーマを作成することになります。 テーマを作成するときは、まずは下記のコマンドで雛形を出力します。
$ hugo new theme <テーマ名>
例えば下記のように実行すると、themes/my-theme
ディレクトリが生成されます。
$ hugo new theme my-theme
生成されるファイル群は下記のようになっていて、ディレクトリ構成はバッチシできていますが、ファイル内の記述はほとんど空っぽです。 このファイル群をベースにして、テンプレートを作成していきます。
トップページのレイアウト (layouts/index.html) を作成する
テーマディレクトリ内の layouts/index.html
は、サイトのトップページ用のテンプレートファイルです。
もし、ひとつの HTML ファイルだけで構成されるサイト (SPA: Single Page Application) を作成するのであれば、このファイルだけを作成すればよいことになります。
初期状態では何も記述されていないので、まずは手始めに、サイト名だけを表示するように修正してみましょう。
上記のようにすると、サイト情報を保持する .Site
変数の、Title
フィールドの値を出力することができます。
ここには、サイトの設定ファイル (config.toml
) の title
に設定した値が展開されます。
ここまで作成したら、このテーマを使ってサイトを表示してみましょう。
hugo
コマンドで使用するテーマを指定するには、-t <テーマ名>
オプションを使用します。
$ hugo server -t my-theme
上記のように Hugo サーバを立ち上げたら、http://localhost:1313/
にアクセスすれば、表示を確認できます。
トップページに全ページのリストを表示する
トップページのテンプレート (layouts/index.html
) 内で、.Data.Pages
変数を参照すると、すべてのページの情報 (Page 変数) を取得することができます。
この情報を range
を使ってループ処理すれば、すべてのページへのリンクを出力することができます。
各ページ用のレイアウトを作成する (layouts/_default/single.html)
リンク先の各ページは、layouts/_default/single.html
テンプレートファイルを元に生成されるので、このファイルもあらかじめ作成しておく必要があります。
このテンプレートの中では、Page 変数 のフィールドを参照することができます。
例えば、.Title
でページタイトル、.Content
でページ本文を参照できます。
各ページの内容は、content/
ディレクトリ内に下記のような感じで作成しておきます。
上記のようにレイアウトファイルとコンテンツを作成しておけば、各ページの内容が下記のように表示されるはずです。
あとは、同様にして layouts
ディレクトリ内のテンプレートコードを育てていくことで独自テーマが完成します。
Markdown ファイルから使える ショートコード なども独自テーマの付属品 (layouts/shortcodes
) として提供できます。