• Home
  • Next.jsのマークダウンを用いたブログでRSSを簡単に設定する方法

Next.jsのマークダウンを用いたブログでRSSを簡単に設定する方法

記事のサムネイル

Next.jsのマークダウンを利用したブログでのRSSの設定方法について解説します。

RSSとは

RSS(Really Simple Syndication)とは、ウェブサイトの更新情報を一覧で知ることができるデータ形式の一つになります。

これを利用してユーザーがRSSリーダーにウェブサイトのRSSフィードを登録することで、新規記事や更新記事の情報を一元的に取得で切るようになります。

ユーザーエンゲージメントを高め、定期的な訪問者を増やすためのツールとして大活躍します。

RSSの設定方法

Next.jsでRSSを作成するには、サーバーサイドで動作するAPIエンドポイントを作成してそこからRSSを提供するのが一般的な方法となっています。

まずは、必要なライブラリをインストールします。

rssのインストール

RSSフィードを生成するためにはrssという名前のパッケージを使うことができます。

以下のコマンドでインストールできます。

yarn add rss

APIを利用する設定

pages/apiディレクトリ内に新しいファイルを作成します。

例えば、rss.tsxという名前にすることができます。

このファイル内でrssライブラリを使用して RSS フィードを生成します。一般的には、次のようなコードになります。

Next/プロジェクト名/src/pages/api/feed.txs

import { NextApiRequest, NextApiResponse } from 'next'
import RSS from 'rss'

const fetchYourData = async () => {
  return [
    {
      title: '記事のタイトル',
      description: '記事のディスクリプション',
      slug: '記事のスラグ',
      author: '執筆者',
      date: new Date(),
    },
    // More items...
  ]
}

const handler = async (_: NextApiRequest, res: NextApiResponse) => {
  const feed = new RSS({
    title: 'あなたのブログのタイトル',
    description: 'あなたのブログの説明',
    feed_url: 'https://site.com/api/rss',
    site_url: 'https://site.com',
    image_url: 'https://site.com/icon.png',
    managingEditor: 'あなたの名前',
    webMaster: 'あなたの名前',
    copyright: 'ブログのコピーライト',
    language: 'ja',
    pubDate: new Date().toString(),
    ttl: 60,
  })

  const data = await fetchYourData()

  data.forEach((item: { title: string; description: string; slug: string; author: string; date: Date }) => {
    feed.item({
      title: item.title,
      description: item.description,
      url: `https://site.com/${item.slug}`,
      author: item.author,
      date: item.date,
    })
  })

  res.setHeader('Content-Type', 'application/rss+xml')
  res.write(feed.xml())
  res.end()
}

export default handler

このスクリプトはデータソースから記事をフェッチしてそれをRSSフィードに追加しています。

fetchYourData関数はダミーデータの例であり、ここを自分のデータソースからデータを取得するように変更してください。

最後にRSS XMLをレスポンスとして返しています。

このエンドポイントはhttps://site.com/api/rssでアクセスできます。

RSSリーダーは上記URLからRSSフィードを取得することができます。

注意点としては、サイトのタイトル、説明、URL、記事データなどを正しく設定することが重要です。また、フィード生成に時間がかかる場合は、キャッシュを使用することを検討してください。

ローカルで開発する場合

ローカルで開発中でも RSSフィードを確認することは可能です。
Next.jsのAPIルーティングはローカル開発サーバでも動作します。

まず、yarn devなどを使用して Next.js のローカル開発サーバを起動します。
次に、ブラウザを開き、作成したAPIエンドポイントのURLを指定します。

例えば、APIエンドポイントをpages/api/rss.tsに作成した場合、そのURLはhttp://localhost:3000/api/rssとなります(3000 は Next.js のデフォルトのポートです。別のポートを設定した場合はそのポートを使用してください)。

このURLにアクセスすると、作成したRSSフィードがXML形式で表示されます。
RSSフィードをパースして人間が読みやすい形式で表示するためには、専用のRSSリーダーを使用することをおすすめします。

多くのブラウザは XMLを構造化して表示しますが、RSSリーダーはフィードの各エントリーに対応する情報を適切に表示します。

Markdown からの設定

マークダウンファイルからのデータをフィードに反映させるには、まずマークダウンファイルを解析してデータを取得する必要があります。

getArticles()でマークダウンファイルのデータを取得し、それをforEachで回してそれぞれの情報をフィードに反映させています。

import { GetServerSideProps } from "next";
import Rss from "rss";
import { getArticles } from "aaa"; // 記事を全部取得する処理
import blogConfig from "bbb"; // ブログの情報が記載してあるファイル

export const getServerSideProps: GetServerSideProps = async (ctx) => {
  const { res } = ctx;

  res.statusCode = 200;
  res.setHeader("Content-Type", "application/rss+xml;charset=utf-8");

  const url = 'ブログのURL';
  const articles = await getArticles();

  const rss = new Rss({
    title: 'ブログのタイトル',
    site_url: url,
    feed_url: `${url}/rss`,
    language: "ja",
    description: 'ブログの説明',
    copyright: 'ブログのコピーライト',
  });

  articles.forEach((article) => {
    rss.item({
      title: '記事のタイトル',
      url: '記事のURL',
      description: '記事の説明',
      date: new Date(article.data.date),
    });
  });

  res.end(rss.xml());

  return { props: {} };
};

export default () => {};

実装やエラーが解決できない場合

プログラミングの実装やエラーでどうしてもわからない場合はメンターに相談するのが一番です。

考えている、見えている範囲が狭くなり、解決から遠くに行って何時間も、何日も経っていることなんてよくある話です。

そういう時は聞ける先輩や、メンターに相談することが大事です。

僕にも相談可能なので気軽に相談してください。

ご相談はこちら
(Twitterのプロフィールへ飛びます)

OTHER ARTICLES

  • Web制作

  • Rails

railsでjsではなくrubyでtooltipの単位を設定するときの話

2024/08/20
  • Web制作

  • Rails

Railsにおけるクラスメソッドとインスタンスメソッドの違いについて

2024/05/30
  • Web制作

  • Docker

  • Rails

DockerでRails7 + PostgreSQL + esbuildの環境を構築する方法

2024/05/16
  • Web制作

  • Rails

  • Docker

Dockerで建てたrails7環境で「undefined method `devise' for 〜」が発生した話

2024/05/16
  • Web制作

  • Rails

Ruby on RailsのルーティングとRESTfulルート

2024/05/09
  • Web制作

  • Rails

Ruby on Railsにおけるresourceとresourcesの違い

2024/05/01
管理者のイメージ画像

PROFILE

Youta

山口県出身の現役のWebエンジニアです。仕事を通して学んだことや、生活していく中で学んだことを発信していきます。

CATEGORY