15KB
公開:

2025/11/24

 Notionでリストをランダムにソートする。

 Formulaプロパティを追加して、
Edit property > Edit formulaで以下のような感じのを追加すれば良い。

/* notion formula */
lets(
	/* 分単位のシード値 (10^8 % 10^6) */
	/* notionのtimestampは分未満が死んでる */
	MinuteStep, floor(timestamp(now()) / 60000) % 1000003,

	/* ページIDを数値化(末尾8文字=32bit) */
	/* Based on: https://note.com/necoko168/n/nb3240db18430 */
	PageSeed, ("0x" + id().substring(24)).toNumber(),

	/* 線形合同法 (10^(5+7) % 10^9) */
	TimeShuffler, (MinuteStep * 15485863 + 37) % 2038074743,

	/* 作成 (((10^9 + 10^8) * 10^4) % 10^5) */
	((PageSeed + TimeShuffler) * 48611) % 100000
)

 コメントにあるように、こちらの記事を参照した。この方の他の記事も詳しいので、いくつか読んでおいたらすんなり書けた。乱数の作り方はAIに質問したけど。
 久しぶりにNotionいじっていて、なんかランダムにソートする新たな方法でてないかな〜と"Notion random"で検索したら、https://note.com/necoko168/n/n7264399f1e19のページがトップに来て、こんなのあるなら実装余裕じゃんwとか言っていたら、timestampが分単位でしか取れなかったり、lnとかeはあるのにsinは無かったりして、手間取った。上ので数千件までは対応できるはず。

 数年前よく使っていたデータベースが大きめなので、そこで試してみるとこんな感じ。
降順に乱数でランダムソートしたデータベース
 ちゃんとランダムになっていれば、3500件くらいあるのかな。
 と思ったら2988件だった。結構ズレてる。まぁ良いか。学がないのでこれが十分ランダムなのかよくわかっていない。(TimeShufflerの下の方がランダムなら良いはずなので、ぱっと見のランダムっぽさはある。最後48611かけてるしこんなに桁要らなそう。むしろ最終的な桁はもうちょっとあっても良い気がするし、増やしても大丈夫な設計になっている気がする。最近Notionあまり使っていないので全く問題にならないが。)