先々週あたりから、ポストの下に"Related Posts"という見出しを設定した。MarkdownのFrontmatterに
related:
- ../04/03_show_thumbnail
- ../05/07_ogp_to_card.md
と設定しておくと以下のように表示される。

PaperModテンプレートの使っていないpost_nav_links.htmlを流用した。
で、ここからが本題。
この related
をちまちま足していたんだけど、2,3個やってすぐに飽きた。自動化すべき。
- ポスト同士の類似度を計算する
- 類似度が高いポストをFrontmatterの
related
に挿入する
1つ目については、ちょっと前に作った類似度グラフから流用すれば良い1。2つ目も、スクリプト書けばいい。問題はいつこの計算をやるのか。
- メモの保存時に計算する
- メモの投稿直前に計算する
- メモがマージされた後計算される
1.はメモのトークン計算時にやっているが(参考メモ)、類似度の計算はそんな頻度で実行したくない。2.は単純に忘れそう2。というわけで3.を採用。Github ActionsでPull Requestを作成するbot、以下PR botを設定する。
まずは更新ファイルがあるかどうかをチェックする。
- name: Check for changes
id: git-check
run: |
git diff --exit-code || echo "changes=true" >> $GITHUB_OUTPUT
一応、Hugoでビルドできるかチェックしておく。このチェックは、PR botじゃなくて、PR毎のテストでやるべきかもしれない3。
- name: Verify Hugo build
if: steps.git-check.outputs.changes == 'true'
id: hugo-build
run: |
npm ci
echo "Building Hugo site to verify changes..."
if hugo --minify; then
echo "Hugo build successful"
echo "build_success=true" >> $GITHUB_OUTPUT
else
echo "Hugo build failed"
echo "build_success=false" >> $GITHUB_OUTPUT
exit 1
fi
PRは peter-evans/create-pull-request
を使うのが簡単。PRテンプレート本文はCopilotが生成した。
- name: Create Pull Request
if: steps.git-check.outputs.changes == 'true' && steps.hugo-build.outputs.build_success == 'true'
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "🤖 Update related posts automatically"
title: "🤖 Auto-update related posts"
body: |
## 🤖 Automated Related Posts Update
This PR automatically updates the related posts in markdown files based on content similarity.
### Changes:
- Updated related posts in frontmatter
- Refreshed similarity vectors
**Generated by:** GitHub Actions
**Triggered by:** Push to main branch
branch: auto-update-related-posts
delete-branch: true
draft: false
このステップを実行するには、対象のレポジトリのActionsにPRの権限を渡す必要がある。

Repo > Settings > Actions > General > Workflow permissions
こちらが結果

問題なさそうなら、簡単なテストを足してAuto Mergeでもいいかもしれない。ローカルにPullするのを忘れそうだけど。