Next.js製のブログにRSSを設定する
Next.js製のブログにRSSを設定しました。
結論
- API Routeからフィードを返す
- パスが気持ち悪いのでrewritesの設定で
/feed
->/api/feed
に
やり方
Next.jsのルーティングは、pages/
以下に、パスに対応するファイル名にReactコンポーネントを置いて画面を表示することができます。では、画面じゃなくて今回のRSSのようなレスポンスを返すにはどうすればいいか。調べるとAPI Routesというものがあったので今回はそれを使いました。
API Routes
API routes provide a straightforward solution to build your API with Next.js.
だそうです。RSSファイル返していいものかちょっと微妙な感じもしますが、他に良さげな方法がなかったので使いました。ドキュメントに書かれている通り、/pages/api/feed.ts
とかに書くと、/api/feed
で配信されます。
そこに、以下のような処理を書きました。
// ...もろもろ省略 export default async (req, res) => { res.statusCode = 200; const posts = await fetchPosts(); const feed = await generateFeed(posts); res.setHeader("Content-Type", "application/rss+xml;charset=utf-8"); res.write(feed.xml()); res.end(); };
パスのrewrites
ブログのフィードが /api/feed
なのはなんとなく気持ち悪く、/feed
にしたい。そこで、rewritesの設定を知りました。
以下のようにしました。
module.exports = { async rewrites() { return [ { source: "/feed", destination: "/api/feed", }, ]; }, };
以上で、 https://blog.gaaamii.jp/feed でフィード情報を返すことができました。
その他の方法
Pageコンポーネントにres.end
書いちゃうのもOKみたいです。知らなかった。