AstroでRSSフィードを出力する
お茶を凍らせる色、チャコール。DE-TEIUです。
このブログにRSSフィード機能を追加しました。
Astroでの実装
Astro公式のドキュメントの通りにやるだけです。簡単。
@astrojs/rssのインストール
Astroには公式から提供されているRSSフィード作成用ライブラリがあるので、これをそのまま使います。はいインストール。
npm install @astrojs/rss
RSSフィード生成用のファイルを作成
src/pages/rss.xml.ts
というファイルを作成します。
このファイルを用意するだけで、ブログをビルドした際に “/rss.xml”というパスでrssフィードが取得できるようになります。
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
import { SITE_TITLE, SITE_DESCRIPTION } from "../consts";
export async function GET(context: { site: any }) {
const posts = await getCollection("blog");
// 記事は念のため日付が新しいもの順に並べておく
const sortedPosts = posts.sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
);
return rss({
title: SITE_TITLE,
description: SITE_DESCRIPTION,
site: context.site,
items: sortedPosts.map((post) => ({
...post.data,
link: `/blog/${post.id}/`,
})),
customData: `<language>ja</language>`, // xmlに言語設定(languageタグ)を出力する
});
}
HTMLのにRSSリンクを追加
RSSリーダーが自動検出できるように、各ページのにRSSフィードへのリンクを追加します。
<link rel="alternate" type="application/rss+xml" title={SITE_TITLE} href={new URL("/rss.xml", Astro.site)} />
あとはサイトのヘッダーとフッターにRSSフィードのリンクアイコンを設置して完了。