静的サイトでも自前で RSS (Atom) フィードを配信する
2020年11月1日、メインサイト Neo's World でついに独自ドメインを取得した。あわせて RSS フィードを配信しようと思い、やり方を色々調べたのでメモ。
目次
- フィード配信は簡単・XML ファイルを配置・更新するだけ
- RSS 1.0、RSS 2.0、Atom の違い
- コピペで作れる Atom フィードのテンプレート用意しました
- バリデータでチェックする
link
要素による案内- 実際に XML ファイルを組み立てる手順は扱わず…
フィード配信は簡単・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 1.0 は Netscape が策定したモノがベース。シンプルに書ける
- RSS 2.0 は RSS 1.0 の後継ではなく、開発が停滞していた RSS 1.0 に代わってフォーマットを拡張した、UserLand Soctware 社による規格。リッチなコンテンツ配信ができるが、その分書くのが面倒
- RDF (Resource Description Framework) Site Summary とか、Rich Site Summary とかの略
- Atom は RSS 1.0 の停滞や RSS 2.0 への分裂を傍目に「もっと自由にやりたくね?」と立ち上げられた別規格。IETF という標準化団体が策定しており企業が絡んでいないのが特徴で、RSS 2.0 よりはシンプルな仕様
つまり、「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>
id
要素はお好みでユニークな値にできれば良いfeed
要素直下のupdated
要素は、フィード XML ファイルを更新するたびに、最新の日時に書き換える。コレが古いままだと正しくクロールされないかもしれないentry
要素直下のupdated
要素は、記事の投稿日時だと思って良い
過去の記事をどれだけフィード配信するかにもよるが、大抵のサイトは最新10件とか30件とか、そのぐらいの記事だけフィード配信しているようだ。entry
要素は一定数で古いモノが消されて、ローテートされていくようなイメージだろうか。
ちなみに Feedly は、一度クロールしたフィード情報を自分のサーバでキャッシュしているようで、実際のフィード XML ファイルが配信していない古いエントリも見えることがあったりする。RSS リーダって頑張ってたのね…。
バリデータでチェックする
自分が作ったフィード XML ファイルが正しく作れているか確認したければ、以下のサイトで確認できる。
コレでエラーが出なければとりあえずは OK だろう。
link
要素による案内
Atom フィードを作ったら、次のような link
要素をサイトに埋め込むことで、Atom フィードの存在を知らせられる。
<link rel="alternate" type="application/atom+xml" title="My Atom Feeds" href="/atom.xml">
実際に XML ファイルを組み立てる手順は扱わず…
今回の記事は、テンプレート的なところが確認できたところまで。コレを実際に自動で組み立てるスクリプトとかは、今回は紹介しない。
まずはこのテンプレートを基に、自分で Atom フィードを組み立ててみて欲しい。
- hail2u.net/feed.js at master · hail2u/hail2u.net · GitHub
- node-rss/index.js at master · dylang/node-rss · GitHub
- feed/src at master · jpmonette/feed · GitHub
- hexo-generator-feed/rss2.xml at master · hexojs/hexo-generator-feed · GitHub
- RSSとATOMの違いと特徴は?配信方法やサンプルフォーマットあり | メディファンド
- RSS、atomの仕様をまとめる - Qiita
- RSS2.0 RSSファイルを作る RSS配信
- Atom の RSS Feed 対応 | blog.jxck.io
- RFC 4287 The Atom Syndication Format 日本語訳
- <link要素> - ドキュメントとリソースとの関係を明示する | HTMLのタグリファレンス