2 ポイント 投稿者 GN⁺ 2025-04-11 | 1件のコメント | WhatsAppで共有

はじめに

  • データと技術を自ら所有したいというシリーズの第1部として、セルフホストのカレンダーソリューションを統合する方法を説明する。
  • 旅行が多く、予定管理が複雑になり、既存のカレンダーシステムの不便さを解消するために独自のソリューションを構築することになった。

要件

  • 予定が業務カレンダーにブロック要素として表示されること。
  • 妻がカレンダーを購読できること。
  • イベントを一度だけ入力すればよいこと。
  • 複数のデバイスで編集できること。
  • データを完全に制御できること。
  • 業務カレンダーを妻と共有する方法では問題を解決できないこと。

以前のソリューション

  • 既存のカレンダー共有ソリューションは共通プラットフォームを必要とするか、機能が限定されていた。
  • YAMLファイルを使ってカレンダーイベントを作成し、それをICSファイルに変換して共有する方法から始めたが、保守が難しくなった。

アーキテクチャ

  • CalDAVサーバーを使い、複数のデバイスでカレンダーを管理できるソリューションを構築した。
  • さまざまなデータソースと接続してイベントを自動更新し、それをICSファイルとして提供する。

Baïkalの設定

  • Baïkalを使ってCalDAVサーバーを設定し、Docker Composeで簡単にデプロイした。
  • nginxリバースプロキシを使ってWebからアクセスできるように設定した。

イベント分類体系の設定

  • iCalendarのCATEGORIES属性を活用してイベントを分類し、Python enumを使ってデータモデルを作成した。
  • これにより、イベントを簡単に検索したり、色分けしたりできるようにした。

カレンダーのコンパイルと共有

  • IMAP、API、ICSファイルなどを通じてイベントを自動的に取り込み、Baïkalに追加し、これをICSファイルに変換してWebで共有する。
  • cronジョブにより15分ごとに更新されるよう設定した。

業務カレンダーとの共有

  • Google Script Engineを使ってイベントを業務カレンダーにコピーし、CATEGORIES属性に基づいてカラーコーディングを適用した。

結論

  • 6か月間のテストを通じてシステムはうまく機能し、旅行日程の管理に大いに役立っている。
  • 月額100ドルのサーバー費用はかかるが、予定管理の利便性を考えれば十分に価値があると判断している.

1件のコメント

 
GN⁺ 2025-04-11
Hacker Newsのコメント
  • CalDAV は複雑で直感的ではない。Radicale を使ってみたが満足できなかった。個人的に CalDAV サーバーを実装しようとしたが断念した

    • 代わりに iCal ファイルを S3 バケットでホストし、ICSx5 を使って Android で同期した。CalDAV は不要で、HTTPS だけを使う
    • FOSS のカレンダーは依然として物足りず、GrapheneOS では ICSx5 が動作しないため Proton Calendar に移行した。完璧ではないが必要は満たしている
    • iCalendar 形式の利用はよいアプローチだが、ソフトウェアごとに対応機能が異なるため、メタデータは説明フィールドに入れることにした
    • ソフトウェアを使ってさまざまなサイトからデータを収集し、関心のある社会的イベントだけをフィルタリングして、単一のカレンダーにまとめている
  • Radicale は Python で書かれたモジュール式の CalDAV サーバーで、おすすめできる

    • データはテキストファイルとして保存し、git で追跡とバックアップを行っている
    • 認証にはホストシステムの pam を使っている
    • カレンダー共有のため、定期的にスクリプトを実行して、権限のあるすべてのユーザーにカレンダーをシンボリックリンクしている
    • カスタム CalDAV 属性と修正した Web プラグインを使ってアクセス制御リストをサポートしている
    • 公開カレンダーは ACL を通じて public ユーザーに読み取り権限を付与している
  • 個人サーバーで Mailcow(SoGO) と Fastmail を使っている。2つのカレンダーはうまく同期しない

    • Mailcow のカレンダーを他のツールとうまく連携させられず、半自動で同期している
    • Baïkal を試してみたい。Mailcow を別のセルフホストのメールサービスに置き換える機会にもなる
  • 2000年代初頭に Mozilla Sunbird を使って Win2k サーバーでカレンダーをホスティングしていた。CardDAV はなかった気がする

    • すべてのデータを Google Calendar に取り込み、昔の大学の課題などを見ることができる
  • Baikal を数年間使っているが安定している。Thunderbird、DAVx5、Fossify Calendar を使って接続している

    • Fossify Calendar は Simple Mobile Tools のカレンダーアプリからフォークされたアプリで、最も機能が豊富だ
    • 必要なオプションがひととおりそろっていて、使いやすい
  • 写真向けの機能を作りたい。Dropbox や Google から離れたい

    • 写真を記念日、アクティビティ、家族などでグループ化し、スマホに送る機能がほしい
    • デバイスで撮影した写真をサーバーに保存できるようにしたい
    • 2TB 容量の true-nas マシンを3か所に設置し、機能を構築中だ
  • Outlook と Google Calendar を HTTP で同期するのは信頼できない

    • タイムゾーンの問題のせいで、会議時間がいつも間違う
    • 自前のシステムを使えば解決しそうだが、2時間ずれた会議が作成されるのではないかと心配している
  • Baikal は興味深そうだ。以前 DAViCal を使っていたが、iOS のバージョン変更で信頼できなくなった

    • 再挑戦するときは DAViCal、Radicale、Baikal を検討するつもりだ
  • 最近クラウドから離れようとしている。データ移行には2週間かかったが、期待以上にうまく動いている

    • メール以外のすべてのサービスを自前で処理しており、Asus PN40 が大いに役立っている
    • CalDAV は不安定だが、Nextcloud が大半のニーズを満たしている
    • 複数のオープンソースソリューションを組み合わせて、必要なことをすべて満たしている
  • サーバーレスで DecSync を使う方法もある。Thunderbird または Evolution が Android アプリと同期する

    • カレンダー、連絡先、タスク、RSS が他のピアに複製される