フロントマター
Starlightでは、フロントマターに値を設定することで、MarkdownとMDXのページを個別にカスタマイズできます。たとえば通常のページでは、title
とdescription
フィールドを設定します。
---title: このプロジェクトについてdescription: 私が取り組んでいるプロジェクトについてもっと知る。---
概要ページへようこそ!
フロントマターのフィールド
title
(必須)
type: string
すべてのページにタイトルを指定する必要があります。これは、ページの上部、ブラウザのタブ、およびページのメタデータとして表示されます。
description
type: string
ページに関する説明文はページのメタデータとして使用され、また検索エンジンやソーシャルメディアのプレビューでも使用されます。
editUrl
type: string | boolean
グローバルの editLink
設定を上書きします。false
を設定して特定のページの「ページを編集」リンクを無効にするか、あるいはこのページのコンテンツを編集する代替URLを指定します。
head
type: HeadConfig[]
フロントマターのhead
フィールドを使用して、ページの<head>
にタグを追加できます。これにより、カスタムスタイル、メタデータ、またはその他のタグを単一のページに追加できます。グローバルのhead
オプションと同様です。
---title: 私たちについてhead: # カスタム<title>タグを使う - tag: title content: カスタムのタイトル---
tableOfContents
type: false | { minHeadingLevel?: number; maxHeadingLevel?: number; }
グローバルのtableOfContents
設定を上書きします。表示したい見出しのレベルをカスタマイズするか、あるいはfalse
に設定して目次を非表示とします。
---title: 目次にH2のみを表示するページtableOfContents: minHeadingLevel: 2 maxHeadingLevel: 2---
---title: 目次のないページtableOfContents: false---
template
type: 'doc' | 'splash'
default: 'doc'
ページのレイアウトテンプレートを設定します。ページはデフォルトで'doc'
レイアウトを使用します。ランディングページ向けにサイドバーのない幅広のレイアウトを使用するには、'splash'
を設定します。
hero
type: HeroConfig
ヒーローコンポーネントをページの上部に追加します。template: splash
との相性が良いでしょう。
リポジトリからの画像の読み込みなど、よく使われるオプションの設定例は以下となります。
---title: 私のホームページtemplate: splashhero: title: '私のプロジェクト: 最高品質を、最速で' tagline: 瞬く間に月まで一往復。 image: alt: キラリと光る、鮮やかなロゴ file: ../../assets/logo.png actions: - text: もっと知りたい link: /getting-started/ icon: right-arrow variant: primary - text: GitHubで見る link: https://github.com/astronaut/my-project icon: external---
ライトモードとダークモードで、異なるバージョンのヒーロー画像を表示できます。
---hero: image: alt: キラリと光る、鮮やかなロゴ dark: ../../assets/logo-dark.png light: ../../assets/logo-light.png---
HeroConfig
interface HeroConfig { title?: string; tagline?: string; image?: | { // リポジトリ内の画像への相対パス。 file: string; // この画像を支援技術からアクセス可能にするための代替テキスト。 alt?: string; } | { // ダークモードで使用する、リポジトリ内の画像への相対パス。 dark: string; // ライトモードで使用する、リポジトリ内の画像への相対パス。 light: string; // この画像を支援技術からアクセス可能にするための代替テキスト。 alt?: string; } | { // 画像のスロットに使用する生のHTML。 // カスタムの`<img>`タグやインラインの`<svg>`などが使えます。 html: string; }; actions?: Array<{ text: string; link: string; variant: 'primary' | 'secondary' | 'minimal'; icon: string; }>;}
banner
type: { content: string }
ページの上部にお知らせ用のバナーを表示します。
content
の値には、リンクやその他のコンテンツ用のHTMLを含められます。たとえば以下のページでは、example.com
へのリンクを含むバナーを表示しています。
---title: バナーを含むページbanner: content: | 素晴らしいサイトをリリースしました! <a href="https://example.com">確認してみてください</a>---
lastUpdated
type: Date | boolean
グローバルのlastUpdated
オプションを上書きします。日付を指定する場合は有効なYAMLタイムスタンプである必要があり、ページのGit履歴に保存されている日付を上書きします。
---title: 最終更新日をカスタマイズしたページlastUpdated: 2022-08-09---
prev
type: boolean | string | { link?: string; label?: string }
グローバルのpagination
オプションを上書きします。文字列を指定すると生成されるリンクテキストが置き換えられ、オブジェクトを指定するとリンクとテキストの両方を上書きできます。
---# 前のページへのリンクを非表示にするprev: false---
---# 前のページへのリンクテキストを上書きするprev: チュートリアルを続ける---
---# 前のページへのリンクとテキストを上書きするprev: link: /unrelated-page/ label: その他のページをチェックする---
next
type: boolean | string | { link?: string; label?: string }
次のページへのリンクに対して、prev
と同様の設定ができます。
---# 次のページへのリンクを非表示にするnext: false---
pagefind
type: boolean
default: true
ページをPagefindの検索インデックスに含めるかどうかを設定します。ページを検索結果から除外するには、false
に設定します。
---# このページを検索インデックスから外すpagefind: false---
sidebar
type: SidebarConfig
自動生成されるリンクのグループを使用している際に、サイドバーにページをどのように表示するかを設定します。
SidebarConfig
interface SidebarConfig { label?: string; order?: number; hidden?: boolean; badge?: string | BadgeConfig; attrs?: Record<string, string | number | boolean | undefined>;}
label
type: string
default: ページのtitle
自動生成されるリンクのグループ内に表示される、ページのサイドバー上でのラベルを設定します。
---title: このプロジェクトについてsidebar: label: 概要---
order
type: number
自動生成されるリンクのグループをソートする際の、このページの順番を設定します。小さな数値ほどリンクグループの上部に表示されます。
---title: 最初に表示するページsidebar: order: 1---
hidden
type: boolean
default: false
自動生成されるサイドバーのグループにこのページを含めないようにします。
---title: 自動生成されるサイドバーで非表示にするページsidebar: hidden: true---
badge
type: string | BadgeConfig
自動生成されるリンクのグループに表示されたとき、サイドバーのページにバッジを追加します。文字列を使用すると、バッジはデフォルトのアクセントカラーで表示されます。オプションで、text
とvariant
フィールドをもつBadgeConfig
オブジェクトを渡してバッジをカスタマイズできます。
---title: バッジを含むページsidebar: # サイトのアクセントカラーに合わせたデフォルトのバリアントを使用します badge: New---
---title: バッジを含むページsidebar: badge: text: 実験的 variant: caution---
attrs
type: Record<string, string | number | boolean | undefined>
自動生成されるリンクのグループ内に表示されるサイドバーのページリンクに追加するHTML属性。
---title: 新しいタブで開くページsidebar: # 新しいタブでページを開きます attrs: target: _blank---
フロントマタースキーマをカスタマイズする
Starlightのdocs
コンテンツコレクションのフロントマタースキーマは、docsSchema()
ヘルパーを使用してsrc/content/config.ts
で設定されています。
import { defineCollection } from 'astro:content';import { docsSchema } from '@astrojs/starlight/schema';
export const collections = { docs: defineCollection({ schema: docsSchema() }),};
コンテンツコレクションのスキーマについて詳しくは、Astroドキュメントの「コレクションスキーマの定義」を参照してください。
docsSchema()
は以下のオプションを受け取ります。
extend
type: ZodスキーマまたはZodスキーマを返す関数
default: z.object({})
docsSchema()
のオプションでextend
を設定すると、Starlightのスキーマを追加のフィールドで拡張できます。値はZodスキーマである必要があります。
次の例では、description
を必須にするために厳し目の型を指定し、さらにオプションのcategory
フィールドを新規追加しています。
import { defineCollection, z } from 'astro:content';import { docsSchema } from '@astrojs/starlight/schema';
export const collections = { docs: defineCollection({ schema: docsSchema({ extend: z.object({ // 組み込みのフィールドをオプションから必須に変更します。 description: z.string(), // 新しいフィールドをスキーマに追加します。 category: z.enum(['tutorial', 'guide', 'reference']).optional(), }), }), }),};
Astroのimage()
ヘルパーを利用するには、拡張したスキーマを返す関数を使用します。
import { defineCollection, z } from 'astro:content';import { docsSchema } from '@astrojs/starlight/schema';
export const collections = { docs: defineCollection({ schema: docsSchema({ extend: ({ image }) => { return z.object({ // ローカルの画像へと解決されるフィールドを追加します。 cover: image(), }); }, }), }),};