kapieciiのブログ

日々学んだことを残しておくためのブログです。このブログはGoogle Analyticsを利用しています。

Golang製の静的サイトジェネレーター「HUGO」を試してみた

f:id:kapiecii:20191219233824p:plain

久しぶりに会った先輩が、静的サイトジェネレーターでブログをやっていました。
「静的サイトジェネレーターでブログ書くのも結構いいよ」とおすすめしてもらったので、以前から気になっていたGolang製のHUGOを触ってみました。

目次

公式ドキュメント

gohugo.io

環境

ubuntu 16.04

インストール

公式ドキュメントに沿って進めます。

gohugo.io

$ wget https://github.com/gohugoio/hugo/releases/download/v0.61.0/hugo_0.61.0_Linux-64bit.deb
$ sudo dpkg -i hugo_0.61.0_Linux-64bit.deb 
$ hugo version
Hugo Static Site Generator v0.61.0-9B445B9D linux/amd64 BuildDate: 2019-12-11T08:27:34Z

プロジェクトを作成

$ hugo new site quickstart
Congratulations! Your new Hugo site is created in /XXX/quickstart.

Just a few more steps and you're ready to go:

1. Download a theme into the same-named folder.
   Choose a theme from https://themes.gohugo.io/ or
   create your own with the "hugo new theme <THEMENAME>" command.
2. Perhaps you want to add some content. You can add single files
   with "hugo new <SECTIONNAME>/<FILENAME>.<FORMAT>".
3. Start the built-in live server via "hugo server".

Visit https://gohugo.io/ for quickstart guide and full documentation.

テーマを追加

$ cd quickstart/
$ git init
$ git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke
$ echo 'theme = "ananke"' >> config.toml

この時点で、ディレクトリ構成はこのようになっていました。

$ tree -L 3
.
├── archetypes
│   └── default.md
├── config.toml
├── content
├── data
├── layouts
├── static
└── themes
    └── ananke
        ├── archetypes
        ├── CHANGELOG.md
        ├── data
        ├── exampleSite
        ├── i18n
        ├── images
        ├── layouts
        ├── LICENSE.md
        ├── package.json
        ├── package-lock.json
        ├── README.md
        ├── src
        ├── stackbit.yaml
        ├── static
        └── theme.toml

記事を作成

$ hugo new posts/my-first-post.md
$ cat content/posts/my-first-post.md 
---
title: "My First Post"
date: 2019-12-19T19:51:49+09:00
draft: true
---

# test title

* test
    * test

## test

¥```shell
$ echo "hello hugo!"
¥```

ブログをMarkdownで書いている都合上、「¥」を挿入しています。

HUGOサーバ起動

$ hugo server -D

                   | EN  
+------------------+----+
  Pages            | 10  
  Paginator pages  |  0  
  Non-page files   |  0  
  Static files     |  3  
  Processed images |  0  
  Aliases          |  1  
  Sitemaps         |  1  
  Cleaned          |  0  

Built in 24 ms
Watching for changes in /XXX/quickstart/{archetypes,content,data,layouts,static,themes}
Watching for config changes in /XXX/quickstart/config.toml
Environment: "development"
Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop

http://localhost:1313/ にアクセスします。
記事が表示されました。

f:id:kapiecii:20191219234501p:plain

Configファイル編集

config.tomlを編集します。

$ cat config.toml 
languageCode = "ja"
title = "HUGOテスト"
theme = "ananke"

『baseURL = "https://example.org/"』の行は削除しています。

参照元

Replace the title above with something more personal. Also, if you already have a domain ready, set the baseURL. Note that this value is not needed when running the local development server.

languageCodeの部分は、jaにしてみました。
日本語でメニューなどを表示させるには、この部分の変更だけではダメで、別途設定が必要のようです。
後述するこちら↓のテーマで、多言語設定を扱っているので、参考にできそうです。

Hugo Theme Zzo | Hugo Themes

静的ページをビルドする

静的ページをビルドします。

$ hugo -D

                   | EN  
+------------------+----+
  Pages            | 10  
  Paginator pages  |  0  
  Non-page files   |  0  
  Static files     |  3  
  Processed images |  0  
  Aliases          |  1  
  Sitemaps         |  1  
  Cleaned          |  0  

Total in 95 ms

