Hugoブログ記事作成時にランダムな文字列を挿入するようにした
2022-12-16はじめに
hugo new site ...
実行後の archetypes/default.md はこうなっている。
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---
これだと都合がよくないからブログ運営者は色々と手を加えていくことになる。
今回は任意の文字数のランダムな文字列を入れる必要があったので、そのような実装をした。
その手順のメモ。
暫定版
{{ $v := newScratch }}
{{- $v.Set "str" "" -}}
{{- $STRARR := split "0123456789abcdefghijklmnopqrstuvwxyz" "" -}}
{{- range $i := seq 5 -}}
{{- $strarr := shuffle $STRARR -}}
{{- $v.Add "str" (index $strarr 0) -}}
{{- end -}}
{{- $ID := $v.Get "str" -}}
これを
id: "{{- $ID -}}"
aliases:
- "i/{{- $ID -}}"
slug: "{{- $ID -}}"
と利用すると、こういう文字列が挿入される。
id: "ipo9a"
aliases:
- "i/ipo9a"
slug: "ipo9a"
前提
要件としては、こんな感じ。
- 小文字の英数字(0123456789abcdefghijklmnopqrstuvwxyz)を
- 重複ありで
- 任意の文字数をランダムに選り出したい。
- 複数箇所に挿入するので、変数とする。
先行事例としては、Hugo のテンプレートやショートコードでランダムな文字列を生成する - まくまくHugoノートがあるので、こちらのコードを参考にした。大きな違いとしてはまくまく Hugo ノート - 天才まくまくノートでは文字は重複しないが、こちらでは重複も可能にしたいという点がある。
実装
といっても、やっていることはシンプルで
- 文字列(0123456789abcdefghijklmnopqrstuvwxyz)を配列として設定する。
- 変数を設定する。
range
文でまわす。この場合は5回繰り返しを行っている。- 配列をシャッフルする。
- シャッフルした配列の一番最初の要素を変数に加えていく。
たとえば、文字列に大文字を加えたら大文字に選択されるようになるし、range
文の数字を変更したら文字数を変えられる。
おわりに
これまで手で入力した部分を考えなくて済むようになった。ランダムな文字列を毎回入れるのって地味に面倒だったんだよね。
もうちょっとうまいやり方がありそうだけど、とりあえず目的は達成したので、後日余力がある時にリファクタリングを実施したい。