718 語
4 分
ブログページにコメント機能が付けられる「giscus」をNext.jsで使う
お久しぶりです。私のブログにはコメントやリアクションを付けられる機能が無いので「giscus」を使ってコメント機能を実装してみました。
giscusとは
GithubのDiscussion機能を活用したコメントシステムです。Githubアカウントがあればコメントやリアクションができるようになります。
giscus
A comments widget built on GitHub Discussions.
giscusの設定
Next.jsでの使用方法
1. giscus Appのインストール
-
giscusを導入するリポジトリを公開設定(
public)にする。 -
以下のリンクにアクセスしgiscusをインストールする
Build software better, together
GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.

-
対象のユーザを選択する。

-
Only select repositoriesを選択し、対象のリポジトリを選択し、Installをクリックする。
-
Okay, giscus was installed on the @xxxxxx account.と出てくれば Installは完了。
2. リポジトリのDiscussions機能を有効化する
-
Githubの対象リポジトリに移動する。
-
Settingsに移動する -
General > Features > Discussionsのチェックを有効化する
3. giscusの設定を生成する
-
giscusにアクセスする。
-
giscusの設定を生成する
| 名称 | パラメータ |
|---|---|
| リポジトリ | コメント機能を追加したいリポジトリ |
| ページとDiscussions連携設定 | Discussionのタイトルにページのpathnameを利用する |
| Discussionで使用するカテゴリ | Announcements |
| このカテゴリのみを検索します | 有効化 |
| 記事へのリアクションを有効にする | 有効化 |
| テーマ | カラースキームに従う |
Next.jsのスクリプトに適用する
@giscus/reactライブラリを使用しています。
生成されたscriptを参考に設定する。
- ライブラリをインストールする。
npm install @giscus/reactgiscus.jsxを作成する。
.envファイルにリポジトリ名、リポジトリID、カテゴリ、カテゴリIDを定義している。
また、Light / Drak Modeに対応させるため、themeの部分は可変にしている。
import Giscus from "@giscus/react";import { useTheme } from "next-themes";import { useEffect, useState } from "react";
export const Comment = () => { const { theme, systemTheme } = useTheme(); const [giscusTheme, setGiscusTheme] = useState("light");
useEffect(() => { // themeが'system'の場合は、システムのテーマに基づいてGiscusのテーマを決定 const resolvedTheme = theme === "system" ? systemTheme : theme;
// Giscusのテーマを設定 setGiscusTheme(resolvedTheme === "dark" ? "dark" : "light"); }, [theme, systemTheme]);
return ( <Giscus id="comments" repo={process.env.NEXT_PUBLIC_GISCUS_REPO} repoId={process.env.NEXT_PUBLIC_GISCUS_REPO_ID} category={process.env.NEXT_PUBLIC_GISCUS_CATEGORY} categoryId={process.env.NEXT_PUBLIC_GISCUS_CATEGORY_ID} mapping="pathname" reactionsEnabled="1" emitMetadata="0" inputPosition="bottom" theme={giscusTheme} // 動的にテーマを変更 /> );};page.jsxに作成したコンポーネントを追加する。
const Giscus = dynamic(() => import("@/app/giscus").then((m) => m.Comment), { ssr: false,});
export default function Home() { return ( <main> <Giscus /> </main> );}- 以下のように表示される。

参考にさせていただいたサイト
giscus
A comments widget built on GitHub Discussions.
HugoのStackテーマのブログにgiscusを導入する
Waiting for api.github.com...




