AstroのドキュメントテンプレートStarlightに、GitHub Discussionsを利用したコメント機能(Giscus)を導入したので備忘録を残します。
Giscusとは
Giscusは、GitHub Discussionsを利用したコメントシステムです。
軽量で、GitHub認証を使用するため、スパム対策にも優れています。
前提条件
- Astro Starlightのウェブサイトがセットアップされていること
- GitHubアカウントを持っていること
- GitHub Discussionsが有効になっているリポジトリがあること
インストール手順
-
starlight-giscusのインストール
まず、starlight-giscusプラグインをインストールします。ターミナルで以下のコマンドを実行してください。
pnpm add starlight-giscus
npm install starlight-giscus
yarn add starlight-giscus
-
Giscusアプリの設定
Giscus公式サイトで、あなたのリポジトリに対してGiscusを設定します。
必要な情報を入力し、スクリプトコードを生成してコピーしてください。
-
Astro設定ファイルの更新
astro.config.mjs
ファイルを開き、以下のように設定を追加します。
import starlight from '@astrojs/starlight'
import { defineConfig } from 'astro/config'
import starlightGiscus from 'starlight-giscus'
export default defineConfig({
category: 'data-category',
categoryId: 'data-category-id'
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)
: コメント欄のテーマ
lazy (boolean)
: 遅延ロードの有効/無効
これらのオプションを使用して、コメント機能をサイトに合わせてカスタマイズできます。
特定ページでのコメント無効化
そのままだと、下記のようなコメントを表示しなくても良いトップページなどでコメントが表示されてしまいます。

コメントを表示したくないページがある場合は、frontmatterで制御できます。
設定手順
-
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 = {
giscus: z.boolean().optional().default(true),
-
コメントを無効にしたいページのfrontmatterにgiscus: false
を追加します。
starlight-blogプラグインを使っている場合
starlight-blogプラグインを使っている場合は、extend
の中でblogSchema(context)
を呼び出して、その後にgiscus
を追加してください。
また、blogのページやtagのページでgiscusを無効にしたいのでデフォルトをfalse
にします。
設定手順
-
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 = {
extend: (context) => blogSchema(context).extend({
giscus: z.boolean().optional().default(false)
-
コメントを有効にしたいページのfrontmatterにgiscus: true
を追加します。