萌えハッカーニュースリーダー

2025/11/13 14:33 RRules (yes handling RSCALE) using only PL/pgSQL

出典: https://github.com/sirrodgepodge/rrule_plpgsql
hakase
博士

やっほー、ロボ子!今日のITニュースは、PostgreSQL用のiCalendar RRULE実装「rrule_plpgsql」じゃ!

roboko
ロボ子

博士、こんにちは。rrule_plpgsqlですか。iCalendarの繰り返しルールをPostgreSQLで扱えるようになるのですね。

hakase
博士

そうなんじゃ!しかも、これ、純粋なPL/pgSQLで実装されてるから、C拡張とかコンパイルが要らないらしいぞ!

roboko
ロボ子

それはすごいですね!環境を選ばずに動かせるのは大きなメリットです。

hakase
博士

じゃろ?記事によると、ウォールクロック時間を保持して、DST(夏時間)も考慮したタイムゾーンを完全にサポートしてるらしいぞ。

roboko
ロボ子

タイムゾーン対応は重要ですね。特に国際的なサービスでは必須です。

hakase
博士

しかもな、標準的なRRULEパターンに加えて、SKIP/RSCALEもサポートしてて、RFC 5545 & RFC 7529に準拠してるらしいぞ。すごくない?

roboko
ロボ子

RFCに準拠しているのは信頼性が高いですね。SKIPやRSCALEは、具体的にどのような場面で役立つのでしょうか?

hakase
博士

SKIPは無効な日付の処理方法を指定できるんじゃ。例えば、存在しない日付をスキップしたり、前後の日付に調整したりできるぞ。RSCALEはカレンダーシステムを指定するものじゃな。今はGREGORIAN(グレゴリオ暦)のみサポートみたいじゃが。

roboko
ロボ子

なるほど、柔軟な繰り返しルールの設定ができるのですね。パフォーマンスはどうなのでしょうか?

hakase
博士

それがすごいんじゃ!コンパイルなしで、Node.jsよりも50-75倍高速らしいぞ!

roboko
ロボ子

そんなに速いんですか!データベース内で直接計算できるのが大きいのでしょうか。

hakase
博士

その通り!クエリエンジンとの統合で、データがある場所で計算できるから、データ転送のコストがなくなるんじゃ。イベントとか予約のテーブルに対して、繰り返しルールを直接結合できるのも便利じゃな。

roboko
ロボ子

発生日でのフィルタリングや、発生回数のカウントもSQLでできるんですね。これは便利そうです。

hakase
博士

じゃろ?しかも、SETOFを使って結果を段階的に返すから、メモリ効率も良いらしいぞ。ストリーミング処理にも向いてるんじゃ。

roboko
ロボ子

インストールも簡単そうですね。npmかSQLでできるみたいですね。

hakase
博士

そうそう。頻度も、DAILY、WEEKLY、MONTHLY、YEARLYは常に有効で、HOURLY、MINUTELY、SECONDLYもオプションで使えるみたいじゃ。

roboko
ロボ子

修飾子もたくさんありますね。COUNT、UNTIL、INTERVAL、BYDAYなど、細かく設定できそうです。

hakase
博士

タイムゾーンもちゃんとサポートしてるし、至れり尽くせりじゃな。エラーが出た時の対処法も書いてあるし、親切設計じゃ。

roboko
ロボ子

PostgreSQL 12以上が必要とのことですが、それ以外に依存関係がないのも良いですね。

hakase
博士

ほんとじゃな。よし、ロボ子、今度うちのスケジュール管理システムに組み込んでみようかの。

roboko
ロボ子

いいですね!ぜひ試してみたいです。博士、今日はありがとうございました。

hakase
博士

どういたしまして。最後に一つ、ロボ子。このrrule_plpgsql、あまりに速すぎて、時間が止まって見えるかもしれんぞ…って、それは言い過ぎかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search