Chienomi

Linux環境でCalDavを使ったカレンダー利用

Live With Linux::dailyhack

あなたはスケジュール管理をどのようにしているだろうか。

紙の手帳を使っているという人もいるだろう。 というか、私自身、2020年までは紙の手帳を使っていた。 2018年まではシステム手帳を使っていたが、携行性のために2019年と2020年はコンパクトなノート型小型の手帳を用いていた。

だが、現代の多くの人は電子デバイスを用いているだろう。 それが当たり前になっている環境だが、実のところスケジュール管理に関する利便性の高い環境というものはない。

すべてをAppleで固めているユーザーの場合、iCloudを使うことで問題は基本的に解決する。 PCがWindowsの場合も、Windowsシステムのカレンダーを使うなら解決可能だが、結構微妙な話になってくる。

そして、Androidを使っている場合はより難しい。 直接iCloudのカレンダーを扱う方法はなく、Androidのシステムのカレンダーに取り込む必要がある。 この場合、Androidのシステムのカレンダーは端末ではなくGoogleアカウントに取り込まれるもので、Googleに予定の管理をされるようになる。 この予定の情報をGoogleに公開しない方法はなさそうである。 この場合は、プライバシーという観点ではGoogleカレンダーを使うのと変わらない。単に直接か間接かである。

結局クロスプラットフォームという点を満たそうとすると、Googleに下るよりない形になる。 Googleカレンダーであれば各プラットフォームに対応アプリがあり、一見問題がなさそうである。

ところが、実際はそうもいかない。 もちろん、Googleに依存することに対しての拒否という問題があるが、それがなかったとしても、Googleカレンダーは微妙に互換性がなく、任意のカレンダーアプリを使えるようになっていない。 例えば、Googleカレンダーは定期的なイベントを編集するとそれを大量にエンティティとして溜め込んでしまったりする問題もあるし、カレンダーの項目としても交換が難しい。

つまり、自分は全部Googleで固め、関連する他の人も全部Googleで固めるというロックインを必要とする形になる。 そしてGoogleカレンダーのエクスペリエンスはそもそもそんなに良くないから、納得というか、すごく妥協の上の話になってしまう。

ではそれを嫌った場合にどうするのか。

まず、カレンダーの共通フォーマットとしてiCalendar(RFC5545)がある。 これをHTTP経由でダウンロードするウェブカレンダー、あるいはWebDAV経由でアクセスするCalDAVを用いることでネットワークアクセスでき、マルチデバイスで共有アクセスできるようになる。

そこで仮に、CalDAVサーバーを使うという判断をしたとする。 CalDAVサーバーはあまり広く提供されていないため、基本的にはセルフホスト型ソリューションになる。 この記事を読んでいるユーザーなら望むところだろうが、むしろ問題はクライアントにある。

Windowsの場合、基本的にシステムカレンダーへの同期という話になるようだ。 Thunderbird (+Lightning)など手段はあるにはあるが、実際のところかなり乏しい。 WindowsのシステムカレンダーがMicrosoftに対して秘匿されるのかはいまいち定かでない気がするのも気になる。

Appleの場合はシステム(Appleアカウント)に同期。 Appleは完全にロックインするスタイルなので、Appleデバイスを愛用していてAppleに対して情報を秘匿したい人はいないと私は理解している。

Androidの場合もシステムに同期。これはどうしてもGoogleに対してオープンになってしまう。 AndroidはCalDAVクライアントが軒並み消えており、CalDAVサポートしていたものが機能削除されていたりするので、多分Google側の意向なのだろう。

こうした様々な問題から、ストレスフリーなデジタルカレンダー生活は現状送ることは不可能である。 本記事では、コストと労力を支払うことで、プライバシーと活用範囲を重視して構成することを目標とする。

無難だが今回は扱わない話題

NextCloudを使うと、かなりの範囲で問題を解決できる。

だが、この場合は「NextCloudをホストする」というハードルがそれなりに高いという問題に当たる。 NextCloudを使う場合に考慮すべきことは、それだけで1つの記事にできるほど多く、少なくとも私の要求においてはNextCloudではない他のソフトウェアをうまく組み合わせるほうが、ずっと良く要求をカバーできる。 カレンダーアクセスという点ではCalDAVサーバーをホストするよりもNextCloudのほうが良いが、そのためにホストできるほどソフトウェアが軽くない。

自分だけが使う、NextCloudだけを動かすサーバーを用意する場合、うまく構成すれば(もちろんswapも用いる前提で)2GBメモリのホストで事足りる。 コスト的には、2000〜3500円/月くらいだろうか。

気が向けば、このあたりの話題も記事にするかもしれない。

サーバー

LinuxにおいてCalDAVサーバーを立てるのはあまり難しい話ではない。 おそらく最も人気のある実装はBaïkalだろう。あとはXandikos, Radicale, kcaldavあたり。

