外部カレンダーアプリ用のカレンダー購読URL

ユーザー設定に新しいカレンダータブが追加され、Google カレンダー、Apple カレンダー、Microsoft Outlook などの外部カレンダーアプリで Discourse フィードを購読できるようになりました。

:down_arrow:

仕組み

設定 → カレンダータブに移動し、購読 URL を生成をクリックします。次の購読ボタンがワンクリックで表示されます。

  • Google カレンダー — フィードが事前入力された状態で Google カレンダーが開きます
  • Microsoft Outlook — Outlook のウェブ購読ダイアログが開きます
  • Apple カレンダーwebcal:// を介してネイティブのカレンダーアプリをトリガーします
  • URL をコピー — ICS フィードをサポートするその他のカレンダーアプリ用

利用可能なフィード

常時利用可能:

  • ブックマークされたリマインダー — リマインダー日が設定されているブックマーク

discourse-calendar プラグインが有効な場合:

  • すべてのイベント — フォーラムのすべてのイベント
  • マイイベント — 参加予定または関心のあるイベント

プラグイン開発者向け

プラグインは、新しい register_calendar_subscription_feed API を使用して追加の ICS フィードを登録できます。このように登録されたフィードは、プラグインが有効になるとカレンダー設定タブに自動的に表示されます。

セキュリティ

購読 URL は、読み取り専用の ICS 形式アクセスに制限されたスコープ付きのユーザー API キーを使用します。キーにはレート制限が設定されており、URL は生成時に一度だけ表示されます。ユーザーはいつでも再生成でき、古い URL は取り消されます。

「いいね!」 25

@Falcoさん、ありがとうございます。しかし、企業向けオプションを削除するにはどうすればよいですか?私のコミュニティにとって、プロプライエタリ(独自仕様の)サービスへの広告が表示されるのは不快です。

「いいね!」 1

CSSで非表示にできます。

「いいね!」 2

この実装に大変感謝します。これにより、多くのコミュニティにとってカレンダー/イベントプラグインの使いやすさが向上します!

@hellekin さんと同じ異論があります。Discourse では、私たちはオープンソース環境にいます。私たちのコミュニティでは、Google Calendar も Microsoft も誰も使用していません。ユーザーがこれらのプロプライエタリなサービスのリンクを必要とする場合、それはアプリケーション側ではなく、ユーザー自身が決定すべきです。したがって、購読 URL の作成ステップ(例:チェックボックスで)で、外部カレンダーサービスの種類を選択できるようにする方が望ましいです。後からではなく、です。

「いいね!」 1

「フィルター」機能強化

私たちのディスコースインスタンスには複数のコミュニティがあります。これらはグループ権限によって分離されており、一部のユーザーは複数のコミュニティのメンバーです。特定のコミュニティのカレンダーエントリのみを表示するように、「Discourse Calendar - All Events」URLをフィルターできると便利です。サンプルURL

https://discourse.example.com/discourse-post-event/events.ics?user_api_key=c2aa22d800dd473b62d199d796742382&group=[groupname]

この機能強化により、特定の(!)コミュニティのディスコースイベントを、例えばWordPressプラグイン「ICS calendar」を使用して、それ自体のウェブサイトで共有することが可能になります。

「いいね!」 2

もう一つの小さな機能強化の提案です。2つの異なるクライアント(例:2台のデバイス上のThunderbird)でDiscourseのイベントを購読したい場合、URLを2回コピーする必要があります。しかし、現在URLは1回しか表示されません。2番目のクライアントを追加すると、URLを再生成する必要があり、最初のURLは失われます。

「いいね!」 1

それらのグループのいずれかのユーザーによって生成されたフィードは、すでにそのように機能しているのではないでしょうか?テストしましたか?

1回だけコピーして、必要な2つのクライアントに貼り付ける必要があります。

クライアントを忘れた場合でも、ワンクリックで再生成できます。

「いいね!」 2

これはかなり良いですね。フィードのアイデアとしては、「保存された検索」(Saved Searches) プラグインも考えられます。

[quote=“Falco, post:7, topic:398902”]一度コピーすれば、必要な2つのクライアントに貼り付けるだけで済みます。

そして、クライアントを忘れた場合は、ワンクリックで再生成できます。

[/quote]

理解していますが、私の言いたいのは、URLが最初に表示された後に必要な再生成についてです。

カレンダーリンクを2台の異なるデバイスで使用する場合、それらは同時に設定できない可能性が高いです。最初のデバイスからDiscourseプロフィールにアクセスし、後で2番目のデバイスから再度アクセスします。古いURLを再度表示し、明示的なリクエストによってのみ無効にする方が良いでしょう。

私が2つの異なるコミュニティ(およびそれらの権限グループ)のメンバーである場合、「https://discourse.example.com/discourse-post-event/events.ics」には**両方**のコミュニティのイベントが表示されます。そこまでは正しいです。しかし、それぞれのコミュニティには独自のウェブサイトがあるかもしれません。Discourse のイベントをそれらのウェブサイトで共有したい場合、「コミュニティA」のイベントだけを表示したいのであり、「コミュニティB」のイベントは表示したくありません。逆も同様です。

