Skip to content

Astro Starlightのスキーマはextendで拡張可能

This content is a draft and will not be included in production builds.

Starlightインテグレーションのコンテンツは必ず content/docs/ 以下に置かなければならない制約がある。それは手動セットアップ | Starlightに書いてある。

Starlightのすべてのページをサブパスに追加するには、ドキュメントのコンテンツをsrc/content/docs/ のサブディレクトリに配置します。たとえば、Starlightのページがすべて /guides/ で始まる場合は、コンテンツを src/content/docs/guides/ ディレクトリに追加します。

将来的には、src/content/docs/ 内にネストされたディレクトリを必要としないよう、このユースケースに対するサポートを改善する予定です。

Obsidianのノートを公開するとき、コンテンツコレクションの型をどうするか。ノートで使っているフロントマターの型と、Starlightインテグレーションが用意している型は(一部は重複するが)異なっている。それをどうやって表現するのか。

他のコレクションが存在しないなら、extend を使えば任意のパラメータを追加したり、既存のルールを上書きできる。

src/content/config.ts
import { z, defineCollection } from 'astro:content';
import { docsSchema } from '@astrojs/starlight/schema';
export const collections = {
docs: defineCollection({
schema: docsSchema({
extend: z.object({
tags: z.array(z.string()).nullable(),
draft: z.boolean(),
kind: z.string(),
}),
}),
}),
};