Ethsim2
(Ethan )
1
Discourse インスタンスの再構築に成功しました🥲
Discourse の公式 discourse-calendar プラグインは、すでに .ics エクスポートをサポートしており、Discourse イベントを外部と共有するのに非常に役立ちます。しかし、多くのコミュニティ、特に教育、政府、エンタープライズでは、イベント情報(例: Moodle、Office365、Google カレンダー、または組織の CMS プラットフォームから)を公開するために、外部の iCal フィードに依存しています。
現在、.ics ソースからのインポートまたは同期の組み込み方法はありません。これにより、すでに重要なスケジュールを他の場所に公開しているコミュニティにとって、Discourse を真のカレンダーハブとして使用することが制限されます。
機能提案
Discourse Calendar プラグインにiCal フィード同期(.ics URL からのインポート)を追加します。
コア機能
- カレンダー対応のカテゴリまたはトピックに対して、.ics フィード URL を設定します。
.ics フィードと一致するように、イベントをカレンダーに自動的にインポートします。
- 同期間隔(例: 毎時、毎日)を指定するか、手動の「今すぐ同期」ボタンを許可します。
- イベント UID フィールドを使用して、重複を防ぎ、変更されたイベントをクリーンに更新します。
オプション設定
- インポートされたイベントにタグまたはラベルを付けて、外部ソースを表示します。
- 次のいずれかを選択します。
- 片方向同期(外部 → Discourse のみ)、
- または双方向同期(Discourse 内で同期されたイベントを編集すると、変更が元に戻る — 将来のスコープ)。
- カレンダーごとに複数の
.ics フィードをサポートし、1 つのビューにマージします。
- イベントが外部で同期されていることを示す視覚的な表示(例: 「同期元: outlook.university.edu」)。
ユースケース
| セクター |
ユースケース例 |
| 教育 |
学生フォーラムに学期、コーススケジュール、試験などを自動的に入力します。 |
| 政府 |
CMS またはイントラネットから公式イベントを公開コミュニティカレンダーに同期します。 |
| 企業 |
内部会議カレンダー(Outlook または Google カレンダーから)をミラーリングします。 |
| イベントフォーラム |
外部プロバイダーからのスピーカーリストまたはセッションスケジュールを統合します。 |
セキュリティとプライバシー
- カレンダーフィードは、公開またはトークン化されたアクセス(例: シークレットトークンを含む URL)をサポートできます。
- OAuth2 / Basic Auth のサポートは、将来の拡張機能になる可能性があります。
関連
互換性
この機能は discourse-events(現在は非推奨)を必要とせず、既存の Discourse カレンダー構文([calendar] および [event])とネイティブに連携します。ユーザーは引き続きネイティブの Discourse イベントを手動で作成できます — iCal 同期はこれらのカレンダーを補強するだけです。
この機能がすでにロードマップにあるかどうか、またはコミュニティの他の人が価値を見出すかどうか、ぜひお聞かせください。
ありがとうございます!
「いいね!」 5
@Ethsim2 これは非常に大きな機能になるでしょう。Discourse が FullCalendar に移行した今、その実現可能性を調べています。
@sam は最近 fullcalendar.io を直接リンクしましたが、FullCalendar は公式プラグインシステムを通じて .ics フィードのファーストクラスサポート を提供していることがわかりました。そのため、重労働はすでにライブラリによって完了しています。
提案:FullCalendar のネイティブサポートを使用して .ics フィード同期を有効にする
Discourse への FullCalendar v6 の統合により、この機能をネイティブでサポートするための基盤が整いました。
FullCalendar の @fullcalendar/icalendar プラグイン(内部で ical.js を使用)を使用すると、次のように公開 .ics フィードを読み込むことができます。
new Calendar(calendarEl, {
plugins: [dayGridPlugin, iCalendarPlugin],
events: {
url: 'https://example.com/my-calendar.ics',
format: 'ics'
}
});
リモート iCal フィードをカレンダー UI にレンダリングするには、これだけで十分です。カスタム解析は不要で、プラグアンドプレイで利用できます。
Discourse のための推奨実装手順
@fullcalendar/icalendar と ical.js をプラグインに追加します(FullCalendar v6 が完全に展開されたら)。
- 1 つ以上の
.ics URL を入力するための管理者/プラグイン設定(またはカテゴリごとのオプション)を追加します。
- クライアント側で、フィードをカレンダービューにレンダリングします。
- (オプション)サーバー側同期を実装します。
- 定期的にフィードを取得します。
- 新規/更新されたイベントを解析します。
- 関連する Discourse トピックを作成または更新します。
同期頻度
FullCalendar のデフォルトの .ics 処理は、ブラウザでの初期カレンダーロード時のみフィードを取得することに注意することが重要です。これは次のことを意味します。
- 日次または自動更新はありません。
- ユーザーは、リロードまたは手動で更新をトリガーしない限り、古いコピーを表示します。
- 持続性はありません。ユーザーが別のページに移動すると、フィードデータは失われます。
これを真に役立つものにするために、Discourse は理想的には次を行う必要があります。
- フィードをサーバー側で取得する、日次(またはスケジュールされた)Sidekiq ジョブを実行します。
- 解析されたイベントをキャッシュして、ユーザー間で一貫したレンダリングを実現します。
- オプションで、イベントをトピックにリンクするか、完全に統合するために新しいトピックを作成します。
これにより、適切な同期動作が可能になり、以前 Angus のプラグイン によって処理されていた重要な機能が復活しますが、クリーンで保守可能な基盤が使用されます。
利点
- Google カレンダー、Outlook、iCal などからの
.ics フィードをシームレスに統合します。
- Discourse をエクスポートするだけでなく、カレンダーのコンシューマーにします。
- コミュニティフォーラム、学生グループ、市民イベントなどに最適です。
- サポートされている FullCalendar 機能のみで完全に構築されており、カスタム JavaScript はほとんど必要ありません。
カレンダープラグインが再び注目されている今、これが実現するのを見るのが待ちきれません。テストを手伝ったり、概念実証に貢献したりできます。
Ethsim2
(Ethan )
3
申し訳ありませんが、@Halden42 さん、あなたの投稿について少し混乱しています。
Discourse が FullCalendar のアップグレードでカレンダーシステムの「基盤を修正」していることは理解していますが、忙しいカレンダーを手動で入力するのにどれくらいの時間がかかるか心配です。私は毎日すべてのために Discourse GUI を使用しており、インターフェースの外でコンテンツを複製する必要があるのは、現実的ではありません。
Angus のプラグインから私が本当に恋しく思っている機能について言及していることに気づきました。これは、Discourse にイベントを同期するという主なポイントを捉えていると思います。
イベントをトピックにリンクするか、新しいトピックを作成する
これは私のユースケースにとって不可欠な部分です。
しかし、それがどのように実装されるかについて詳細を説明しなかったため、心配しています。実際にはどのようなものになるか説明していただけますか? Discourse はイベントごとに 1 つのトピックを作成しますか? ソースカレンダーが変更された場合、更新または削除をサポートしますか?
それが私が最も頼りにする必要がある部分であり、それがどれだけ近いかまだわかりません。
詳細な返信をありがとうございました。
「いいね!」 2
@Ethsim2 さん、ありがとうございます。素晴らしいフォローアップです。懸念されている点はまさにその通りだと思います。.icsフィードからイベントを表示するだけでなく、Discourseに有用で追跡可能な方法で埋め込むことが重要です。
「イベントをトピックにリンクするか、新しいトピックを作成する」と私が言ったのは、Angusのプラグインが以前機能していたのと似たような設定を想像していました。フィード内の各イベントがDiscourseのトピックに対応し、フィードの更新が時間の経過とともにトピックに反映されるようなものです。
現時点では、FullCalendar自体はイベントを永続化しません。ページ読み込み時にフィードからレンダリングするだけです。そのため、イベントがフィードから削除されると(つまり、外部でキャンセルまたは削除された場合)、カレンダーUIから静かに消えてしまいます。
しかし、これはほとんどのフォーラムベースのワークフロー、特にイベント投稿がディスカッション、出欠確認、または告知に使用される場合には十分ではありません。
これに対する私の提案は次のとおりです。
イベントがフィードから削除されたときにトピックを削除する代わりに、Discourseは次のことができます。
- トピックをそのまま保持する
- 上部に次のような行を追加する:
⚠️ このイベントはキャンセルされたか、ソースカレンダーから削除されました。
- 管理者の設定に応じて、トピックをロックまたはリスト解除するオプション
これにより、コンテキストが保持され、返信が可能になり、キャンセルが可視化されます。何も削除されません。技術的には、これは非常に実現可能です。UIDが.icsファイルに存在しなくなったことをフラグ付けし、対応するトピックの状態を更新するだけです。
したがって、FullCalendar自体はそのステータスを管理しませんが、Discourseは同期レイヤーでそれを処理できます。フィードを取得するジョブ(例:Sidekiq経由)は、以前存在していたがなくなったイベントを追跡し、対応するトピックを適切にマークします。
これに十分な関心がある場合は、適切な仕様を作成できると思います。プロトタイプを作成するのは難しくありません。
「いいね!」 1
Ethsim2
(Ethan )
5
@Halden42、丁寧な返信ありがとうございます。おかげで多くのことが明確になりました。
ここで説明されたこと…
…は、まさにAngusのプラグインから移行して以来、私が復旧しようとしてきた中核的なユースケースです。私にとって最も重要なのは、イベントを視覚的にレンダリングするだけでなく、外部のライブカレンダーをフォーラムに同期することです。各イベントにはトピックがあり、そのイベントへの変更(例:キャンセル、リスケジュール)は時間の経過とともにそのトピックに反映されます。
まずは一方通行の同期モデルで十分です。.icsからDiscourseへの読み取り専用で、基本的な更新検出だけでも私のユースケースの90%をカバーできます。フィードから削除された場合にイベントトピックに「キャンセル済み」ステータスが表示されると、トピックを完全に削除するのではなく、理想的です。
この機能の仕様を提案するのに適した場所があれば、FullCalendarのアップグレードが安定した後かもしれませんが、貢献したりテストしたりすることに非常に興味があります。
重ねて感謝いたします。
「いいね!」 1
Ethsim2
(Ethan )
6
複数のOffice 365カレンダーを維持しています。それぞれに独自の.icsフィードがあり、会議の種類(役員会、公開エンゲージメントセッション、内部ワーキンググループなど)ごとに異なります。これらのフィードは、事務員と管理チームによってすでに適切に構造化され、定期的に維持されています。
緊急に必要なのは、以下の方法です。
- カテゴリごとに異なる
.icsフィードを購読する(例:会議の種類ごとに1つのフィード)
- 対応するDiscourseカテゴリに新しいトピックを自動的に作成する
- トピックが正しいカテゴリに配置されることを検証する。これは、Angusのプラグインがタグやその他のメタデータでフィルタリングできた方法と同様です。
- カレンダーイベントが更新された場合、トピックの変更(時間、タイトル)を反映する
- イベントがキャンセルされたり、フィードから削除されたりした場合、オプションでトピックにフラグを立てるか、閉じる
私たちのような評議会では、カテゴリは詳細な可視性を管理するために使用されます。一部の会議はプライベート(例:役員会や計画会議)であり、その他は公開です。誤って分類されたトピックは、機密データが公開される可能性があるため、カテゴリレベルでの検証は必須です。
今後のFullCalendarのオーバーホールで、このようなものが公式にサポートされることを願っています。これにより、手作業が大幅に削減され、Discourseが会議の調整と透明性のための単一の真実の情報源として、はるかに実行可能になるでしょう。
Ethsim2
(Ethan )
7
私はアメリカの薬学部生で、私たちの大学はカレンダーポータルを通じてすべてのローテーションスケジュール、試験、実習を提供しています。フィードURLは.icsで終わりませんが、Chromeで開くと有効な.icsファイルがすぐにダウンロードされます。したがって、これらはURL構造が異なるだけで、間違いなく標準的なiCalフィードです。
最近まで、Angusのプラグインを使用していましたが、これはこれらのフィードを完璧に処理していました。各イベントはトピックを生成し、異なるフィードを異なるカテゴリ(例:「治療学」、「ローテーション」、「試験」)にルーティングでき、これにより学習グループの整理に役立ちました。
しかし、最近のthis.routerエラーでプラグインが破損して以来、Ethsim2のように無効にせざるを得ず、カレンダーを同期させる簡単な方法がなくなりました。
公式プラグインが以下をサポートできれば、
- 受信
.icsフィード(URLが.icsで終わらなくても)
- カテゴリターゲティングによるトピック作成
- フィード固有の設定(例:1つのフィード→1つのカテゴリ)
- 更新検出とオプションのイベントキャンセル処理
…Discourseは学術コラボレーションのための強力なツールになります。プラグインが破損する前は私たちにとって完璧に機能していたので、この機能がネイティブで実装されることを願っています。
テストに役立つ場合は、サンプルカレンダーURLをプライベートで共有できます。
Ethsim2
(Ethan )
8
これはOffice 365にも当てはまります。米国の多くの大学がそのエコシステムを使用していると理解しています。
Lilly
(Lillian Louis)
非表示:
10
元々はユーザーとその別アカウントだったため、リストに載っていません。しかし、アカウントが統合され、ユーザーが自分自身とやり取りしているように見えるため、トピックが混乱しています。