「いいね!」 1

Google カレンダーと併用していますが、非常に素晴らしいです!

ただし、イベントの変更(編集や削除)は反映されていないようです。

以下が Google カレンダーの埋め込みコードです:

そして、私のサイト上のカレンダーです。ここでは「Test event number 5」を削除し、「A fourth test event」を移動させたことが確認できます:

https://spokes.nz/upcoming-events/month/2026/3/1

これらが Google と同期していない原因について、ご存知でしょうか?

「いいね!」 1

Google カレンダーは1日平均2回更新を取得するため、変更が反映されるまで数時間かかる場合があります。

「いいね!」 2

ああ、そうですか、今同期されましたね。

それはとても良い情報です。最後の瞬間の変更が自動的に反映されたり、通知されたりするとは期待しないでください!

他のサービスでも同様の仕組みでしょうか?

「いいね!」 1

他のプロバイダーのカレンダーサービスについてお話ししているなら、基本的な仕組みは同じで、1日に1〜2回程度です。当時は、同期回数を増やす解決策が見つかりませんでした。その後、世界中で同期するカレンダーの数が膨大であることを考えると、これは当然のことだと気づきました :rofl: サーバーが過負荷にならないように制限しているのだと思います!

もしかしたら私の勘違いかもしれませんが。

「いいね!」 2

いくつかの実機テスト後のフィードバック:

背景:当社の Discourse インスタンスは、それぞれ個別の権限グループを持つ複数のユーザーグループ/コミュニティで共有されています。各グループにはメインカテゴリが一つずつあり、このカテゴリは公開されており、そのコンテンツは Fediverse(Discourse ActivityPub)にフェデレーションされています。また、公開カレンダーも表示されます。例 (https://forum.netzwissen.de/c/meshcore-str/84):

Pasted image 20260401075142.png

カレンダーには、メインカテゴリおよびサブカテゴリの投稿から作成されたイベントが表示されます。サブカテゴリ(コミュニティの権限グループを持つ「ログイン済み」ユーザーにのみ表示される)のイベント投稿は、匿名ユーザー(ログインしていない)向けのメインカレンダーには表示されません。完璧です。これは期待通りの動作です!

ICS カレンダーリンクを「機能完備」にするために、以下の 2 つの要件が必要だと考えられます。コミュニティの公開ウェブサイト(CMS: WordPress)で Discourse 内に作成されたイベントを共有する際に、新しい ICS カレンダーリンクを使用しています。

  1. ICS ファイルに表示されるイベントをコミュニティ/権限グループで「フィルタリング」できるようにする。提案する構文:
[ics_calendar url="https://discourse.example.com/discourse-post-event/events.ics?user_api_key=[xxxx];group=[discourse_group_id]"]
  1. ICS ファイルには「公開」ステータスのイベントのみを表示する。「非公開」または「スタンドアロン」ステータスのイベントは、原則として ICS ファイルに公開されないようにする。注:この機能が既に実装されているかどうかはまだテストしていません。
「いいね!」 1

素晴らしい追加ですね!:clap:

残念ながら、カレンダープラグインが有効になっており(しかも普段から頻繁に利用している)にもかかわらず、ユーザー向けの URL を生成すると「ブックマーク」の購読のみが作成されます。なぜこのようなことが起こるのか、何かご存知でしょうか?

また、@Thomas_Rother さんのご意見に賛成です。購読 URL は無効化または再生成されるまで表示されるべきだと思います。デバイスやアプリは時間とともに変化するため、1 つ追加したいというだけで、すべてのデバイスで再度購読し直すのは手間がかかり、不要に思えます。イベントデータの機密性に応じて、プラグインの設定オプションとして対応できるようにするのはいかがでしょうか。

「いいね!」 1

表示させるには、「Discourse post event enabled」設定を有効にする必要があります。

「いいね!」 1

長年、投稿イベントを使用しています:

以前は別々のプラグインを使用していたインストールに問題があるのでしょうか?また、プラグインの無効化と再有効化を試みましたが、問題は解決しませんでした。

「いいね!」 1

まさにこの機能を求めてここに来たので、実装されて本当に嬉しいです!

@hellekin@Thomas_Rother の企業リンクに関するフィードバックに賛成です。これらをオプションにできると素晴らしいですね。デジタル主権を信じて Discourse を利用している人々にとって、これらのロゴが表示されるのは適切ではありません。

より重要なのは、この機能の発見性です。現在はユーザー設定の中に埋もれていますが、カレンダー UI のナビゲーションに直接表示されると喜ばれるでしょう。「今後のイベント」をクリックして、そこから購読リンクが表示されるのが理想です。:1st_place_medal:

「いいね!」 2

ここに解決策があります

「いいね!」 1