私は色々試した結果、Radicaleを使うことにした。

Radicaleの構成は基本的には公式ドキュメントに従えば良い。 特に困る要素もなかったので、ここでなにか特別な解説を加えたりはしない。 ドキュメントに記載されていないことで困ったという声が寄せられて、かつ私がすぐ答えられるようなことであれば追記するかもしれない。

Linux上のクライアントの問題

PIM

PIMはアドレス帳, TODO, カレンダー, eメールなどを統合的に扱うソフトウェアである。 これらの機能は、ほとんどがCalDAVサーバーにあり、WebDAVを介するものである。 eメールだけは別だ。

理想的にはPIMがパーフェクトに機能し、それが全てを解決してくれることである。 さらに、それが特定のPIMにロックインされず、「あるデバイスではこのPIMを使うことですべてにアクセスできる」であることが理想だ。

だが、理想とわざわざ言っていることから分かるように、そううまくはいかないのが現実である。

まず、PIM自体がどうしてもシステムと連携したい都合上、システムと密接な関係にあるソフトウェアになりやすい。 これが取り回しを悪くする。 そして、システムに密接な関係にないPIMは、微妙なことになりやすいのだ。

Vivaldi

VivaldiにはPIM機能が入っている、ということを知っている人はそれなりにいると思うのだが、

  • メールはPlainメソッドでしか認証できない
  • メールがめっちゃエラーになる
  • 全体的にログインセッションが消えやすい (大量に再ログインさせられることがある)
  • カレンダーのイベントの変更・削除がエラーになる
  • 連絡先の同期(CardDAV)に対応していない

などなど、正直使い物にならない。

また、この機能はデスクトップ版にしか存在しないため、Vivaldiを使うことでモバイルの問題も解決せず、どこまでいっても「ちょっと使えないなぁ」である。

Thunderbird

Mozilla ThunderbirdにはLightningというカレンダーまわりのプラグインがある。 これはもともとLightningという別のソフトウェアで存在していたものがプラグイン化されたものだ。

一見これで問題なくクロスプラットフォームなPIMとして機能しそうなのだが、そうもいかない。

まず、イベントの通知にかなりクセがあり、Dismiss allした際にイベントそのものを更新してしまったりする。 要因は様々あるのだが、なかなか通知が思うようにならない。

次に、CardDAVがCalDAVと連携していない。 これはめんどくさいだけで、すごく困るわけではないのだが。

設定できないVENENT項目は

  • COMMENT
  • PERCENT-COMPLETE
  • PRIORITY
  • CLASS
  • PRIORITY
  • STATUS
  • FREEBUSY
  • RESOURCE
  • RECURRENCE-ID
  • RELATED-TO
  • URL

Thunderbirdは「妥協できそうなライン」のソフトウェアではある。

GNOME環境

GNOMEの場合は、Gnome Calendarというソフトウェアがある。

GNOMEを最小で入れている人は少ないと思うので大丈夫だとは思うのだが、このソフトウェアはGNOMEのカレンダー機能であると同時に、EvolutionのUIでもある。 Gnome Calendarの内容はGNOMEとして管理されており、Evolutionと共有である。アカウント設定もGnome Online Accountの一部となっていて共通。

GNOME45まではGnome Calendar自体はローカル、iCalファイル、ウェブカレンダーは自前で扱えたのだが、他はGnome Online Accountに依存していた。 CalDAVアカウントはGnome Online Account(ソフトウェア)になく、Evolutionで追加する必要があり、CalDAVアカウントを追加するためにEvolutionが必要となる。

Gnome Online Accountへの追加後にEvolutionがいなくなっても機能する。

Gnome CalendarとEvolutionではUIが異なり、書ける項目も微妙に違う。

設定できないVEVENT項目は

  • COMMENT
  • PERCENT-COMPLETE
  • PRIORITY
  • RESOURCE
  • RECURRENCE-ID
  • RELATED-TO

設定できる項目がとても多くて優秀だが、項目の表示/非表示がコントロールできるため使いやすい。

アカウントの連動はできないが、Calendar, Address book, Journal, TODOに対応している。

Cinnamon環境

CinnamonのカレンダーウィジェットはGNOMEのものとは別なのだが、データ自体はGNOMEのものを使う上に、イベントはGnome Calendarで開くようになっている。 つまり、CinnamonにとってGnome CalendarはGnome Terminalのように、必須ではないがあるべきソフトウェアである。

だが、前述のようにGNOME 45まではCalDAVを使うためにEvolutionが必要で、EvolutionはGnome Desktopに依存しているという問題があった。 この問題は、Gnome Online Account 46にCalDAVが追加されたことで解消される見通し。

Gnomeに登録されたイベントはCinnamonのカレンダーに表示され、このカレンダーウィジェット経由でGnome Calendarのリマインダーも表示される。

