Adding Draft Feature

calendar_today 2026-01-25
Adding Draft Feature

ブログにドラフト機能を追加します。

Astro では frontmatter で draft: true を設定した上で、記事のリスト作成時にこれを考慮するようにします。

// src/pages/blog/index.astro
const posts = (await getCollection('blog'))
	.filter((post) => {
		// Show drafts in DEV mode, hide in PROD
		if (import.meta.env.DEV) return true;
		return !post.data.draft;
	})
	.map(getPostMetadata)
	.sort(sortPosts);

// src/utils/blog.ts
export function sortPosts(
	a: { data: { pubDate?: Date } },
	b: { data: { pubDate?: Date } },
) {
	const aDate = a.data.pubDate?.valueOf();
	const bDate = b.data.pubDate?.valueOf();

	if (aDate === undefined && bDate === undefined) return 0;
	if (aDate === undefined) return -1;
	if (bDate === undefined) return 1;

	return bDate - aDate;
}

また、プレビュー時にドラフトであることがわかるように表示します。

// src/pages/blog/index.astro
{
	post.data.draft && (
		<div class="absolute top-4 right-4 z-20 bg-yellow-500 text-black text-xs font-bold px-2 py-1 rounded shadow-md">
			DRAFT
		</div>
	);
}

次のファイルにも同様の変更を行いました。

  • src\pages\blog[…slug].astro
  • src\pages\tags[tag].astro
label Tags: #Astro