hugoのshuffleを使って記事の並び順をランダムにする方法

更新:2019.4.10

目次

HUGOで関連する記事

ブログの記事に関連する記事の一覧を載せていることがあります。

一時期、最近書いた記事を一覧表示していましたが、古い記事が埋没してしまいそうな気がしたので、同じカテゴリ内の記事をランダムに表示するようにしてみました。

効果としては、人気の記事から過去に書いた記事も見てもらえるようになるといいなと思っています。

hugoにはshuffleという関数があります。これを利用すると実現できそうです。

shuffleの構文

shuffle COLLECTION

shuffleに.Site.Pagesなどのコレクションを渡してあげると、中のデータを文字とおりシャッフルしてくれるようです。

実際のコード

このサイトではすでに、関連する記事の部分をshuffleで並び替えていますので、コードを紹介します。

<section>
    {{ if ne .Section "" }}
    <h1><a href="/{{ .Section }}/">{{ with .Site.GetPage "section" .Section }}{{ .Title }}{{ end }}</a>関連記事</h1>
    {{ range first 10 ( shuffle ( where .Site.Pages "Section" .Section ) ) }}
    {{ if .IsPage}}
    <hr>
    <div>
        <a href="{{.Permalink}}">{{ .Title }}</a>
    </div>
    {{ end }}
    {{ end }}
    {{ end }}
</section>

ポイントとなる箇所は、次のコードです。

shuffle ( where .Site.Pages "Section" .Section )

.Site.Pages"Secstion"が現在表示しているページの.Sectionと同じページデータを取得して、shuffle()でランダムに並び替えています。

まとめ

実際の効果は最近変更したばかりですので、よくわかりませんが、内部リンクが行き渡るようになると思います。

shuffleの内容ですが、もしかすると偏り出ているかもしれませんが、厳密にやろうとするとhugoの機能だけでは難しい気がしますので、必要に迫られるまでやらないです。

あと、関連する記事の並び順をランダムにしても、HUGOは静的ページ生成エンジンなので表示するたびに一覧の内容が切り替わることにはならないので注意です。 記事の生成タイミングでランダムになるだけです。

短い間隔で記事を生成してサーバに上げていけば、ときどき変わるという感じにはできます。

HUGO関連記事










これからブログなどのサイトを作りたいと思っている人は、お名前.comでのドメイン取得がオススメです。

■□━━ 急げ、ドメインは早い者勝ち! ━━□■
     ■お名前.com

アマゾンの2019年本屋大賞一覧

そして、バトンは渡された
ひと
ベルリンは晴れているか
熱帯
ある男

楽天市場のおすすめ商品一覧

お金2.0 新しい経済のルールと生き方 [ 佐藤航陽 ]
全部レンチン!やせるおかず 作りおき 時短、手間なし、失敗なし
「読む力」と「地頭力」がいっきに身につく 東大読書 [ 西岡 壱誠 ]