出力先はこのようになりました。

$ tree -L 3 ./public/
./public/
├── 404.html
├── categories
│   ├── index.html
│   └── index.xml
├── dist
│   ├── css
│   │   └── app.d98f2eb6bcd1eaedb7edf166bd16af26.css
│   └── js
│       └── app.3fc0f988d21662902933.js
├── images
│   └── gohugo-default-sample-hero-image.jpg
├── index.html
├── index.xml
├── posts
│   ├── index.html
│   ├── index.xml
│   ├── my-first-post
│   │   └── index.html
│   └── page
│       └── 1
├── sitemap.xml
└── tags
    ├── index.html
    └── index.xml

10 directories, 14 files

静的ファイルの表示を試してみます。
今回はPHPのビルトインWebサーバを使います。

$ cd public/
$ php -S localhost:8000
PHP 7.0.33-0ubuntu0.16.04.7 Development Server started at Thu Dec 19 20:09:03 2019
Listening on http://localhost:8000

kapiecii.hatenablog.com

http://localhost:8000/ を確認します。 静的ページが表示されました。

f:id:kapiecii:20191219235054p:plain

他のテーマも試す

HUGOにはたくさんのテーマがあるので、他のテーマも試してみようと思います。

Complete List | Hugo Themes

今回はブログに適していそうな、こちらのテーマを試してみます。 こちらも、ドキュメントの手順に沿って進めます。

themes.gohugo.io

テーマ追加

$ git submodule add https://github.com/zzossig/hugo-theme-zzo.git themes/zzo

更新

$ git submodule update --remote --merge

ディレクトリ作成

$ mkdir config
$ mkdir config/_default

ディレクトリ以下に、設定ファイルを作成します。

f:id:kapiecii:20191219235312p:plain

HUGOサーバを起動

エラーがでます。

$ hugo server -D
Building sites ... ERROR 2019/12/19 20:53:10 Transformation failed: TOCSS: failed to transform "main_parsed.scss" (text/x-scss): this feature is not available in your current Hugo version, see https://goo.gl/YMrWcn for more information
WARN 2019/12/19 20:53:10 found no layout file for "webmanifest" for "home": You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
Built in 85 ms
Error: Error building site: logged 1 error(s)

エラーに書かれているこちらのリンクを確認したところ、「"SCSS or SASS to CSS" をしている場合はextendedがついてるバージョンのHUGOを使う必要がある」ようです。

gohugo.io

「extend」がついているHUGOをダウンロードしてインストールします。

$ wget https://github.com/gohugoio/hugo/releases/download/v0.61.0/hugo_extended_0.61.0_Linux-64bit.deb
$ sudo dpkg -i hugo_extended_0.61.0_Linux-64bit.deb
$ hugo version
Hugo Static Site Generator v0.61.0-9B445B9D/extended linux/amd64 BuildDate: 2019-12-11T08:33:29Z

もう一度起動します。

$ hugo server -D

無事に動きました。

f:id:kapiecii:20191219235530p:plain

Archiveなど、いくつかのページは別途作成してあげる必要があるようです。

f:id:kapiecii:20191219235604p:plain

Archiveページを作ってみます。

$ mkdir content/archive
$ hugo new archive/archive-test.md
$ cat content/archive/archive-test.md 
---
title: "Archive Test"
date: 2019-12-19T21:05:29+09:00
description: 
type: archive
tags:
- test
- test2
series:
-
categories:
- testcategory
- test2category
---

# archive

[toc]

* this is a archive page.

## menu1

* aaa

### menu2

* bbb

Archivesページが表示されました。
想定した表示内容と違いますね。もう一度設定を見直す必要がありそうです。

f:id:kapiecii:20191219235717p:plain

画面の右側に目次機能があります。

f:id:kapiecii:20191219235755p:plain

Tagsのページもできていました。

f:id:kapiecii:20191219235828p:plain

さいごに

HUGOを使ってみました。
ざざっと試したので、使い方が間違っている箇所があるかと思います。
少し触っただけですが、テーマによって色々な機能があり、作り込みがいがありそうですね。
Python製のPelicanも気になっているので、次はPelicanを試してみようと思います。

kapieciiのブログについてお問い合わせがある場合、下記のフォームからご連絡をお願い致します。
お問い合わせはこちら