JavaScriptに関するお知らせ

SINCE2019
ホーム > PaylaodCMSのdraft=falseは下書きを除外する訳ではない

PaylaodCMSのdraft=falseは下書きを除外する訳ではない


罠すぎる。ちなみに初期値はfalse

特に何も考えず最新のレコードを取得するとしよう。こうだと思うじゃん?

現在のレコードの状態draft=truedraft=false
公開普通に取得普通に取得
非公開普通に取得取得できない

違う。正解はこう。

現在のレコードの状態draft=truedraft=false (初期値)
公開普通に取得普通に取得
非公開普通に取得過去に公開されていた瞬間があればそれを取得

もう明らかにやばい。

  • draftをfalseにしているのにデータが取れてしまう
  • さらにその取れてしまうデータは(最新を指定していても)最新じゃない
  • これらを引き起こすdraft=falseは初期設定

激しくやばい。

公式にもこの挙動は書いてない。おそらくどっかにはあるんだろうがぱっと見には無い。

Drafts | Documentation | Payload

困るケース

直で非公開にしたデータはちゃんと隠れるのに、 一度公開したデータは非公開にしても見え続ける。やばい。

対策

draftの存在は全て忘れて{_status}のキーで絞り込むしかない。なおこのキーはdraft, publishedの2値かと思いきやversions: { drafts: true }を指定していないコレクションについてはundefinedになる。ちなみにdraft, publishでもなくdrafted, publishedでもない。罠に罠を重ねないで。

結論

公開したいものが公開されていなかった、も良くないが逆はもっとやばい。どうかお願いだからやばい方に設計を寄せないでほしい。以上。



Cloudflare Tunnelは絶対もっと注目されていい
PREV
2026-04-23
Cloudflare Tunnelは絶対もっと注目されていい