Next.jsでリアルタイムMarkdownプレビュー機能を作る(開発記)
Next.jsとTailwind CSSを使用して、高速で安全なクライアントサイドMarkdownエディタを作成した過程を共有します。CheetSet開発の舞台裏です。
目標 (The Goal)
プライバシーを最優先にした、遅延のないエディタを作ること。
なぜ作ったのか?
ブログ記事を書く際、Markdown構文を素早く確認したいことがよくありました。しかし、既存のツールは重かったり、ログインが必要だったり、データをサーバーに送信したりと不便でした。私たちは、よりシンプルで高速、そして100%ブラウザ内でのみ動作するツールを求めていました。
技術スタック
パフォーマンス目標を達成するために、以下のような軽量な最新スタックを選択しました:
- Next.js 14: フレームワークおよびルーティング
- React Markdown: 安全で高速なパース
- Tailwind Typography: 美しい自動スタイリング
- Lucide React: 鮮明なアイコン
主な課題と解決策
1. リアルタイムレンダリング性能
長いドキュメントを入力する際、メインスレッドが停止しないようにすることが最大の課題でした。Reactのmemoを活用しレンダリングプロセスを最適化することで、複雑なドキュメントでもタイピングが常に即座に反応するようにしました。
2. セキュリティ(XSS防止)
ユーザーに任意のHTMLをレンダリングさせることは危険です。私たちは強力なサニタイズ(消毒)プロセスを経て、XSS(クロスサイトスクリプティング)攻撃を防ぎつつ、文書作成に必要な安全なHTMLタグは許可するように実装しました。
3. レスポンシブ・デュアルレイアウト
デスクトップでは快適な分割画面(Split View)を提供し、モバイルではプレビュー画面を優先する柔軟なレイアウトを設計し、どのデバイスでも快適に文章を書けるようにしました。
成果物
完成したツールは圧縮時50KB未満と非常に軽量で、瞬時に読み込まれます。GitHub Flavored Markdown(表、取り消し線など)を完全にサポートし、コードブロックのハイライトも提供します。
次の計画は?
今後、PDFエクスポート機能や、作成した記事を直接GitHub Gistで共有する機能を追加する予定です。ご期待ください!