tDiaryの日記を静的サイトジェネレータで表示したい (2)
前回まででtDiaryの日記をHTML形式でエクスポートできるようになった。 静的サイトジェネレータで取り回ししやすいように、日単位ではなくセクション単位でHTMLを出力している。
ここで悩ましいのが、旧サイトからのリダイレクト設定。 このサイトでも初期の日記は、1日に複数の記事を書いていた。 例えば2008年3月2日の日記はこんな感じ。
- /diary/20080302.html#p01 … 暗号化と署名は対象じゃないよという話
- /diary/20080302.html#p02 … 署名はハッシュ関数やMACの延長で説明したほうがいいのでは?
- /diary/20080302.html#p03 … ツッコミへのお返事
セクション単位でHTMLを分けたことにより、移行先のURLはそれぞれ別になる。
- /diary/20080302.html#p01 → /posts/20080302/p01/
- /diary/20080302.html#p02 → /posts/20080302/p02/
- /diary/20080302.html#p03 → /posts/20080302/p03/
ここで問題になるのは、元のページは 20080302.html という1つであり、セクションアンカー (#p01, #p02,#p03) 単位ではリダイレクトできないこと。
しばらく悩んだあげく、セクションごとのページとは別に、日のページも用意することにした。 たしか、はてなダイアリーも同じ構成だったはず。
- /posts/20080302/p01/ … 2008年3月2日の1つ目の記事
- /posts/20080302/p02/ … 2008年3月2日の2つ目の記事
- /posts/20080302/p03/ … 2008年3月2日の3つ目の記事
- /posts/20080302/ … 上記3つの記事を含むページ
以前のページからリダイレクトするときに、いちど日のページを経由する手間はあるが、仕方ない。
hugoだと、以下のようにコンテンツとテンプレート (layouts) を作ることで、日のページを表示できる。
content/posts/20080302/_index.md
---
layout: "day"
aliases:
- "/diary/20080302.html"
---
layouts/section/day.html
{{- define "content" -}}
<div class="page home" posts>
<h1>{{ .Date.Format "2006-01-02" }}の日記</h1>
{{- range .RegularPages -}}
{{- .Render "summary" -}}
{{ end }}
</div>
{{- end -}}
これでtDiaryの日記を静的サイトジェネレータで表示する目処がついたかな。