まえがき
本テンプレートのコードは自由にご利用いただけます。
少しでもプラスになれば筆者もうれしいです。
テンプレート紹介
本テンプレートは要約機能を備えたニュースサイトです。
Mantine UIを使ったカードレイアウト、EN/JPの2言語対応、ニュース記事を要約する機能を確認できます。
デモサイトURL
画面レイアウト
ファーストビュー

ENボタン押下

要約ボタン押下

技術スタック
- Framework: Next.js 16
- UI Library: Mantine UI 7
- Language: TypeScript 5
- i18n: next-intl
- Date Handling: date-fns 4
- Server Actions: Next.js Server Actions
- AI: Open API / Gemini API – (環境変数設定で利用可能)
GitHubリポジトリ
npm installとnpm run devのみで起動できます。モックで動作させる場合は環境変数設定が不要ですぐに動作確認できます。環境変数の設定方法はREADME.mdを参考にしてください。
実装のポイント
多言語対応構成
多言語対応の構成例は以下の通りです。
├── messages
│ ├── en.json
│ └── ja.json
├── next.config.ts
└── src
├── i18n
│ └── request.ts
└── app
├── layout.tsx
└── page.tsx
en.json:翻訳ファイル(英語)
ja.json:翻訳ファイル(日本語)
next.config.ts:Next.js設定ファイルrequest.ts:Cookieからロケール(jaかen)を取得し対応する翻訳ファイルを読み込むnext.config.ts(Next.js設定ファイル):next-intlを追加
この構成により多言語化対応を実現しています。
i18nはinternationalizationのiとnの間の18文字
Service/ServerAction、モック実装⇔本実装切替の構成
モック実装と本実装を切替可能なService層とClient Componentから呼び出せるServer Actionの最小構成例は以下の通りです。
├── src
│ ├── services
│ │ └── summary
│ │ ├── SummaryService.ts
│ │ ├── MockSummaryService.ts
│ │ ├── OpenAISummaryService.ts
│ │ └── index.ts
│ └── app
│ └── actions
│ └── summarize.ts
SummaryService.ts:インターフェース。各実装クラスがそれを実装
MockSummaryService.ts:モック実装
OpenAISummaryService.ts:本実装index.ts:環境変数の値によりモック実装か本実装を読み込む
summarize.ts:ServerAction。tsファイルに'use server'を付与することでServer Actionと定義され、Client Componentから呼び出し可能となる
AI機能
OpenAIのAPI呼出しを実装(OpenAISummaryService.ts)しており、環境変数設定により利用可能です。デモサイトではプロンプト(AIへの依頼内容)を要約としていますが、翻訳など他の用途に変更頂くことも可能です。
こんな人におすすめ
- Next.jsのモダンレイアウトを参考にしたい方
- 生成AIのAPI実装を参考にしたい方
- 多言語対応の実装を参考にしたい方
- モックと実装の切り替えを参考にしたい方
参考リンク
- Next.js: https://nextjs.org/docs
- Mantine UI: https://mantine.dev/
- next-intl: https://next-intl.dev/
- OpenAI API: https://platform.openai.com/docs
- Gemini API: https://ai.google.dev/gemini-api/docs
