Astro Starlightにコメント機能(Giscus)を導入する
AstroのドキュメントテンプレートStarlightに、GitHub Discussionsを利用したコメント機能(Giscus)を導入したので備忘録を残します。
Giscusとは
Giscusは、GitHub Discussionsを利用したコメントシステムです。
軽量で、GitHub認証を使用するため、スパム対策にも優れています。
前提条件
- Astro Starlightのウェブサイトがセットアップされていること
- GitHubアカウントを持っていること
- GitHub Discussionsが有効になっているリポジトリがあること
インストール手順
-
starlight-giscusのインストール
まず、starlight-giscusプラグインをインストールします。ターミナルで以下のコマンドを実行してください。
Terminal window pnpm add starlight-giscusTerminal window npm install starlight-giscusTerminal window yarn add starlight-giscus
-
Giscusアプリの設定
Giscus公式サイトで、あなたのリポジトリに対してGiscusを設定します。
必要な情報を入力し、スクリプトコードを生成してコピーしてください。
-
Astro設定ファイルの更新
astro.config.mjs
ファイルを開き、以下のように設定を追加します。astro.config.mjs import starlight from '@astrojs/starlight'import { defineConfig } from 'astro/config'import starlightGiscus from 'starlight-giscus'export default defineConfig({integrations: [starlight({plugins: [starlightGiscus({repo: 'data-repo',repoId: 'data-repo-id',category: 'data-category',categoryId: 'data-category-id'})],title: 'My Docs',}),],})repo
、repoId
、category
、categoryId
の値は、Giscusの設定で生成されたものに置き換えてください。上記4つは必須項目ですが、他にもカスタマイズオプションがあります。詳細は後述します。
カスタマイズオプション
starlight-giscusプラグインには、以下のようなカスタマイズオプションがあります:
mapping (string)
: ページとディスカッションのマッピング方法(ディスカッションのタイトルがどうなるか)pathname (デフォルト)
: ページのパス名URL
: ページのURL<title>
: ページのタイトルog:title
: ページのog:title
reactions (boolean)
: リアクション機能の有効/無効inputPosition (string)
: 返信フォームの位置bottom (デフォルト)
: コメントの下部top
: コメントの上部
theme (string)
: コメント欄のテーマpreferred_color_scheme (デフォルト)
: ユーザーのOSのテーマに合わせる- その他はStarlight-Giscusのドキュメントを参照
lazy (boolean)
: 遅延ロードの有効/無効
これらのオプションを使用して、コメント機能をサイトに合わせてカスタマイズできます。
特定ページでのコメント無効化
そのままだと、下記のようなコメントを表示しなくても良いトップページなどでコメントが表示されてしまいます。
コメントを表示したくないページがある場合は、frontmatterで制御できます。
設定手順
-
src/content.config.ts
ファイルでスキーマを拡張しますsrc/content.config.ts import { defineCollection, z } from 'astro:content'import { docsLoader } from '@astrojs/starlight/loaders'import { docsSchema } from '@astrojs/starlight/schema'export const collections = {docs: defineCollection({loader: docsLoader(),schema: docsSchema({extend: z.object({giscus: z.boolean().optional().default(true),}),}),}),} -
コメントを無効にしたいページのfrontmatterに
giscus: false
を追加します。---title: コメント不要なページgiscus: false---
starlight-blogプラグインを使っている場合
starlight-blogプラグインを使っている場合は、extend
の中でblogSchema(context)
を呼び出して、その後にgiscus
を追加してください。
また、blogのページやtagのページでgiscusを無効にしたいのでデフォルトをfalse
にします。
設定手順
-
src/content.config.ts
ファイルでスキーマを拡張しますsrc/content.config.ts import { defineCollection, z } from 'astro:content'import { docsLoader } from '@astrojs/starlight/loaders'import { docsSchema } from '@astrojs/starlight/schema'import { blogSchema } from 'starlight-blog/schema';export const collections = {docs: defineCollection({loader: docsLoader(),schema: docsSchema({extend: (context) => blogSchema(context).extend({giscus: z.boolean().optional().default(false)})}),}),} -
コメントを有効にしたいページのfrontmatterに
giscus: true
を追加します。---title: コメントを入れたいページdate: 2025-03-17giscus: true---