Hugo Archetypes을 이용한 글 Template 사용하기

Hugo에서는 content management를 위해 archetypes 라는 template file을 제공하고 있습니다. 이는 hugo new 로 새로운 글을 만들 때 자동으로 글에 필요한 정보를 작성해주며, 종류에 따라서 커스텀하게 작성할 수 있도록 제공해주는 기능입니다.

이를 잘 활용한다면 글 쓰는 시간에 필요한 불필요한 작업이나 놓칠 수 있는 부분들을 메꿔졸 수 있습니다. 그럼 빠르게 살펴보죠.

Archetypes

Archetypes는 template file 입니다. 전체적으로 기존 글과 동일한 포맷을 가지며 hugo new 시 --kind 플래그를 통해 원해는 template을 선택하여 생성할 수 있습니다.

우선 Default template을 하나 봅시다.

---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
last_modified_at: {{ .Date }}
image:
tags:
- none
---

저는 date, lastmod, image, tags 정도만 자주 사용하기 때문에 해당 값으로 tempate를 만들었습니다. 별도의 템플릿이 사용되지 않는다면 hugo new 시 사용하게 될 템플릿이 됩니다. 당연히 hugo로 빌드하기 때문에 Go Template 문법을 사용할 수 있으며, 위 템플릿 같은 경우 파일 이름을 기반으로 title을 만들고, 현재 날짜를 반영하도록 되어 있습니다.

with --kind command

제가 글 시작에 이야기했듯이 hugo는 --kind 플래그를 사용하여 지정한 템플릿을 사용할 수 있습니다. 다른 템플릿을 사용하기 위해 하나 더 만들어봅시다. 제 블로그에는 content 하위에 여러가지 디렉토리로 나눠서 구성하고 있는데, 이 중 page 디렉토리에 사용할 template을 하나를 만들어 봅시다.

---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
last_modified_at: {{ .Date }}
image:
tags:
- none
comments: false
slug:
- none
---

This is page!!

이렇게 헤더 부분에 몇개 더 추가하고 본문도 미리 작성해둘 수 있습니다. archetypes 디렉토리를 보면 위 내용으로 page.md 파일 하나 만들어둔 상태입니다.

archetypes
├── default.md
└── page.md

이제 hugo new 시 --kind 플래그를 통해 archetypes에 정의된 파일 이름을 인자값으로 넘겨주면 해당 template을 사용하여 글을 생성할 수 있게 됩니다.

hugo new content/page/1234.md --kind page
content/page/1234.md created

이렇게 생성한 content/page/1234.md 파일을 열어보면 우리가 위에서 만든 Template으로 생성되는 것을 볼 수 있습니다.

---
title: "1234"
date: 2021-08-15T16:15:06+09:00
last_modified_at: 2021-08-15T16:15:06+09:00
image:
tags:
- none
comments: false
slug:
- none
---

This is page!!

Conclusion

Jekyll에서 이러한 기능이 동일하게 있는지는 모르겠지만, 제가 Jekyll을 사용할 당시에는 별도의 template.md 파일들을 만들고 카피해서 사용했던 기억이 나네요 (물론 post는 Atom에서 생성했지만요 😁)

Hugo에선 이렇게 archetypes을 이용해서 빠르게 글을 생성할 수 있고, 더불어 Go Template 문법도 사용할 수 있기 때문에 글 생성 내부 내용에도 어느정도 자동화가 가능해 정말 좋은 기능이라는 생각이 듭니다. 아마 자주 사용하게 될 것 같네요 :D

References

  • https://gohugo.io/content-management/archetypes/