ReactMarkdownでAI SDKメッセージを美しく

힘센캥거루
2025년 1월 24일(수정됨)
2
117

前回の記事では、VercelのAI SDKを利用したchatGPTサービスを作ってみました。

しかし、対話をしてみると文章がなんだか平凡です。

ReactMarkdownでAI SDKメッセージを美しく-1

言っていることはわかるのですが、文章が詰まりすぎています。

classNameでwhitespace-pre-wrapを使うだけで美しく変わります。

<div className="text-gray-800 whitespace-pre-wrap">
    {message.content}
</div>

ReactMarkdownでAI SDKメッセージを美しく-2

こうすると少なくともスペースは空きます。

よく見るとこの子、マークダウンで答えています。

ReactMarkdownでAI SDKメッセージを美しく-3

それならReactMarkdownコンポーネントに回答を入れると少し美しくなりそうです。

1. ライブラリのインストールと設定

まず必要なライブラリをインストールしましょう。

yarn add react-markdown remark-gfm rehype-highlight highlight.js
  • react-markdown: マークダウンをHTMLにレンダリングします。

  • remark-gfm: 従来のマークダウンにいくつかの機能を追加したものです。

  • rehype-highlight: コードハイライト機能。ただし多少の詳細設定が必要です。

  • highlight.js: コードを解析して適切に強調してくれます。

これをdiv内に入れればいいです。

注意点はクラスからwhitespaceオプションを外すのを忘れないことです。

"use client";

import ReactMarkdown from "react-markdown";
import remarkGfm from "remark-gfm";
import rehypeHighlight from "rehype-highlight";
import "highlight.js/styles/atom-one-dark.css";

...
<div className="text-gray-800">
    <ReactMarkdown
    className="w-full h-5/6 prose"
    remarkPlugins={[remarkGfm]}
    rehypePlugins={[rehypeHighlight]}
    >
    {message.content}
    </ReactMarkdown>
</div>
...

ReactMarkdownでAI SDKメッセージを美しく-4

こうすると上のようにマークダウン構文が強調されることがわかります。

テーブルやインラインコードブロックも可能です。

コードハイライトの色はhighllight公式サイトで確認できます。

ReactMarkdownでAI SDKメッセージを美しく-5

入ってさまざまなスタイルを見て、最も気に入ったものを選べば良いです。

chatGPTが薦めるスタイルはDefault, Atom One Dark, Solarized Light, GitHubでした。

2. 後記

本当に一日に一つ追加すると時間が過ぎます。

それでも新学期が始まる前にはサービスを完成させる必要があるのが心配です。

論文は書けるのか…

もう少し頑張らないといけないですね。

관련 글

Next.js フルスタックブログ開発記
Next.js フルスタックブログ開発記
Web開発に初めて触れてから1年ほど経った頃、自分だけのブログを持ちたいと思うようになった。そこで、およそ6か月これだけにかかりきりになって作ってみることにした。フロントエンド側の機能については、下記のキム・ドヒョンさんのブログを参考にするだけで十分だと思う。自分も mdx を使ってブログを作るだけ...
Caddyを利用した Next.js 無停止デプロイ(ローカルサーバー)
Caddyを利用した Next.js 無停止デプロイ(ローカルサーバー)
ホームページに何かをちょこちょこ載せたくなるたびにビルドしていたら、そのタイミング에 가끔 접속하는人がいるようだった。そうしているうちに、サーチコンソールでスコアがどんどん下がる現象が起きた。このままではまずいと思い、無停止デプロイをする方法を考えてみることにした。1. プロジェクトフォルダ2つ+...
Google検索インデックスの自動化 - Web Search Indexing API
Google検索インデックスの自動化 - Web Search Indexing API
前回の IndexNow に続いて、Google でも自動化してみることにした。調べてみると、Google は API として Web Search Indexing というものを提供していた。1. 対象範囲公式にこの API がサポートしている範囲は、求人情報とストリーミング動画サービスである。リ...
検索インデックス生成の自動化 - IndexNow
検索インデックス生成の自動化 - IndexNow
Bingにサイト登録をしている途中で知ったのだが、Bingでは IndexNow という機能を提供している。ポイントは、APIキーを使って、記事を書いた直後にすぐインデックス作成リクエストを飛ばせるということ。下のようなリクエストを fetch で作り、投稿機能に連動させておけば、記事をDBに保存す...
Nextjs、React サーバーがハッキングされた経験
Nextjs、React サーバーがハッキングされた経験
最初にセキュリティ問題に気づいたのは、12月5日の未明だった。React で認証なしにリモートコード実行が可能だということ。そのニュースを見て他の人には共有したものの、自分は大丈夫だろうと思って特に気にも留めなかった。1. ハッキングの痕跡を発見ところが、ブログのコードを更新しようとアクセスしてみる...
ブログに多言語機能を追加する(NextJS・next-intl・Vercel AI SDK)
ブログに多言語機能を追加する(NextJS・next-intl・Vercel AI SDK)
最近、ブログに多言語対応機能が必要だと感じた。そこで next-intl を使って多言語サービスを実装してみることにした。1.i18nまず多言語サービスを行うときには、守るべき原則がある。これを internationalization と呼ぶが、かなり長いので、先頭の i と末尾の n、そしてその...

댓글을 불러오는 중...