| 概要 | リーダーボード、自動投稿、バッジ授与を備えた期間限定チャレンジを実行します。 | |
| リポジトリリンク | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| インストールガイド | Discourse でのプラグインのインストール方法 |
現在のバージョン: 1.3.0 (更新日: 2026/3/27)
ライセンス: MIT
ストーリー
私は Discord から Discourse に最近移行した健康・ウェルネスコミュニティを運営しています。Discord 時代には、カスタムボットを構築して月次フィットネスクチャレンジを実行していました。メンバーは日々のトレーニングを投稿し、ボットがチェックインを追跡し、週次のリーダーボードを投稿し、月末に勝者を発表していました。これは私たちの最も人気のある機能の一つでした。
Discourse への移行後、メンバーから再びチャレンジ機能を提供してほしいという要望が寄せられました。既存のプラグインを探しましたが、見つかりませんでした。そこで、自分で構築することにしました。
当初は簡易的な解決策として始めたものが、実際には元の Discord ボットよりも優れた機能豊富なチャレンジシステムへと発展しました。他のコミュニティにも役立つかもしれないと考え、ここで共有します。
機能
discourse-daily-challenge を使用すると、Discourse 内で構造化された期間限定チャレンジを実行できます。メンバーは、特定のトピックにハッシュタグまたは写真を投稿することでチェックインします。プラグインがすべてを自動的に追跡します。
コア機能
柔軟なチェックイン
メンバーは、設定されたハッシュタグまたは写真添付付きで、チャレンジトピックに投稿することでチェックインできます。チェックインモードは「毎日」または「毎週」に設定可能です。チェックインの時間枠は、チャレンジで設定されたタイムゾーンで評価されるため、グローバルなコミュニティでも正しく機能します。
リアルタイムリーダーボードと連続記録
管理ダッシュボードには、参加者ごとの総チェックイン数、現在の連続記録、達成率がリアルタイムで表示されます。連続記録のラベルは、チャレンジ間隔に応じて自動的に「日連続記録」または「週連続記録」と表示されます。
自動リーダーボード投稿
週次の自動リーダーボード投稿を、指定した曜日と時刻にチャレンジトピックに設定できます。また、チャレンジ終了の翌日には、最終結果の投稿も自動的に生成されます。
カスタムバッジ
「完了」と見なされるために必要な最小チェックイン数を定義できます。該当する参加者は、チャレンジ終了時に自動的にカスタム Discourse バッジを受け取ります。バッジ名はトピックタイトルから自動的に設定されます。
同時複数のチャレンジ
同時に任意の数のチャレンジを実行できます。各チャレンジには独自のトピック、スケジュール、タイムゾーン、バッジ、リーダーボードが割り当てられます。
アーカイブされたチャレンジ
完了したチャレンジは、ダッシュボード内のアーカイブされたアコーディオンビューに保存されるため、過去の結果を振り返ることができます。
管理者によるチェックイン管理
管理者はチェックインを手動で追加または削除できます。見落としの投稿の捕捉や紛争の解決に役立ちます。
手動リーダーボードトリガー
「今すぐリーダーボードを投稿」ボタンを使用すると、スケジュールされた時間枠外でも管理者がリーダーボードの更新を即座に公開できます。
モデレーターアクセス
サイト全体のモデレーターは、専用のサイドバーセクションを通じてチャレンジの作成、編集、管理が可能です。サイト設定で有効または無効にできます。
カテゴリモデレーターアクセス
カテゴリモデレーターは、割り当てられたカテゴリにスコープされたチャレンジを /challenges ルートを通じて管理できます。管理者アクセスは不要です。サイト設定で個別に有効または無効にできます。
インストール
containers/app.yml の hooks > after_code > exec > cmd の下に以下を追加してください:
- git clone https://github.com/R23DPrinting/discourse-daily-challenge.git
その後、再構築を実行します:
cd /var/discourse && ./launcher rebuild app
初期インストール後、変更ログに特に記載がない限り、今後のアップデートはパネル内の「更新」ボタンを通じて適用できます。
設定
チャレンジの作成
管理 → プラグイン → チャレンジ → Discourse Challenges に移動し、新しいチャレンジをクリックします。
| フィールド | 説明 |
|---|---|
| トピック ID | メンバーがチェックインする Discourse トピック。トピックタイトルはバッジ名フィールドに自動的に設定されます。 |
| ハッシュタグトリガー | チェックインに必須のハッシュタグ(# を含まず、例:workout) |
| チェックイン間隔 | 毎日または毎週のチェックインモード |
| 週の開始日 | 週次チャレンジの場合:週の開始日(日曜日、月曜日、または土曜日) |
| 開始日 | チャレンジの初日(含む) |
| 終了日 | チャレンジの最終日(含む) |
| チャレンジタイムゾーン | チェックイン時間枠を評価するためのタイムゾーン(オプション、デフォルトは UTC) |
| 必要なチェックイン数 | 完了バッジを取得するための最小チェックイン数 |
| 説明 | チャレンジのオプションの説明 |
| 週次リーダーボード投稿を有効化 | 自動週次リーダーボード投稿の有効/無効切り替え |
| 投稿曜日 | 自動リーダーボード投稿の曜日 |
| 投稿時刻 | 自動リーダーボード投稿の時刻(0–23、チャレンジタイムゾーン基準) |
| 完了バッジを授与 | チャレンジ終了時の自動バッジ授与の有効/無効切り替え |
| バッジ名 | 作成・授与するバッジの名前。トピックタイトルから自動的に設定されます |
サイト設定
| 設定 | デフォルト | 説明 |
|---|---|---|
daily_challenge_enabled |
true |
プラグインをグローバルに有効または無効にする |
daily_challenge_mod_access_enabled |
true |
サイト全体のモデレーターがチャレンジを管理できるようにする |
daily_challenge_category_mod_access_enabled |
true |
カテゴリモデレーターが割り当てられたカテゴリ内のチャレンジを管理できるようにする |
チェックインの仕組み
- メンバーがチャレンジトピックに返信を投稿します。
- 投稿には設定されたハッシュタグまたは写真添付が含まれている必要があります。
- プラグインは、メンバーが現在の期間(チャレンジ間隔に応じて日または週)にすでにチェックイン済みかどうかを確認します。
- 未チェックインの場合、チェックインが記録され、リーダーボードが更新されます。
- 1 期間あたりメンバー 1 人に 1 回のチェックインのみ許可されます。
管理者は管理ダッシュボードからすべてのチェックインを表示・管理できます。
モデレーターおよびカテゴリモデレーターアクセス
サイト全体のモデレーターは、daily_challenge_mod_access_enabled がオンになっている場合、メインサイドバーの CHALLENGES セクションを通じてチャレンジ管理にアクセスできます。
カテゴリモデレーターは、/challenges/dashboard および /challenges/challenges でスコープされたバージョンにアクセスできます。これらは割り当てられたカテゴリのトピックに関連付けられたチャレンジのみを表示・管理できます。これには daily_challenge_category_mod_access_enabled がオンであること、およびユーザーが管理 → カテゴリ → [カテゴリ] → モデレーションを通じてカテゴリモデレーターとして割り当てられていることが必要です。
自動投稿
週次リーダーボード
プラグインは毎時バックグラウンドジョブを実行し、週次リーダーボードを投稿するタイミングかどうかを確認します。設定された曜日と時刻(チャレンジタイムゾーン基準)に達すると、現在の順位を表示するフォーマットされた投稿がチャレンジトピックに作成されます。
最終結果投稿
チャレンジ終了の翌日、最終結果投稿が自動的に公開されます。これにはすべての参加者、総チェックイン数、完了ステータスがリストされ、バッジ授与者に祝辞が送られます。
データベーステーブル
daily_challenges— チャレンジ定義daily_check_ins— ユーザー・チャレンジ・期間ごとの個別チェックイン記録
互換性
- Discourse 3.x 以降
- セルフホスト環境でテスト済み
- Ruby 3.x, Rails 7.x 以降
ロードマップ (v1.4.0)
- @ChallengeBot メンションコマンド — メンバーはチャレンジトピックでボットアカウント@ChallengeBotをメンションすることで、DM を通じて個人の統計(
status、leaderboard、streak、help)を取得できます。 - チェックイン確認 DM — 各成功したチェックイン後に現在の連続記録情報を含む自動 DM
- リマインダー DM — チャレンジごとのオプション設定。毎日チャレンジでは 2 日以上見逃した場合に促しを送信し、週次チャレンジでは週末日にまだチェックインしていない場合にリマインダーを送信します。
変更履歴
v1.3.0
- カテゴリモデレーターアクセス — カテゴリモデレーターは、
/challenges/dashboardおよび/challenges/challengesを通じて、割り当てられたカテゴリのチャレンジの作成、編集、削除、チェックイン管理が可能。管理者アクセス不要。 - バッジ名の自動設定 — トピック ID を入力すると、バッジ名フィールドがトピックタイトルから自動的に設定されます。
- バッジ名の検証 — 「完了バッジを授与」が有効な場合、バッジ名は必須。500 エラーではなく適切なエラーを返します。
- 独立したモデレーター/カテゴリモデレーター切り替え —
daily_challenge_mod_access_enabledとdaily_challenge_category_mod_access_enabledを個別に切り替え可能。
v1.2.0
- 設定可能なチェックイン間隔 — 毎日または毎週のチャレンジを実行可能
- 週の開始日設定 — 週次チャレンジで、週の開始日を日曜日、月曜日、または土曜日を選択可能
- 間隔を考慮した連続記録 — 連続記録ラベルと計算がチャレンジ間隔を反映するように変更
- モデレーターアクセス — サイト全体のモデレーターが専用のサイドバーセクションを通じてチャレンジを管理可能
- 管理 UI 内で「Discourse Challenges」に改名
v1.1.1
- 複数のチャレンジを同時に表示するマルチチャレンジダッシュボード
- 過去の結果を表示するアーカイブされたチャレンジアコーディオン
v1.1.0
- チャレンジごとのタイムゾーンサポート
- 週次投稿スケジュールをチャレンジごとに変更可能(曜日、時刻、有効/無効切り替え)
v1.0.0
- 初期リリース
フィードバックと貢献
このプラグインは、私たちのコミュニティの実際のニーズを解決するために構築され、あなたのコミュニティにも役立つかもしれないと考えて共有しています。GitHub 上で Issues、PR、機能リクエストを歓迎します。
責任感と一貫性が重要なコミュニティ(フィットネス、語学学習、執筆、創造的な習慣など)を運営している場合、デイリーチャレンジは真に強力なエンゲージメントツールとなり得ます。このプラグインがあなたの Discourse コミュニティにそれを導入しやすくすることを願っています。