KDE環境

KDEの中核的な存在と言ってもいいKDE PIMのKorganizerがある。 KDEの中でもめちゃくちゃ重いソフトウェアなので、他の環境で使うのはなかなか厳しい。

KDE PIMに関しては、ほぼ「部分的に使う」なんてことは考慮していない仕様で、仮に一部だけ使うとしてもちゃんと全コンポーネント設定しないと機能が欠けてしまう。

設定できないVEVENT項目は

  • CATEGORIES
  • COMMENT
  • PERCENT-COMPLETE
  • STATUS
  • FREEBUSY
  • RECURRENCE-ID
  • RELATED-TO
  • URL

VENETにFREEBUSYを設定できないが、一方で珍しくVFREEBUSYに対応している。

Windowsクライアント

基本的にはOutlookになる。 結構高いサブスクスービスなのが最大の難点。

またはCalDAVをWindowsカレンダーへ同期する。 Windows自体の機能はプロバイダーを限定しているため、同期用のソフトウェアが必要。

有力なサードパーティソフトウェアはThunderbirdくらいのもの。 あとはeM Clientだろうか。

ウェブクライアント

モバイルの場合、本当に端末に同期する以外にどうしようもない。 そこで有力だと考えられるのがウェブクライアントだ。

ウェブクライアントを使えば、どのプラットフォームであってもシステムに依存せず利用可能だ。 CalDAVは基本的に認証が必要になるだろう。そのため、パスワードマネジメントだけは考える必要がある。

簡単な話に思えるかもしれないが、案外難しい。 というのも、CalDAVウェブクライアントもあまり活発な分野ではなく、だいたいのプロジェクトが非活であるためだ。

もっとも著名なのはagendav。 こちらは2年前にメンテナンスモードになっている。

次いでCalDavZap。 8年前に開発が止まっている。 そして、ソースリポジトリももう行方不明、開発者も音信不通だ。

その他の候補として考えられるのはBlobven App. 有名ではない個人プロジェクトで、こちらももう動いていない。

どうしよう、選択肢が消滅してしまった。

そんな中、私はCalDavZapを選択した。

CalDavZapはアプリケーションサーバーを必要としない(CalDavサーバーを除く)SPAである。 クライアント完結で動くことにはかなりのメリットがある。

まず、CalDavZapはJQueryを用いており、(最近のTypeScriptやReactを用いたプロジェクトと違い)ビルドプロセスがない。 ビルドプロセスがあるプロジェクトは、「ビルドできなくなる」という問題が発生しやすいが、JavaScriptの後方互換喪失は滅多にないし、WebDavもiCalも相当枯れたフォーマットなので今更変更されることは考えにくい。 だから、ずっと更新されなくても、「動く」期待値は高い状態が維持されるのだ。 「古い」ことが功を奏している部分がある。

もちろん、セキュリティ上の問題は発生する可能性があるが、そもそも通信部分がCalDavサーバーとの間にしかない構造のため、攻撃を受けうる箇所がだいぶ限定されている。 安心とは言わないが、神経質にメンテナンスしないとやばいタイプでもない。

CalDavZapの操作性はかなり悪い(特にアニメーションが遅すぎるのが体験を悪くしている)が、機能自体はかなり豊富。 当然通知などはないため、モバイル中心で扱うことには適さないが、PC中心でモバイルは出先でイベントを確認したり登録したりする用という扱いであれば十分使える。

SPAになっている関係で、パスワードマネジメントがうまく働かないことがある。 この問題は、サーバーとCalDavZapを同一ドメインにして、サーバーにログインする際にパスワードを覚えさせるとCalDavZapでも補完してくれたりする。

CalDavZapの設定はreadme.txtconfig.jsを読めばできる方式。

「快適さ」はかなり限定される……が

NextCloudのほうがずっと整ってる

もう一度言うが、NextCloudを使えばこんなに苦しまないで済む。

NextCloudの構築は重いが、結局CalDavサーバーを用意するのだってサーバーが必要なのだし、NextCloudは技量に不安があればアプリイメージが各社VPSに用意されていたりする。(例えばConoHa, XServer VPS, シンVPS, Vultr…)

そもそもiCal/CalDavはXMPP並の苦しい状況にあり、いつ消滅してもおかしくないレベルだ。 iCal自体は一応色んなところで使われているけど、これだっていつまでかは怪しい。 そして、もうひとつの構成要素であるWebDavも割と死に体だ。 WebDavのクライアント探しも同じようなレベルで苦労する。

また、iCalが割と筋が悪いフォーマットというのもある。 イベントが増えればそれだけファイルが大きくなっていき、ファイルまるごとダウンロードするからダウンロード量が増えていく仕組みで、同期して使うのに適していない。

