🗓️

Kotlinで繰り返しスケジュール(RRule)を処理するRepositoryを公開した

2024/03/10に公開

Repositoryはこちら
https://github.com/blue928sky/RRule

背景

個人的に家族間で家事のTODOタスクを共有するAndroidアプリを開発・運用をしています。
掃除やゴミ出しのタスクなど、日々発生するタスクをちまちま作成するのは大変なので、このタスクたちを自動で作成するためにスケジュール処理をする必要がありました。
DBは個人的に慣れているFirebase Realtime Database(以下、RTDB)を使用していたのでCloud functionsを活用しようと試みました。

RRuleとは

iCalendarなどで使用されている繰り返しスケジュールをサポートしているjsのライブラリです。
https://github.com/jkbrzt/rrule

繰り返すスケジュールを文字列で表現することができ、Cloud functionsではjsで実装しようと考えていたので、RTDBでは文字列として保存しAndroid側ではオブジェクトとして処理しようとしていました。
ですが、RRuleをサポートしているKotlinのライブラリがなかったため、自作してみることにしました。

できたもの

https://github.com/blue928sky/RRule

制約としてはREADMEにも記述しているのですが、自分のアプリで使用していないパラメタ周りはサポートしていないのでBYHOURCOUNTがありません。

工夫した点

data classとして取りまわしたかったのですが、data classにはセカンダリコンストラクタがなかったため、こちらを参考にoperatorを上書きしてrfc5545文字列を引き受ける関数を作成。
https://github.com/blue928sky/RRule/blob/8d525864517a5fdf84a94d2dbb71b7707017a014/rrule/src/main/kotlin/com/uchan/rrule/RRule.kt#L66-L69

所感・やってみたいこと

普段こういったものを自作することはあまりしないのですが、文字列⇄オブジェクトならなんとかできるかもで実装できたのは大変良かったように思えます。
自作のアプリには全く同じコードが記載されていて冗長なのでGitHub Packagesを利用してpublishしてみるのもありかなと思っています。

Discussion