このガイドは、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
インスピレーションを得るために、#contribute:featureおよび#customization:extrasで人気のアイデアを探してみてください。
Discourseコアへの貢献
Discourseコアのコードは、GitHub上のコアリポジトリで管理されています。
CLAの署名
貢献する前に、Electronic Discourse Forums Contribution License Agreementを読み、署名してください。CLAに署名していないユーザーからのプルリクエスト(PR)は、法的に受け入れることができません。
始めやすいタスクで慣れる
#pr-welcomeタグで、始めやすい良いタスクを探してください。
バグリストを処理する
いいね順に並べられたオープンなバグのリストからバグを修正してください。バグを修正している場合はメモを残してください。完了しない場合でも、他の人が作業を継続できるよう、関連するメモを残してください。
機能トピックのサポート
機能リクエストに詳細やモックアップを提供し、承認プロセスを支援してください。なお、すべての機能がコアに含まれるわけではありません。
パフォーマンスの改善
クライアント側またはサーバー側のパフォーマンスを向上させるプルリクエストを歓迎します。特に、フロントページの初期読み込みやトピックビューといった高インパクト領域に焦点を当ててください。
Discourseがメンテナンスしているプロジェクトの改善
Discourseがメンテナンスしている他のオープンソースプロジェクトに貢献してください。主なプロジェクトには以下が含まれます:
- Logster - ウェブGUIログビューア
- Message Bus - サイトライブインタラクションエンジン
- Rack Mini Profiler - 診断ツール
- Discourse API - APIコンシューマー
- Discourse Docker - Discourse配布エンジン
- WP Discourse - WordPressプラグイン
- Memory Profiler - Ruby用プロファイラー
- Ember Performance - Emberパフォーマンステストスイート
コーディング規約
命名は重要
サイト上で使用される用語とデータベース内のクラス名およびカラム名の間に100%の整合性を目指してください(例: “posts”)。
依存関係の最新バージョンとの互換性は重要
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文字)要約で始まり、その後に空行、そして変更の詳細な説明が続きます。必要に応じて、シンプルなスタイリングにマークダウン構文を使用できます。
Discourseの規約に従って、コミットタイトルにプレフィックスを付けてください。
5 (a). リンティング:
JavaScriptコードはeslintでリンティングされ、prettierでフォーマットされます。RubyはRuboCopでリンティングされ、Syntax Treeでフォーマットされます。SCSS/CSSはstylelintでリンティングされます。Emberテンプレートはember-template-lintでリンティングされます。これらのチェックは、Discourseのプルリクエストを作成するたびにGitHub Actionsで自動的に実行されます。lefthookを使用してpre-commit 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」をクリックします。
プルリクエストを送信する前に、履歴をクリーンアップし、コミットを確認して、小さな変更や修正を対応するコミットにまとめてください。インタラクティブリベースコマンドを使用してコミットをまとめられます:
git fetch origin
git checkout new_discourse_branch
git rebase origin/main
git rebase -i
< エディタが開き、コミット履歴を変更できるようになります >
< エディタの下部にある指示に従ってください >
git push -f mine new_discourse_branch
- フィードバックに対応:
- フィードバックに迅速に対応し、提案された変更を実装する準備をしてください。
- フィードバックは、あなたの仕事が価値ありとされ、統合される意図があることを意味します。
Discourseオープンソースプロジェクトへの貢献に感謝します!