GitHub Discussions
1. はじめに
GitHub Discussionsは、リポジトリや組織内でコミュニティとメンテナーが対話できるオープンフォーラムです。IssueやPull Requestとは異なり、より自由度の高い議論の場として機能します。本記事では、GitHub Discussionsの機能を体系的に解説し、開発プロジェクトにおける活用方法を探ります。
2. GitHub Discussionsの位置づけ
プロジェクトにおける対話の種類によって、適切なツールを選択することが重要です。
Discussionsは以下のような場面で特に有効です。
- プロジェクトの方向性がまだ定まっていない段階
- 広範なコミュニティからフィードバックを集めたい場合
- バグ修正や機能リクエストとは別に、一般的な会話を分離したい場合
- 投票機能を使って、コミュニティの意見を測定したい場合
3. アクセス権限の理解
GitHub Discussionsの利用には、適切な権限設定が必要です。
| 権限レベル | できること |
|---|---|
| read権限 | ディスカッションの閲覧、参加、投票の作成 |
| triage権限 | コメントを回答としてマーク、ディスカッションのロック、Issueからの変換、モデレーション |
| write権限以上 | カテゴリーの管理 |
| maintain権限以上 | カテゴリーの定義、Announcementカテゴリーでの新規ディスカッション作成 |
| admin権限 | GitHub Discussionsの有効化/無効化、ディスカッションの削除 |
4. カテゴリーシステムの設計
4.1. デフォルトカテゴリー
GitHub Discussionsには、以下のデフォルトカテゴリーが用意されています。
| カテゴリー | 用途 | 形式 |
|---|---|---|
| 📣 Announcements | プロジェクトメンテナーからの更新情報やニュース | アナウンスメント |
| #️⃣ General | プロジェクトに関連するあらゆる話題 | オープンエンドディスカッション |
| 💡 Ideas | プロジェクトを変更・改善するアイデア | オープンエンドディスカッション |
| 🗳 Polls | 投票と議論のための複数選択肢 | 投票 |
| 🙏 Q&A | コミュニティが回答する質問(質問/回答形式) | 質問と回答 |
| 🙌 Show and tell | プロジェクトに関連する作品、実験、テスト | オープンエンドディスカッション |
4.2. カテゴリー形式の特徴
4.3. カテゴリーのカスタマイズ
プロジェクトの特性に応じて、カテゴリーを追加・編集できます。
カテゴリー作成の手順:
- リポジトリまたは組織のメインページに移動
- 「Discussions」タブをクリック
- 左サイドバーの「Categories」の右にある鉛筆アイコンをクリック
- 「New category」をクリック
- 絵文字、タイトル、説明、ディスカッション形式を編集
- オプションでセクションに追加(カテゴリーは1つのセクションにのみ所属可能)
- 「Create」をクリック
セクションの活用:
セクションを使用することで、カテゴリーを階層的に整理できます。例えば「開発」セクションに「アーキテクチャ」「パフォーマンス」「セキュリティ」などのカテゴリーを配置することで、議論を体系化できます。
5. ディスカッションの作成と参加
5.1. 基本的なワークフロー
5.2. 通常のディスカッション作成
- リポジトリまたは組織名の下にある「Discussions」をクリック
- ページ右側の「New discussion」をクリック
- 「Get started」をクリックしてカテゴリーを選択
- 「Discussion title」にタイトルを、「Write」に本文を入力
- 「Start discussion」をクリック
5.3. 投票の作成
投票は、コミュニティの意見を定量的に把握するための強力なツールです。
- 「Discussions」タブをクリック
- カテゴリー一覧から「Polls」をクリック
- 右側の「New discussion」をクリック
- タイトルを入力、オプションで本文を追加
- 「Poll question」に質問を入力
- 「Poll options」に最低2つの選択肢を入力
- オプションを追加する場合は「Add an option」をクリック
- 「Start poll」をクリック
5.4. コメントを回答としてマーク
Q&A形式のカテゴリーでは、コメントを回答としてマークできます。これにより、訪問者が素早く情報を見つけられます。
マークの手順:
- ディスカッション内で回答としてマークしたいコメントを見つける
- コメントの下にある「Mark as answer」をクリック
- マークを解除する場合は「Unmark as answer」をクリック
注意点:
- スレッドコメント(コメントへの返信)も回答としてマークできます
- 最小化されたコメントは回答としてマークできません
- GitHubはハイライト表示により、回答とその返信を強調します
6. Upvote機能による優先順位付け
6.1. ディスカッションのUpvote
重要なトピックに可視性を与えるために、ディスカッションをUpvoteできます。
- ディスカッションリストで、Upvoteしたいディスカッションを見つける
- ディスカッションの左側にあるUpvote矢印をクリック
- 再度クリックすることでUpvoteを削除できます
6.2. トップレベルコメントのUpvote
ディスカッション内のトップレベルコメント(直接の返信ではないコメント)もUpvoteできます。
- ディスカッション内で、Upvoteしたいトップレベルコメントを見つける
- コメント左下のUpvote矢印をクリック
- 再度クリックすることでUpvoteを削除できます
活用シーン:
- メンテナーがコミュニティの価値観を理解する
- Upvote数でディスカッションやコメントをソートする
- 重要なフィードバックを浮上させる
7. 検索とフィルタリング
7.1. 検索機能
「Search all discussions」フィールドに検索クエリを入力することで、ディスカッションを検索できます。検索フィールドの右側にあるボタンを使用して、結果をさらにフィルタリングできます。
7.2. ソート機能
ディスカッションリストは以下の方法でソートできます。
ディスカッション全体のソート:
- Latest activity: 最新のアクティビティがあるディスカッションを上位表示
- Date created: 最近作成されたディスカッションを上位表示
- Top: 最もUpvoteされたディスカッションを上位表示(期間を指定可能)
コメントのソート:
ディスカッション内では、トップレベルコメントを以下の順序でソートできます。
- Oldest: 最も古いコメントを最初に表示
- Newest: 最も新しいコメントを最初に表示
- Top: 最もUpvoteされたコメントを最初に表示
注意: コメントスレッド(返信)はソート順に影響しません。
8. モデレーション機能
8.1. ディスカッションのロック
会話全体が建設的でない場合や、コミュニティの行動規範やGitHubのコミュニティガイドラインに違反している場合、ディスカッションをロックすることが適切です。
ロックの特徴:
- write権限以上のユーザーは引き続きコメント可能
- ロック中でも絵文字リアクションを許可するオプションあり
- アナウンスメントとして使用したい会話をロックすることも可能
ロック手順:
- ロックしたいディスカッションを表示
- 右マージンの「Lock conversation」をクリック
- ロックに関する情報を確認
- オプションで「Allow reactions」を選択
- 「Lock conversation」をクリック
ロック解除:
右マージンの「Unlock conversation」をクリックし、「Unlock conversation」で確認します。
8.2. ディスカッションのクローズ
ディスカッションが解決された場合、関連性がなくなった場合、または重複している場合は、ディスカッションをクローズできます。
クローズ手順:
- クローズしたいディスカッションを表示
- コメントボックスの下にある「Close discussion」をクリック
- オプションで、ドロップダウンから理由を選択できます
8.3. Issueからディスカッションへの変換
Issueが作業項目ではなく、質問やオープンエンドな会話であることが判明した場合、Issueをディスカッションに変換できます。
変換の利点:
- ディスカッションはIssueの内容を使用して自動的に作成されます
- 作業の追跡と優先順位付けには不適切だが、議論の価値があるトピックを適切な場所に移動できます
変換手順:
- 変換したいIssueを表示
- 右マージンの「Convert to discussion」をクリック
- 「Choose a category」ドロップダウンメニューからカテゴリーを選択
- 「I understand, convert this issue to a discussion」をクリック
8.4. ディスカッションの削除
リポジトリ管理者とプロジェクトメンテナーは、ディスカッションを削除できます。
- 削除したいディスカッションを表示
- 右サイドバーの「Delete discussion」をクリック
- 警告を読み、「Delete this discussion」をクリック
8.5. ユーザーのブロック
組織のオーナーとモデレーターは、コメントがコミュニティの行動規範に沿っていない場合、ユーザーを組織からブロックできます。
ブロックのオプション:
- 無期限にブロック
- 特定の期間ブロック(期間終了後、自動的にブロック解除)
ブロックすると、そのユーザーはディスカッションにコメントできなくなります。ユーザーが組織内で行ったすべてのコメントを非表示にすることも可能です。
9. ピン留め機能
9.1. グローバルピン留め
最大4つの重要なディスカッションを、リポジトリまたは組織のディスカッションリストの上部にピン留めできます。
ピン留め手順:
- ピン留めしたいディスカッションを表示
- 右サイドバーの「Pin discussion」をクリック
- オプションで、ピン留めしたディスカッションの外観をカスタマイズ
- 「Pin discussion」をクリック
9.2. カテゴリー別ピン留め
特定のカテゴリー内のディスカッションリストの上部に、最大4つのディスカッションをピン留めできます。
- ピン留めしたいディスカッションを表示
- 右サイドバーの「Pin discussion to CATEGORY」をクリック
- 「Pin to CATEGORY」をクリックして確認
表示例:
グローバルにピン留めされたディスカッションと、特定のカテゴリーにピン留めされたディスカッションの両方が表示されます。
9.3. ピン留めの編集
ピン留めされたディスカッションを編集しても、カテゴリーは変更されません。
- 編集したいピン留めディスカッションを表示
- 右サイドバーの「Edit pinned discussion」をクリック
- 外観をカスタマイズ
- 「Pin discussion」をクリック
9.4. ピン留めの解除
グローバルピン留めの解除:
- 解除したいディスカッションを表示
- 右サイドバーの「Unpin discussion」をクリック
- 警告を確認し、「Unpin discussion」をクリック
カテゴリー別ピン留めの解除:
- 解除したいディスカッションを表示
- 右サイドバーの「Unpin discussion from this category」をクリック
- 警告を確認し、「Unpin from this category」をクリック
10. ディスカッションの転送
別のリポジトリにディスカッションを転送するには、転送先のリポジトリでディスカッションを作成する権限が必要です。
制限事項:
- 同じユーザーまたは組織アカウントが所有するリポジトリ間でのみ転送可能
- プライベートリポジトリからパブリックリポジトリへは転送不可
- アナウンスメント形式のディスカッションは転送不可
転送手順:
- 転送したいディスカッションを表示
- 右サイドバーの「Transfer this discussion」をクリック
- 転送先のリポジトリを選択(検索も可能)
- 組織にディスカッションを転送する場合は、組織のソースリポジトリを選択
- 「Transfer discussion」をクリック
11. インサイトダッシュボード
11.1. 概要
ディスカッションインサイトは、ディスカッションのアクティビティ、閲覧数、貢献者に関するデータを提供します。
利用可能なメトリクス:
11.2. インサイトの表示
- リポジトリまたはソースリポジトリのメインページに移動
- リポジトリ名の下にある「Insights」をクリック
- 左サイドバーの「Community」をクリック
- オプションで、右上の「Period」ドロップダウンから期間を選択(30日、3ヶ月、1年)
活用方法:
- コミュニティの成長傾向を把握
- 貢献者の活動パターンを分析
- エンゲージメントの高い期間を特定
- グラフ上の特定期間にカーソルを合わせると、正確なデータを確認できます
12. ディスカッションカテゴリーフォームのカスタマイズ
12.1. 概要
ディスカッションカテゴリーフォームを使用すると、コミュニティメンバーが新しいディスカッションを開始する際に使用できるテンプレートをカスタマイズできます。
利点:
- 構造化された情報を収集
- 一貫性のあるディスカッション品質
- 必要な情報の欠落を防止
12.2. フォームの作成
基本手順:
- リポジトリに移動
-
/.github/DISCUSSION_TEMPLATE/FORM-NAME.ymlというファイルを作成 -
FORM-NAMEをディスカッションカテゴリーのスラッグに対応させる(例: Announcementsカテゴリーの場合はannouncements.yml) - フォームの内容を記述
- デフォルトブランチにコミット
12.3. YAML構文の例
title: "[一般] "
labels: ["一般的な紹介"]
body:
- type: markdown
attributes:
value: |
テンプレートに表示されるテキストです!
- type: textarea
id: improvements
attributes:
label: 上位3つの改善点
description: "このプロジェクトに対して実施できる上位3つの改善点は何ですか?"
value: |
1.
2.
3.
...
render: bash
validations:
required: true
- type: markdown
attributes:
value: |
## Markdownヘッダー
さらにMarkdownテキスト
- type: input
id: has-id
attributes:
label: 提案
description: 提案に関する説明
validations:
required: true
- type: dropdown
id: download
attributes:
label: このプロジェクトのどの領域が最も改善できますか?
options:
- ドキュメンテーション
- Pull Requestレビュー時間
- バグ修正時間
- リリース頻度
validations:
required: true
- type: checkboxes
attributes:
label: このボックスをチェック!
options:
- label: これです!
required: true
- label: これもチェックしても構いません
- type: markdown
attributes:
value: |
### スリリングな結論
_テンプレートの締めくくり_
12.4. トップレベルキー
| キー | 説明 | 必須 | 型 |
|---|---|---|---|
body |
ディスカッションフォームの入力タイプの定義 | 必須 | 配列 |
labels |
このテンプレートで作成されたディスカッションに自動的に追加されるラベル | オプション | 配列またはカンマ区切り文字列 |
title |
ディスカッション投稿フォームに事前入力されるデフォルトのタイトル | オプション | 文字列 |
12.5. 利用可能なフィールドタイプ
- markdown: 説明テキストの表示
- textarea: 複数行のテキスト入力
- input: 単一行のテキスト入力
- dropdown: ドロップダウンメニュー
- checkboxes: チェックボックスリスト
各フィールドにはattributesとvalidationsを設定できます。
13. 貢献者への権限付与
13.1. 役立つ貢献者の認識
GitHubは、過去30日間で最も役立った貢献者を自動的に認識します。これは、他のコミュニティメンバーによって回答としてマークされたコメント数に基づきます。
表示条件:
- プライバシー設定で許可されている場合のみ表示
- ディスカッションダッシュボードに「Most helpful」セクションとして表示
13.2. 権限レベルの変更
推奨プロセス:
手順:
- ディスカッションページで役立つ貢献者を確認
- 現在のアクセス権限と比較
- リポジトリ設定から権限レベルを変更
- 変更された協力者には自動的に通知が送信されます
14. 組織レベルでの活用
14.1. 組織ディスカッションの特徴
組織ディスカッションは、単一のリポジトリに限定されない、より広範な会話に使用できます。
設定方法:
- 組織の管理者が組織ディスカッションを有効化
- ソースリポジトリを指定
- ソースリポジトリへのread権限があるユーザーが参加可能
活用シーン:
- 複数のリポジトリにまたがるトピックの議論
- 組織全体の方針やベストプラクティスの共有
- 横断的なプロジェクトの調整
14.2. ディスカッション作成権限の管理
組織オーナーは、組織が所有するリポジトリでディスカッションを作成するために必要な権限を選択できます。同様に、組織ディスカッションを作成するために必要な権限も、ソースリポジトリで変更できます。
15. 統合とワークフロー
15.1. Issueの作成
ディスカッションから、作業可能な状態になったアイデアやバグについて、新しいIssueを作成できます。
利点:
- 探索的な議論から具体的な作業項目への移行
- コンテキストの保持
- トレーサビリティの向上
15.2. ラベルの適用
ディスカッションをより細かく整理するために、ラベルを適用できます。
活用例:
- ステータスの表示(進行中、解決済み、保留中など)
- トリアージの効率化
- 優先順位付け
注意点:
各リポジトリには、Issue、Pull Request、ディスカッションで共有される1つのラベルセットがあります。
15.3. Copilot Chatの活用
Copilot Chatを使用して、最近のPull RequestやIssueに基づいて、ディスカッションのアイデア、アウトライン、下書きを生成できます。
16. ベストプラクティス
16.1. 効果的なディスカッションの促進
- 具体的な質問とフォローアップ質問: 的を絞った質問で、特定のフィードバックを集めます
- 多様な経験の収集と要約: コミュニティの意見を主要なポイントに集約します
- 適切なタイミングでのIssue化: 議論に基づいて、該当する場合にIssueを作成します
16.2. コミュニティの健全性維持
- 行動規範の作成: 協力者が従うべき行動規範を作成します
- 貢献ガイドラインの設定: リポジトリ貢献者向けのガイドラインを設定します
- 適切なモデレーション: 健全なディスカッションを促進するために、コメントと会話をモデレートします
16.3. カテゴリーの使い分け
| 目的 | 推奨カテゴリー |
|---|---|
| 重要な更新の共有 | Announcements |
| アイデアの探索 | Ideas |
| 質問と回答 | Q&A |
| コミュニティの意見収集 | Polls |
| 作品やプロジェクトの紹介 | Show and tell |
| 一般的な議論 | General |
17. 自分のディスカッションを見つける
GitHub左上のメニューから「Discussions」を選択し、「Created」と「Commented」を切り替えることで、自分が作成または参加したディスカッションを確認できます。
18. まとめ
GitHub Discussionsは、コードリポジトリを中心としたコミュニティ対話の場として、以下の価値を提供します。
技術的な利点:
- Issue管理との明確な分離による、作業項目の整理
- 構造化されたカテゴリーシステムによる議論の体系化
- Upvote機能による定量的なフィードバック収集
- 詳細なインサイトによる、コミュニティ動向の可視化
コミュニティへの効果:
- メンテナーと貢献者の間の透明なコミュニケーション
- 新規参加者の質問に対する集合知の活用
- 長期的なナレッジの蓄積
- 役立つ貢献者の可視化とモチベーション向上
GitHub Discussionsは、単なるフォーラム機能ではなく、プロジェクトの方向性を決定し、コミュニティを育成するための統合されたプラットフォームです。適切に活用することで、開発プロジェクトの健全な成長を支援します。
リポジトリ管理者は、プロジェクトの特性に応じてカテゴリーをカスタマイズし、適切なモデレーションポリシーを設定することで、建設的な議論の場を構築できます。コミュニティメンバーは、質の高いフィードバックを提供し、他のメンバーを支援することで、プロジェクトの成功に貢献できます。
GitHub Discussionsを効果的に活用し、より良いソフトウェア開発のエコシステムを構築していきましょう。