貢献する
これはAdonisJSのすべてのリポジトリに対する一般的な貢献ガイドです。リポジトリに貢献する前に、このガイドを十分に読んでください 🙏
コードだけが貢献する方法ではありません。以下は、コミュニティの一員になるためのいくつかの貢献方法です。
- ドキュメントのタイポの修正
- 既存のドキュメントの改善
- コミュニティ内の他の人々に教えるためのクックブックやブログ記事の執筆
- 問題のトリアージ
- 既存の問題に対する意見の共有
- Discordやディスカッションフォーラムでコミュニティをサポートする
バグの報告
オープンソースプロジェクトで報告される多くの問題は、通常、報告者の環境での質問や設定ミスです。そのため、問題を報告する前に、問題を適切にトラブルシューティングすることを強くオススメします。
バグを報告する場合は、可能な限り多くの情報と共にコードサンプルを含めてください。良いから悪いまでの問題のスケールは次のようになります。
-
完璧な問題: 潜在的なバグを分離します。リポジトリで失敗するテストを作成し、それに関するGitHubの問題をオープンします。
-
良い問題: 潜在的なバグを分離し、最小限の再現をGitHubリポジトリとして提供します。Antfuさんが書いたWhy Reproductions are Requiredという素晴らしい記事があります。
-
まずまずの問題: 問題を正しく説明します。問題を引き起こすコードを共有してください。また、関連する設定ファイルと使用しているパッケージのバージョンも含めてください。
また、すべてのコードブロックを適切にフォーマットするために、Githubのマークダウン構文ガイドにしたがってください。
-
貧弱な問題: 問題を投げて、他の人が関連する質問をして助けてくれることを期待するだけです。このような問題は自動的に説明なしで閉じられます。
ディスカッションを行う
しばしばトピックを議論したり、アイデアを共有したりしたいと思うことがあります。その場合は、💡アイデアカテゴリのディスカッションフォーラムでディスカッションを作成してください。
他の人に教える
他の人に教えることは、どのコミュニティに貢献し、認識を得るための最良の方法の1つです。
他の人と共有するために、ディスカッションフォーラムの📚クックブックカテゴリを使用できます。クックブックセクションは厳密にはモデレートされていませんが、共有される知識はプロジェクトに関連している必要があります。
プルリクエストの作成
コードを書くために多くの時間と労力を投資した後に、プルリクエストが拒否されるのは良い経験ではありません。そのため、新しい作業を開始する前に、ディスカッションを開始することを強くオススメします。
ディスカッションを始めて、何を貢献するかを説明してください。
-
バグを修正するためのPRを作成しようとしていますか: バグについての確認が行われた後、PRはほとんど受け入れられます。
-
新しい機能を追加する予定ですか: なぜこの機能が必要なのかを詳しく説明し、自己教育のために読むことができる学習資料へのリンクを共有してください。
たとえばJapaやAdonisJSにスナップショットテストのサポートを追加する場合、スナップショットテストについて詳しく学ぶためのリンクを共有してください。
注意: 貢献した機能や改善のドキュメント化のために、追加のPRを開くこともできるようにしてください。
リポジトリのセットアップ
-
ローカルマシンでリポジトリをクローンして開始します。
git clone <REPO_URL> -
ローカルで依存関係をインストールします。フィーチャーリクエストと一緒に依存関係を更新しないでください。古い依存関係が見つかった場合は、別のPRを作成して更新してください。
依存関係の管理には
npm
を使用していますので、yarn
や他のツールは使用しないでください。npm install -
以下のコマンドを実行してテストを実行します。
npm test
使用されているツール
以下は使用されているツールのリストです。
ツール | 使用法 |
---|---|
TypeScript | すべてのリポジトリはTypeScriptで作成されています。コンパイルされたJavaScriptと型定義はnpmで公開されます。 |
TS Node | ts-nodeを使用して、TypeScriptをコンパイルせずにテストやスクリプトを実行します。ts-nodeの主な目的は、開発中のフィードバックループを高速化することです。 |
SWC | SWCはRustベースのTypeScriptコンパイラです。TS Nodeは、TypeScript公式コンパイラの代わりにSWCを使用するための一流のサポートを提供しています。SWCを使用する主な理由は、速度の向上です。 |
Release-It | release-itを使用して、パッケージをnpmに公開します。リリースの作成とnpmおよびGitHubへの公開を行う重い作業をすべて行います。設定はpackage.json ファイル内で定義されています。 |
ESLint | ESLintは、複数の貢献者がいるすべてのリポジトリで一貫したコーディングスタイルを強制するのに役立ちます。すべてのESLintルールは、eslint-plugin-adonisパッケージで公開されています。 |
Prettier | コードベースの一貫したビジュアル出力のためにprettierを使用しています。ESLintとPrettierの両方を使用している理由について混乱している場合は、PrettierのウェブサイトのPrettier vs. Lintersドキュメントを読んでください。 |
EditorConfig | 各プロジェクトのルートにある.editorconfig ファイルは、コードエディターをインデントと空白の管理のための一連のルールに設定します。再フォーマットにはPrettierが使用され、エディターの設定にはEditorconfigが使用されます。 |
Conventional Changelog | すべてのリポジトリのコミットは、一貫したコミットメッセージを強制するためにcommitlintを使用しています。 |
Husky | コードをコミットする際にコミット規約を強制するためにhuskyを使用しています。HuskyはNodeで書かれたGitフックシステムです。 |
コマンド
コマンド | 説明 |
---|---|
npm run test | ts-node を使用してプロジェクトのテストを実行します |
npm run compile | TypeScriptプロジェクトをJavaScriptにコンパイルします。コンパイルされた出力はbuild ディレクトリに書き込まれます |
npm run release | np を使用してリリースプロセスを開始します |
npm run lint | ESlintを使用してコードベースをリントします |
npm run format | Prettierを使用してコードベースをフォーマットします |
npm run sync-labels | .github/labels.json ファイルで定義されたラベルをGitHubと同期します。このコマンドはプロジェクト管理者のみが使用できます。 |
コーディングスタイル
すべてのプロジェクトはTypeScriptで書かれており、純粋なESMに移行しています。
また、コードをプッシュする前に以下のコマンドを実行してください。
# Prettierを使用してフォーマットします
npm run format
# Eslintを使用してリントします
npm run lint
貢献者として認識される方法
私たちは、リポジトリの右側パネルにすべてのリポジトリの貢献者を表示するためにGitHubを利用しています。以下はその例です。
また、GitHubの自動生成リリースノート機能を使用しており、リリースノート内に貢献者プロフィールへの参照が追加されます。