静的サイトでも自前で RSS (Atom) フィードを配信する

2020年11月1日、メインサイト Neo's World でついに独自ドメインを取得した。あわせて RSS フィードを配信しようと思い、やり方を色々調べたのでメモ。

目次

フィード配信は簡単・XML ファイルを配置・更新するだけ

コレまで10数年、Google リーダや Feedly を使ってきたが、実のところ RSS の仕組みがよく分からないまま使っていた。しかし仕組みは簡単で、RSS フィードと呼ばれる XML ファイルを各サイトが配信していて、RSS リーダはそれを定期的にクロールしているだけなのだ。

つまり、ブログサイトでなく静的サイトであっても、XML ファイルを更新して配置できれば RSS フィード配信ができるワケだ。CGI も、特殊な技術やアプリも要らない。ただ規格どおりに XML を書いて同じところに配置すればそれで良いのだ。

RSS 1.0、RSS 2.0、Atom の違い

RSS の他に、Atom という単語も聞いたことがある。サイトによってフィードの URL が rss.xml だったり atom.xml だったりするので、規格の違いなのは何となく理解していた。調べてみたらこういうことだった。

つまり、「RSS」は総称ではなく単独の規格で、「Atom」は「RSS」とは似て非なるモノだ。3つの規格が混在し、どれも一定の利用率があるため、「RSS リーダ」側が3つの規格をどれも扱えるようにしてあるのが実情だ。

RSS 1.0 と RSS 2.0 は機能的に新旧が別れているワケではないので、2020年のコレから RSS 1.0 の形式でフィードを作ることも、ない話ではない。

自分は今回、あまり企業が関係していない「インターネット標準」に近い規格である、Atom 規格を選んだ。ということで以降は Atom 形式でのフィードを組み立ててみることにする。

コピペで作れる Atom フィードのテンプレート用意しました

なかなか仕様が分かりづらかったのだが、色んな文献を漁って、以下のテンプレートに行き着いた。最小構成はこんな感じ。

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>【サイト名】</title>
  <id>【フィード ID・特に思いつかなければサイトのトップページ URL とかでいい】</id>
  <author>
    <name>【管理人の名前】</name>
  </author>
  <link rel="alternate" type="text/html" href="【サイトのトップページ URL】"/>
  <link rel="self" type="application/atom+xml" href="【このフィードの URL】"/>
  <updated>YYYY-MM-DDTHH:mm:ssZ</updated>  <!-- フィードの最終更新日時 -->
  
  <!-- 以下の entry 要素を、新しいモノから古いモノへと順に連ねていく -->
  <entry>
    <title>【記事タイトル】</title>
    <id>【記事 ID・特に思いつかなければ記事 URL などユニークなモノでいい】</id>
    <link rel="alternate" type="text/html" href="【記事 URL】"/>
    <updated>YYYY-MM-DDTHH:mm:ssZ</updated>  <!-- 記事の投稿日時 -->
    <summary>【記事の概要。Feedly なんかだとタイトルの下に表示される本文がココにあたる】</summary>
  </entry>
  
  <entry> …… </entry>
  
</feed>

僕のサイトの情報でサンプルを作ってみると、以下のような感じ。

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>Neo's World</title>
  <id>https://neos21.net/</id>
  <author>
    <name>Neo</name>
  </author>
  <link rel="alternate" type="text/html" href="https://neos21.net/"/>
  <link rel="self" type="application/atom+xml" href="https://neos21.net/feeds.xml"/>
  <updated>2020-11-02T12:13:14Z</updated>
  
  <entry>
    <title>2日目の記事です</title>
    <id>https://neos21.net/example-2.html</id>
    <link rel="alternate" type="text/html" href="https://neos21.net/example-2.html"/>
    <updated>2020-11-02T12:13:14Z</updated>
    <summary>より新しい記事ですね。どうもどうも</summary>
  </entry>
  
  <entry>
    <title>1日目の記事です</title>
    <id>https://neos21.net/example-1.html</id>
    <link rel="alternate" type="text/html" href="https://neos21.net/example-1.html"/>
    <updated>2020-11-01T02:03:04Z</updated>
    <summary>より古めの記事ですね。やぁやぁ</summary>
  </entry>
  
</feed>

過去の記事をどれだけフィード配信するかにもよるが、大抵のサイトは最新10件とか30件とか、そのぐらいの記事だけフィード配信しているようだ。entry 要素は一定数で古いモノが消されて、ローテートされていくようなイメージだろうか。

ちなみに Feedly は、一度クロールしたフィード情報を自分のサーバでキャッシュしているようで、実際のフィード XML ファイルが配信していない古いエントリも見えることがあったりする。RSS リーダって頑張ってたのね…。

バリデータでチェックする

自分が作ったフィード XML ファイルが正しく作れているか確認したければ、以下のサイトで確認できる。

コレでエラーが出なければとりあえずは OK だろう。

Atom フィードを作ったら、次のような link 要素をサイトに埋め込むことで、Atom フィードの存在を知らせられる。

<link rel="alternate" type="application/atom+xml" title="My Atom Feeds" href="/atom.xml">

実際に XML ファイルを組み立てる手順は扱わず…

今回の記事は、テンプレート的なところが確認できたところまで。コレを実際に自動で組み立てるスクリプトとかは、今回は紹介しない。

まずはこのテンプレートを基に、自分で Atom フィードを組み立ててみて欲しい。