Next.js[App Router]&microCMSでRSSフィードを実装する
2025/03/31 (月) - 09:00 JavaScript
microCMSとNext.js[App Router]でRSSを実装してみる。RSSはブログやニュース配信サイトでは必ず実装しておくべきものです。今回は以下の環境で実装します。
- Next.js 14.2.x
- microcms-js-sdk 3.1.x
.env
で、サイト名、サイトの説明文、サイトのドメイン、microCMSのAPIキーを設定をしておきます。
SITE_URL=https://example.com
SITE_NAME=ゆかちぃのブログ
SITE_DISCRIPTION=ゆかちぃの日々を書き残すブログです♪
API_KEY={APIキー}
src/feed/route.ts
に以下のように実装。タイトル、パーマリンク、サマリー、公開日の最低限の要素のみ実装しています。
APIスキーマは以下を想定します。
- 記事タイトル:title
- 本文:content
- パーマリンク:id
- 公開日:publishedAt
import { NextResponse } from 'next/server';
import { client } from '../libs/Client.js';
import { format } from 'date-fns';
export async function GET() {
const posts = await client.get({
endpoint: 'post',
});
const rss = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>${process.env.SITE_NAME}</title>
<link>${process.env.SITE_URL}</link>
<description>${process.env.SITE_DISCRIPTION}</description>
${posts.contents.map((post) => `
<item>
<title>${sanitizeStr(post.title)}</title>
<link>${process.env.SITE_URL}/${post.id}</link>
<description><![CDATA[${post.content}]]></description>
<pubDate>${format(new Date(post.publishedAt), 'EEE, dd MMM yyyy HH:mm:ss xx')}</pubDate>
</item>`).join('')}
</channel>
</rss>`;
return new NextResponse(rss, {
headers: {
'Content-Type': 'application/rss+xml',
},
});
}
function sanitizeStr(str: string): string {
return String(str).replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""")
}
また、出力したRSSをすべてのページのhead要素内に設定し、このサイトではRSS配信しているよ!ということを認識させましょう。
<link rel="alternate" type="application/rss+xml" href="https://example.com/feed/" />
おしまい♥
おすすめ記事
- 電話番号リンク(tel:〜)をスマホではクリッカブルにしパソコンではリンク無効にする
- Astro&microCMSで1ページ内にカテゴリごとの記事一覧を表示する
- JavaScript(VanillaJS)でDOM要素を指定するには
- 戻るボタンで広告が表示されるギミックを簡易的に実装する
- Reactでinput要素に入力した内容を反映
トラックバック & ピンバック
- この記事へのトラックバックURI:
- https://weblog.walk-life.me/nextjs_rssfeed/trackback/