このガイドは、Discourse オープンソースプロジェクトへの貢献を希望する人々のために作成されており、効果的なコラボレーションに必要なセットアップと規約について詳述しています。
必要なユーザーレベル: コードの貢献は誰でも可能ですが、RubyとJavaScriptに精通している必要があります。
概要
このドキュメントでは、以下について説明します。
- 開発環境のセットアップ
- どこから貢献を始めるかを理解する
- Discourseプラグインの作成と操作
- Discourseコアへの貢献
- 従うべきコーディング規約
- GitHubでの貢献の送信
開発環境のセットアップ
貢献を始める前に、開発環境が適切にセットアップされていることを確認してください。プラットフォームに応じて適切なガイドに従ってください。
- すべてのプラットフォーム: Dockerを使用した開発のためのDiscourseのインストール
- Mac OS X: 開発のためにmacOSにDiscourseをインストールするための初心者ガイド
- Linux (Ubuntu): 開発のためにUbuntuにDiscourseをインストールするための初心者ガイド
- Windows: 開発のためにWindows 10にDiscourseをインストールするための初心者ガイド
どこから始めるかを知る
Discourseは大規模なプロジェクトであり、RubyやJavaScriptなどの基礎となる技術を理解することが不可欠です。開始方法については、初心者ガイドを参照してください。
プラグインの作成と操作
プラグインは、Discourseの内部を管理しやすい部分に理解させ、コードへの貢献を容易に開始できるようにする方法を提供します。以下から始めてください。
- Developing Discourse Plugins - Part 1 - Create a basic plugin
- (deprecated) Plugin outlet locations theme component
インスピレーションを得るには、#feature および #plugin:extras で人気のアイデアを探してください。
Discourseコアへの貢献
Discourseコアコードは、GitHub上のコアリポジトリで管理されています。
CLAへの署名
貢献する前に、Electronic Discourse Forums Contribution License Agreementを読んで署名してください。CLAに署名していないユーザーからのプルリクエスト(PR)を法的に受け付けることはできません。
スタータータスクでのウォーミングアップ
始めるのに適したタスクについては、pr-welcome タグを確認してください。
バグリストの確認
いいねの順に並べられたオープンなバグのリストからバグを修正してください。バグに取り組む場合はメモを残してください。完了しなかった場合は、他の誰かが作業を継続できるように関連するメモを残してください。
機能トピックの支援
機能リクエストに詳細やモックアップを提供して、承認プロセスを支援してください。すべての機能がコアに含まれるわけではないことに注意してください (各Discourseリリースに何が含まれるかをどのように決定するか)。
パフォーマンスの向上
フロントページやトピックビューの初期ロードなど、影響の大きい領域に焦点を当て、クライアント側またはサーバー側のパフォーマンスを向上させるプルリクエストを歓迎します。
Discourseが保守するプロジェクトの改善
Discourseが保守する他のオープンソースプロジェクトに貢献してください。注目すべきプロジェクトには以下のようなものがあります。
- Logster - Web GUIログビューア
- Message Bus - サイトのライブインタラクションのためのエンジン
- Rack Mini Profiler - 診断ツール
- Discourse API - APIコンシューマー
- Discourse Docker - Discourseディストリビューションエンジン
- WP Discourse - WordPressプラグイン
- Memory Profiler - Rubyのプロファイラ
- Ember Performance - Emberパフォーマンステストスイート
コーディング規約
名前付けは極めて重要
サイトで使用される用語と、クラス名やデータベースの列名(例: “posts”)との間に100%の整合性を持たせるようにしてください。
依存関係の最新バージョンとの互換性は極めて重要
Rails、Ruby、Emberなどのライブラリの最新の安定版リリースとの互換性を確保してください。依存関係を更新する際は、リグレッションがないかテストしてください。
テストのみの貢献は歓迎
テストされていないプロセスやコントローラアクションに対するテストの貢献は歓迎されます。モックは絶対に必要な場合を除き避けてください。
リファクタリングのみの貢献は歓迎されません
リファクタリングのみのプルリクエストの提出は避けてください。代わりに、コードを改善しながらバグを修正するか、機能を実装してください。
GitHubでのコードの送信
ステップバイステップのワークフロー
-
Discourseリポジトリのクローン作成:
git clone https://github.com/discourse/discourse.git -
新しいブランチの作成:
cd discourse git checkout -b new_discourse_branch -
コーディング:
- コード内にある既存のコーディング規約に従ってください。
- テストを含め、それらがパスすることを確認してください。
- Discourseメタフォーラムでの関連ディスカッションを参照してください。
-
コーディング規約に従う:
- スペース2つ、タブなし
- 末尾の空白なし、空行にはスペースなし
- 演算子の周り、コンマの後、コロン、セミコロン、
{の周り、}の前にスペースを使用 (、[の直後、または]、)の直前にスペースを入れない- Ruby 1.9ハッシュ構文を使用:
{ :a => 1 }よりも{ a: 1 }を優先 - クラスメソッドには
def self.methodよりもclass << self; def method; endを優先 - 1行ブロックには
do ... endよりも{ ... }を優先し、複数行ブロックには{ ... }の使用を避ける - 必須でない限り
returnを避ける
-
コミット:
git commit -m "変更の簡単な要約" -m "変更の詳細な説明"コミットメッセージを空にしないでください - これは役立つガイドです。メッセージは、最初の行に短い(最大72文字)要約を含め、その後に空行を挿入し、変更の詳細な説明を続けます。必要に応じて、簡単なスタイル設定のためにMarkdown構文を使用できます。
コミットタイトルには、Discourseの規約に従ってプレフィックスを付けるようにしてください。
5 (a). リンティング:
JavaScriptコードはeslintでリンティングされ、prettierでフォーマットされます。RubyはRuboCopでリンティングされ、Syntax Treeでフォーマットされます。SCSS/CSSはstylelintでリンティングされます。Emberテンプレートはember-template-lintでリンティングされます。これらすべてのチェックは、Discourseのプルリクエストを作成するたびにGitHub Actionsで自動的に実行されます。lefthookを使用してプリコミットgitフックをインストールすることを強くお勧めします。これにより、Discourseコアでコミットを行うたびに自動的に実行され、GitHub CIの実行を待つ必要が生じる前に、さまざまな言語やテンプレートに関する問題を報告できます。プロジェクトのルートでこれを実行してください。pnpm lefthook install
-
ブランチの更新:
git fetch origin git rebase origin/main -
フォーク:
git remote add mine git@github.com:<your-username>/discourse.git -
リモートへのプッシュ:
git push mine new_discourse_branch -
プルリクエストの送信:
- GitHubでリポジトリに移動します。
- 「Pull Request」をクリックします。
- ブランチフィールドにブランチ名を入力します。
- 「Update Commit Range」をクリックします。
- 「Commits」タブと「Files Changed」タブで変更を確認します。
- タイトルと説明を提供します。
- 「Send pull request」をクリックします。
プルリクエストを送信する前に、履歴を整理し、コミットを確認し、マイナーな変更や修正を対応するコミットにまとめます(squash)。インタラクティブなリベースコマンドを使用してコミットをまとめることができます。
git fetch origin
git checkout new_discourse_branch
git rebase origin/main
git rebase -i
< エディタが開き、コミット履歴を変更できるようになります >
< エディタの下部の指示に従います >
git push -f mine new_discourse_branch
- フィードバックへの対応:
- フィードバックに迅速に対応し、提案された変更を実装する準備をしてください。
- フィードバックは、あなたの作業が評価され、組み込まれることを意図していることを忘れないでください。
Discourseオープンソースプロジェクトへの貢献に感謝します!