| 概要 | Discourse GitHub スタッフがGitHubの貢献に基づいてユーザーにバッジを付与できます。また、ユーザーがGithubのリンクバック、パーマリンクを作成し、1ボックス(Onebox)にPRのライブステータスを表示することも可能です。 | |
| インストールガイド | このプラグインはDiscourseコアにバンドルされています。プラグインを別途インストールする必要はありません。 |
機能
GitHubバッジ
GitHubの貢献に基づいてユーザーにバッジを付与します。
使用方法:
- 設定 → プラグインで
github badges enabledを有効にします。 - GitHubアクセストークンを生成し、
github linkback access token設定に貼り付けます。手順は以下をご覧ください。 github badges reposサイト設定に、貢献をスキャンするGitHubリポジトリのURLを1つ以上追加します。
バッジのカウント方法:
バッジはすべてのリポジトリにわたってコミット数をカウントします。ユーザーが複数のリポジトリに貢献した場合、それらのすべてのコミットが合計数として加算されます。
コミッターバッジ:
| バッジ | 必要なコミット数 |
|---|---|
| ブロンズ | 1コミット |
| シルバー | 25コミット |
| ゴールド | 1000コミット |
バッジの進行: ユーザーが追跡対象のリポジトリのいずれかで貢献を累積すると、バッジの階層を自動的に進みます。例えば、ユーザーがリポジトリAにコミットし、その後リポジトリBにコミットした場合、両方の貢献が合計にカウントされ、ブロンズからシルバー、ゴールドへと進みます。
GitHubリンクバック
GitHubのプルリクエストまたはコミットから、それが言及されているDiscourseの投稿へのリンクを作成します。
使用方法:
- 設定 → プラグインで
github linkback enabledを有効にします。 - GitHubアクセストークンを生成し、
github linkback access token設定に貼り付けます。手順は以下をご覧ください。 - 最後に、
github linkback projectsサイト設定に、投稿したいプロジェクトを以下の形式で追加します:- 特定のリポジトリの場合:
username/repository - 特定のユーザーのすべてのリポジトリの場合:
username/*
- 特定のリポジトリの場合:
GitHubパーマリンク
GitHubの非パーマリンクをパーマリンクに置き換えます。
使用方法:
- 設定 → プラグインで
github permalinks enabledを有効にします。
PRライブステータス
投稿やチャットメッセージ内のGitHubプルリクエスト1ボックスに、ライブステータスインジケーターを表示します。PRがGitHubで変更されると、Webhooksを介してステータスが自動的に更新されます。
ステータスタイプ
| ステータス | 色 | 説明 |
|---|---|---|
| 下書き | グレー | PRが下書きとしてマークされています |
| 開放中 | グレー | PRは開放されており、レビュー待ちです |
| 承認済み | 緑 | レビュアーによって承認されています |
| 変更要求 | オレンジ | レビュアーによって変更が要求されています |
| マージ済み | 紫 | PRがマージされています |
| 閉鎖済み | 赤 | マージなしで閉鎖されました |
使用方法:
ステップ1: 機能を有効にする
管理 > 設定 > プラグイン に移動し、github pr status enabled を true に設定します。
ステップ2: GitHubアクセストークンの構成
PRステータス(特にプライベートリポジトリの場合)を取得するには、GitHubアクセストークンを構成します。
設定: github onebox access tokens
形式:
organization_name|ghp_your_token_here
default|ghp_fallback_token_here
組織ごとにトークンを指定でき、フォールバックとして使用される default トークンも指定できます。各行には org_name|token を含め、トークンは repo スコープを持つGitHubパーソナルアクセストークン(クラシック)である必要があります。
例:
discourse|ghp_xxxxxxxxxxxxxxxxxxxx
my-company|ghp_yyyyyyyyyyyyyyyyyyyy
default|ghp_zzzzzzzzzzzzzzzzzzzzzz
ステップ3: GitHub Webhooksの設定(リアルタイム更新用)
PRが変更されたときに自動的なステータス更新を取得するには、GitHubでWebhookを構成します。
Webhookシークレットの生成:
openssl rand -hex 32
生成したシークレットを github webhook secret サイト設定に設定します。
GitHubでのWebhook作成:
Webhookは組織レベル(すべてのリポジトリをカバー)またはリポジトリごとに作成できます。
組織の場合:
- 組織の設定に移動します
- Webhooks(コード、計画、自動化の下)に移動します
- Webhookの追加 をクリックします
リポジトリの場合:
- リポジトリの設定に移動します
- Webhooks に移動します
- Webhookの追加 をクリックします
Webhook設定:
| フィールド | 値 |
|---|---|
| ペイロードURL | https://your-discourse-site.com/discourse-github/webhooks/github |
| コンテンツタイプ | application/json |
| シークレット | 生成したWebhookシークレット |
| SSL検証 | 有効(推奨) |
| イベント | 「個別のイベントを選択」を選択 |
次のイベントを選択します:
- プルリクエスト
- プルリクエストレビュー
Webhookの追加 をクリックして保存します。
ステップ4: 設定の確認
- GitHubのPR URLを含むテスト投稿を作成します
- 1ボックスにステータスアイコンが表示されていることを確認します
- GitHubでPRステータスを変更します(例: 承認する、または閉じる)
- 数秒以内にDiscourseページを更新すると、ステータスが更新されているはずです
GitHubのWebhook設定でWebhookの配信ステータスを確認し、イベントが正常に送信および受信されていることを確認できます。
ステータスの優先度
PRに複数の状態がある場合(例: 承認済みだが、変更要求もある場合)、ステータスは以下の優先度によって決定されます:
- マージ済み(最高優先度)
- 閉鎖済み
- 下書き
- 変更要求
- 承認済み
- 開放中(デフォルト)
レビューステータスのロジック
この機能は、承認ステータスを決定するためにGitHub APIからレビュー情報を取得します:
- 各レビュアーの最新のレビューを取得する
- 「コメント済み」と「保留中」のレビュー状態は無視する
- いずれかのレビュアーが変更を要求している場合、「変更要求」を表示する
- レビューが存在し、変更要求がない場合のみ「承認済み」を表示する
適用場所
- フォーラム投稿 — GitHubのPR 1ボックスを含む任意の投稿
- チャットメッセージ — チャットのPR 1ボックスにもライブステータスが表示されます
注意: インライン1ボックス(リンクが完全なプレビューではなくテキスト内に表示される場合)にはステータスアイコンは表示されません。
GitHubステータステーマコンポーネントからの移行
この機能はGitHub Status Indicatorsテーマコンポーネントに取って代わるものです。両者は互換性がなく、同時に使用しないでください。
現在テーマコンポーネントを使用している場合:
github-status-themeテーマコンポーネントを無効化して削除しますgithub pr status enabled設定を介してこの組み込み機能を有効にします
構成
GitHubアクセストークン
リンクバック機能を動作させ、ユーザーにバッジを付与するには、GitHubアクセストークンを提供する必要があります。ここでトークンを生成できます: Sign in to GitHub · GitHub
リンクバック機能には public_repo スコープが必要であり、バッジの付与にはスコープは不要です(バッジのみが必要な場合はすべてチェックを外したままにしてください)。 public_repo スコープはリポジトリへの書き込みアクセスを付与するため、リポジトリにアクセスできない使い捨てのGitHubアカウントを作成し、トークンを生成するためだけに使用することをお勧めします。
機能別のトークンスコープ
| 機能 | 必要なスコープ |
|---|---|
| バッジ | スコープ不要 |
| リンクバック | public_repo |
| PRステータス(公開リポジトリ) | スコープ不要 |
| PRステータス(プライベートリポジトリ) | repo |
サイト設定リファレンス
| 設定 | デフォルト | 説明 |
|---|---|---|
enable discourse github plugin |
false |
プラグインのマスタースイッチ |
github badges enabled |
false |
GitHub貢献バッジを有効にする |
github badges repos |
(空) | バッジ用に追跡するリポジトリURL |
github linkback enabled |
false |
GitHubからDiscourseへのリンクバックを有効にする |
github linkback access token |
(空) | リンクバック機能のアクセストークン |
github linkback projects |
(空) | リンクバックを作成するプロジェクト |
github permalinks enabled |
false |
GitHubリンクをパーマリンクに置き換える |
github pr status enabled |
false |
1ボックスにPRステータスアイコンを有効にする |
github webhook secret |
(空) | Webhook署名検証用のシークレット |
github onebox access tokens |
(空) | GitHub API用のアクセストークン(形式: org|token) |
技術詳細
PRステータスAPIの使用
GitHubのPR 1ボックスが生成されると、Discourseは最大2つのAPI呼び出しを行います:
- PRデータ:
GET /repos/{owner}/{repo}/pulls/{number}— 状態、マージステータス、下書きステータスを含む基本的なPR情報を取得します - レビュー:
GET /repos/{owner}/{repo}/pulls/{number}/reviews— 承認ステータスを決定するためにレビューデータを取得します
これらの呼び出しは、利用可能な場合は構成済みのアクセストークンを使用し、プライベートリポジトリへのアクセスを可能にします。
Webhookセキュリティ
WebhookリクエストはHMAC-SHA256署名検証を使用して検証されます。GitHubはシークレットでWebhookペイロードに署名し、Discourseは処理前にこの署名を検証します。無効な署名は403レスポンスで拒否されます。
更新をトリガーするWebhookイベント
- PR状態の変更(オープン、クローズ、 reopen)
- PRマージ
- 下書き状態の変更(下書きに変換、レビュー準備完了)
- プルリクエストレビューの送信
- レビューの編集または却下
パフォーマンスに関する考慮事項
- リベークはサイトのパフォーマンスに影響を与えないよう、低優先度のバックグラウンドジョブとしてキューに入れられます
- 完全なGitHub PR 1ボックスを持つ投稿/メッセージのみがリベークされます(インライン1ボックスはスキップされます)
- チャットメッセージのリベークは重複アラートを防ぐため通知をスキップします
変更履歴
2025-12-10
- 修正: GitHub Webhooksからのチャットメッセージのリベーク時に通知をスキップ
2025-12-09
- 修正: インラインGitHub PR 1ボックスを持つ投稿のリベークをスキップ
- 修正: 1ボックスを持つ投稿のリベーク時の中間状態を回避
- 修正: GitHub PRステータスの変更時にチャットメッセージをリベーク
- UX: ステータスアイコンが変更されたときのレイアウトシフトを防ぐため、最小高さを適用
- UX: モバイルでのGitHub PRステータスアイコンのサイズを縮小
2025-12-08
- 機能: GitHub PR 1ボックスに「変更要求」ステータスを追加
2025-12-04
- 機能: GitHub PRライブステータスアイコン
2025-11-10
- 機能: リンクバックの許可リストと拒否リスト
2025-11-08
- 機能: GitHubリンクバック用のカテゴリ無視リストを追加
2024-12-20
- 開発: discourse-githubをコアに移動(個別のインストールが不要になった)