オープンだが旧態依然としたCalDavが捨てられ、人気があり支持者の多いNextCloudが生き残る、というのは最近のウェブ業界ではよく見る構図。 なので相当な苦しみを背負う道ではある。

私にとっては良い

だが、あくまで私の環境で見れば、NextCloudを使うよりも快適である。

まず、私はデスクトップは最近はCinnamonしか使わない。 なので、Gnome Calendarがあるとかなり快適に使える。

現状ManjaroのGNOMEは45なので、Evolutionを必要とし、結果Gnome Desktopが必要になってしまうが、Cinnamonがある状態を前提にするとGnome Desktopの依存は結構浅くて、それ自体もそこまで重いわけではないためめちゃくちゃ気になるかというとそうでもない。 さらに言うなら、Evolution自体が普通に使いやすいソフトウェアなので、カレンダー以外でEvolutionを使っても「まあ、いいかな」と思えるレベルなのも大きい。まぁ、使ってはいないが。

vJournalやvTodoは利用しておらず、タスク管理にはMattermostのBoard機能を使っている。 また、日記はRedNotebookをクラウドドライブで同期する方式を取っている。 モバイルからは日記が書けないため、書きたい内容をMattermostに送信してPCでコピペする方式。タスク管理はさすがにモバイルではやらないだろう。

メールに関してはPCはClaws Mail、AndroidはAqua Mailを使っている。 これについては申し分なく快適である。 連絡先の共有はそもそもしていない、というか連絡先を使うことがない。 なお、やろうと思えばの話になるが、そもそもCardDAVはvCardとWebDAVの組み合わせで、WebDAVはHTTPなので、HTTPで同期するジョブスケジューラを組むだけでClaws Mailと連携することは可能。 ただし、Claws MailのvCardサポートは「読むだけ」。

vTODO相当の管理はEvolutionでやっても良い。 チケット管理するほど壮大なものではないミニタスク(例えば日常のお買い物)を登録すればそれはそれで便利に使える。

というわけでCalDAV/CardDAV環境があれば便利に使える状態が揃っていて、私はCinnamonしか使わず、適材適所で使い分け、カレンダーまわりはGNOMEで満足している、という状況だと、Radicaleがあることでだいぶ快適に使える状況は揃っている。

また、Googleやモバイルアプリを1ミリも信用していない私の場合、多少使いにくかろうがSPAのウェブアプリケーションというのはちょうど良い。 モバイル環境に関しては使い勝手よりプライバシーが大事だ。 そもそも私がスマートフォンをあんまり触らないし、ちょっとした作業でもPCでやるのが基本としているので、モバイルであれこれできるようにしてほしいとか、使いが手よくして欲しいというのがあんまりない。最低限機能するならそれで良い。

こうした私の使い方・要求がうまく噛み合って、この環境はかなり快適に使える。

PCのみでいいなら……

iCal, vCardともに普通にテキストファイルである。 このこと自体は正直悪くない。iCalをウェブでそのまま使おうという発想がいまいちなだけだ。

これを前提にした技として、iCalのファイルとvCardのファイルをクラウドドライブで同期するという技がある。 またはGitなどで同期しても良い。 自分でサーバーをホストする必要もないため、お手軽かつ効果的。

アプリはiCalの「インポート」ではなく、iCalを読み書きする(つまり、iCalファイルをカレンダーにする)機能を持っている必要がある。 少なくともEvolutionはできる。 vCardも同じだが、vCard形式をサポートしてるメールクライアントはそれなりにあるため、こちらのハードルはより低いと思う。

モバイルではクラウドドライブでの同期自体はできても、ローカルのiCalやvCardが外部から更新されるという状態を扱えるアプリがないため、無理め。

ファイル共有ができるクラウドドライブを使っている場合、同じ方法で人に共有することも可能だ。

iCalのファイル共有ありきで「作成する」という機能を持っているカレンダーはあまりないため、ファイルを予め用意してあげる必要がある。 フォーマットとしてはこんな感じ。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CHIENOMI//NONSGML Version 1//JA
END:VCALENDAR

vCardを作る必要がある場合はこんな感じ。

BEGIN:VCARD
VERSION:3.0
END:VCARD

本記事のポイントまとめ

  • CalDAVはXMPP並に滅びかけ、環境がつらい
  • この手のやつのセルフホストで唯一まともに環境が整ってるのがNextCloud
  • NextCloudはアプリイメージもあるので、敷居もCalDAVより低いまである
  • GNOME/CinnamonユーザーはGnome Calendar/Evolutionがかなり良い
  • Vivaldiはつらすぎる。Thunderbirdはまだイケる
  • CalDAV WebUIは使い勝手やおしゃれさはともかくとしてCalDavZapがなかなか良い
  • PC的にはiCalファイル, vCardファイルを共有するだけで事足りる