RSS の日時要素

Cuerda-Feed-total が出力する RSS では、channel/pubDatechannel/lastBuildDate が、 「このフィードが、いつから、どのようなリズムで動いているのか」を示す軸として機能します。 どちらも単なるサーバー時刻ではなく、「いまこの配信先に向けて公開されている記事群」を起点に計算されるよう設計されています。 ここでは、これらの日時要素をどのような考え方で決めているのか、そのロジックを整理してご説明します。

対象となる日時要素

Cuerda-Feed-total が扱う RSS のチャンネルレベルの日時要素は、主に次の二つです。

  • channel/pubDate – フィードに含まれる記事のうち「もっとも新しい初回公開」を代表する時刻
  • channel/lastBuildDate – フィードの内容が最後に変化したと見なせる時刻

いずれも、単一の投稿から直接コピーするのではなく、 「この配信先向けフィードに、いま含まれるべき全ての記事」を一度洗い出したうえで、その集合から算出します。 この「まず対象記事を正しく絞り込む」という段階が、日時要素の精度を決める重要な前提になっています。

前提となる記事集合:フィードの対象を先に決める

日時要素を決定する前に、Cuerda-Feed-total はまず「この配信先向けに、いま配信すべき記事」の集合を構築します。 この集合は、内部のクエリビルダーによって次のような条件を踏まえて組み立てられます。

  • 公開状態(publish)であること
  • 配信先ごとの「配信する/しない」設定(カテゴリー・タグ・著者など)の条件を満たしていること
  • 投稿単位での配信除外設定(本プラグインの投稿メタ)によってブロックされていないこと
  • 予約投稿の場合、公開日時が現在時刻を過ぎていること

このようにして、「いまこの瞬間に、この配信先が取得したとき、フィードに載るはずの投稿だけ」を対象にしたうえで、 channel/pubDatechannel/lastBuildDate を計算します。 フィードに含まれない投稿の更新や、配信対象外の下書きなどは、これらの日時には影響しません。

channel/pubDate:もっとも新しい「初回公開」を表す

channel/pubDate は、そのフィードに含まれる記事群のうち、 「初めて一般公開された時刻」がもっとも新しい投稿を代表させるかたちで決定されます。 具体的には、次のような流れで値を求めます。

  1. 対象記事集合のそれぞれについて、WordPress の post_date_gmt(公開日時)を取得します。
  2. その中から、もっとも新しい公開日時をひとつ選びます。
  3. サイトのタイムゾーン設定に従って整形し、RFC 822 形式の文字列(例: Tue, 10 Dec 2025 12:34:56 +0900)として出力します。

この設計により、channel/pubDate は「このフィードに載っている中で、いちばん新しい記事が世に出たのはいつか」を示す値になります。 既存記事の本文が細かく修正されただけでは、この値は変わりません。 あくまで「新しい記事が追加されたとき」に更新されることを目指したロジックです。

channel/lastBuildDate:フィードの「最終更新」を示す

一方、channel/lastBuildDate は、フィードの内容が最後に変化したと見なせる時刻を表します。 ここでは、「新しい記事が追加されたかどうか」だけでなく、「既存の記事が更新されたか」「配信対象から外れたか」といった変化も考慮します。

Cuerda-Feed-total では、前述の対象記事集合に対して、次のような時間情報を手がかりに値を決定します。

  • 各投稿の更新日時(post_modified_gmt
  • 削除や配信除外など、フィードから外れるイベントが発生した時刻(内部的には、配信制御用メタや履歴情報として管理)

これらのうち、もっとも新しい時刻を選び、それをサイトのタイムゾーンに変換したうえで、 channel/lastBuildDate として出力します。 その結果、次のようなケースで lastBuildDate が更新されることになります。

  • 新しい記事が公開され、フィードの末尾に 1 件追加されたとき
  • 既存の記事が更新され、その内容がフィードに反映されるとき
  • 配信対象だった記事が、カテゴリー変更や投稿ステータス変更などにより、フィードから外れたとき

逆に、フィードの内容に一切変化がなかった期間については、 channel/lastBuildDate の値も変化しません。 これにより、配信先側は「このフィードを最後に取り込んだ日時」と比較することで、 効率的に更新有無を判定することができます。

日時のフォーマットとタイムゾーン

channel/pubDate および channel/lastBuildDate は、どちらも RSS 仕様に則った RFC 822 形式で出力されます。 内部では UTC(GMT)基準で日時を集計し、最後に WordPress のタイムゾーン設定に従ってローカル時刻へ変換したうえで文字列化します。

これにより、サイト全体のタイムゾーン設定を変更した場合でも、 新たに生成されるフィードはその設定に従った日付表現に揃えられます。 既存の投稿データそのものは変わりませんが、フィードとしての見え方は常に最新の設定に追随します。

記事単位の日時との関係

本ページではチャンネルレベルの日時要素に絞って説明しましたが、 個々の item 要素にも、それぞれの公開日時や更新を示すフィールドが存在します。 Cuerda-Feed-total では、まず記事単位の日時を正確に取り扱ったうえで、 その集合から代表値として channel/pubDatechannel/lastBuildDate を導き出す、という順序で処理を行っています。

item レベルの日時要素(記事ごとの pubDate や、配信先固有の更新日時要素)については、 別のページで個別に詳しくご説明します。 ここでは、Cuerda-Feed-total が「フィード全体としての時間」をどのように見立て、 チャンネルレベルの日時として表現しているか、その考え方をご理解いただければ十分です。

技術者向けの情報に戻る

©cuerda™