Hugoポストの作成方法

ここでは、Hugoで新しいポストを作成する方法について説明します。

新しいポストファイルを作成する

Hugoで公開するWebサイトのポストは、contentディレクトリにMarkdownファイルとして作成する(例: sample.md)。ポストファイルは空のテキストファイルから作成することもできるが、hugo newコマンドを使うと、ポスト形式ファイル(archetypes/default.md)を基にMarkdownファイルを自動生成できる。

ポストファイル(Markdownファイル)を作成する。

% hugo new sample.md
Content "/Users/user/my-site/content/sample.md" created

上記のように実行すると、contentディレクトリにsample.mdファイルが生成される。作成されたファイルの先頭には、次のようなFront matterと呼ばれるヘッダーが書かれている。このヘッダーはarchetypes/default.mdを基に自動生成されたものである。

content/sample.md

---
title: "Sample"
date: 2023-05-05T23:50:09+09:00
draft: true
---

その後、タイトル(title)を好きなように書き換え、Front matterヘッダーの後に記事本文を書いていけばよい。公開できる状態まで書けたら、ヘッダー部分のdraft: true行を削除する。

Archetypes

ここで基になるarchetypes/default.mdファイルを見てみよう。

archetypes/default.md

---
title: {{ replace .TranslationBaseName "-" " " | title }}"
date: {{ .Date }}
draft: true
---

titleフィールドにはhugo newコマンドで指定した名前が自動的に入り、dateフィールドには現在時刻が自動的に入る。このファイルの内容を基にポストファイルが作成されていることが分かる。

ポスト作成と同時にエディターで編集を始める

hugo newコマンドでポストファイルを作成するときに--editorオプションを指定すると、ポストファイルの生成と同時に指定したエディターでファイルを開ける。

例: 記事ファイルを作成してvimで開く

% hugo new sample.md --editor vim

初めて実行すると、次のようなエラーが出ることがある。

% hugo new sample.md --editor vi
Content "/Users/user/hugo-tutorial/my-site/content/sample.md" created
Editing "/Users/user/hugo-tutorial/my-site/content/sample.md" with "vi" ...
Error: access denied: "vi" is not whitelisted in policy "security.exec.allow"; the current security configuration is:

[security]
  enableInlineShortcodes = false

  [security.exec]
    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$']
    osEnv = ['(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM)$']

  [security.funcs]
    getenv = ['^HUGO_']

  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']

表示されたメッセージのとおり、基本ポリシーをそのままコピーしてconfig.tomlに入れ、allow配列の項目に'^vim$'を追加する。

[security]
  enableInlineShortcodes = false

  [security.exec]
    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$', '^vim$']
    osEnv = ['(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM)$']

  [security.funcs]
    getenv = ['^HUGO_']

  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']

その後もう一度試すと実行できるはずである。ただし、ポストファイルが先に作成されてからエディターを開くため、既にファイルがあるというメッセージが出る場合がある。

% hugo new sample.md --editor vim
Error: /Users/user/hugo-tutorial/my-site/content/sample.md already exists

その場合は既存のファイルを削除してから再実行すればよい。