貢献ガイドライン
目次
はじめにと一般的なアドバイス
- 記事: 良い質問の仕方 を読んでください。
- Wiki を参照して、コードスニペット、リンク、その他のリソース(例: Getting Started、Useful Extensions)を見つけてください。
- Dear ImGui のセットアップに関する質問がある場合は、Getting Started を読んでください。
- docs/FAQ.md を読んでください。
- フォントやテキストに関する質問がある場合は、docs/FONTS.md を読んでください。
- デモを試すには
ImGui::ShowDemoWindow()
を実行して、デモとそのソースコードを確認してください。 - IDE の検索機能を使い、関連するシンボルやコメントを探してください。
- GitHub の検索機能を使って、似たようなトピックを探してください(「Closed」ステータスのIssueやPRも含めて検索してください)。
- ラベル別にIssueを閲覧 できます。
- ウェブ検索エンジンを利用して、似た問題を探してください。
- クラッシュやアサーションエラーが発生した場合は、デバッガーを使用して問題を引き起こしている行を特定し、その周辺のコメントを確認してください。
- Help Vampire にならないようにしましょう。
Issues(課題)とDiscussions(議論)の違い
私たちは、多くの種類のオープンエンドな質問に対して 'Issues' を利用することを歓迎します。また、'Issues' を Dear ImGui の内容に関する膨大で中央集約的、かつ相互参照可能なデータベースにすることを目指しています。
以下の場合にのみ、Discussions フォーラム を利用してください:
- サンプルのビルドやリンクができない。
- Dear ImGui をあなたのアプリケーションやカスタムエンジンでビルド、リンク、または実行できない。
- フォントをロードできない。
Dear ImGui があなたのアプリケーションで正常に表示され、以前にDear ImGuiを使用したことがある場合は、Issueを作成できます。どのような形式の議論も、新しいIssueとして歓迎します。
Issueを作成する方法
Issueトラッカーを使用して、バグ報告、機能リクエスト、提案を送信できます。また、ヘルプやアドバイスを求めることも可能です。しかし、以下のガイドラインを注意深く読んでください。これらを無視したIssueは閉じられる可能性があります。さらに、これらのガイドラインを無視するユーザーはブロックされることがあります。
リクエスト内容を可能な限り明確にしてください。このガイドラインに従わないために、不完全または曖昧なリクエストが多発しています。そのため、必要な情報が欠けているIssueは早期に閉じられることがあります。また、極端に自己中心的、不適切、または怠惰なリクエストはBANの対象となる可能性があります。
オープンソースソフトウェアは、メンテナーが費やせるエネルギー量によって存続が決まります。私たちは非常に多くの作業を抱えています。この注意力経済において、怠惰なリクエストや些細な問題が、私たちの注意を奪い、より重要な作業から遠ざけています。
以下は、上記のステップを分かりやすく翻訳した日本語Markdownドキュメントです。
ステップ:
- 記事: 良い質問の仕方 を参照してください。
- 必ず新しいIssueテンプレートを正確に記入してください。Dear ImGuiのバージョン番号、ブランチ名、プラットフォーム/レンダラのバックエンド(imgui_impl_XXXファイル)、および使用しているオペレーティングシステムを含めてください。
- あなたの目標、期待、および試したことを明確に記述してください。XY問題 に注意してください。他人には、あなたが考えていることやコードの内容はわかりません。目標を明確にしないまま議論が進むと、誤った解決策が提案されることがあります。新しい機能をリクエストする場合は、使用コンテキスト(どのように使いたいのか、なぜ必要なのかなど)を説明してください。試したことが失敗した場合は、その内容も示してください。
- コードを必ず含めてください。問題を示す最小限で完全かつ検証可能な例 (MCVE) を提供してください。理想的な投稿は、誰でもサンプルアプリケーション(例: examples/../main.cpp)やデモ(imgui_demo.cpp)に貼り付けて、問題を理解して再現できる小さなコード片を含んでいます。問題を簡潔で純粋な形に絞り込むことが、理解、説明、および修正の最も簡単な方法です。短縮したコードが問題を示すことを確認してください。MCVEを作成する過程で問題が解決することがよくあります! 独立した検証可能な例が欠けている質問では、問題の実際の原因が説明に含まれておらず、結果的に無駄な時間が費やされることが多いです。
- スクリーンショット(またはGIF/ビデオ)を添付してコンテキストを明確にしてください。これにより、説明で省略されがちな有用な情報が伝わります。編集ボックスに画像やファイルをドラッグして添付できます。サードパーティの画像ホスティングサービスを使用せず、GitHubの添付ファイルの長期的な保存性を優先してください(画像を投稿にドラッグできます)。Windowsでは、ScreenToGif を使用して簡単にGIFファイルをキャプチャできます。
- アサーションやクラッシュについて議論する場合、デバッガのコールスタックを提供してください。「クラッシュしました」とだけ述べるのは避けてください。デバッガを使ってコールスタックを取得する方法を知らない場合は、これを学ぶことが役立ちます。
- プロジェクトでアサーションが有効になっていることを確認してください。コード内にはIM_ASSERT()を使用して一般的な問題を検出する箇所が多数あります。アサーションがトリガーされた場合、その周辺のコメントを読んでください。デフォルトでは、IM_ASSERT() は標準のassert()関数を呼び出します。アサーションが有効であることを確認するには、
IM_ASSERT(false);
をmain()関数に追加してください。この行がエラーメッセージを表示し、アプリケーションが中断するはずです。エラーが報告されない場合は、アサーションが無効になっています。 - Dear ImGuiやバックエンドに大幅な変更を加えた場合、その内容を記述してください。
- C++以外の言語からDear ImGuiを呼び出している場合は、使用している言語とラッパー/バインディングについての情報を提供してください。
- "Watching" ユーザーのメールボックスにメッセージが送信されることを意識してください。送信する前にメッセージを校正しましょう。編集内容はこれらのユーザーに通知されませんので注意してください。
注意事項
- チート(例: DLL注入)を目的としたオンライン対戦型マルチプレイヤーゲームのプロジェクトに関与している場合、この場で投稿しないでください。そのような投稿には対応せず、アカウントをブロックします。質問がそのプロジェクトに関係していない場合でも同様です。このようなユーザーが多すぎるため、私たちの時間と労力を守る必要があります。
- 上記に関連して、匿名のGitHubアカウントが作成されて間もない場合、投稿内容はより厳しく審査されます。不完全な質問は厳しく却下される可能性があります。
Dear ImGuiを長期間使用している場合、またはC/C++を数年間使用している場合、あるいはこれまでの行動が良好である場合、すべての項目を完全に満たす必要はありません。これらはあくまでガイドラインであり、経験豊富なユーザーやコミュニティのメンバーは、状況に応じてどの情報が有用かを理解しています。
以下は提供された内容を分かりやすく翻訳した日本語Markdown文書です。
プルリクエストの作成方法
- プルリクエスト(PR)を送信するということは、メンテナーにコードのレビューを依頼し、さらにそのメンテナンスを引き受けてもらうことを意味します。 プルリクエストは、エンドユーザーの利益になるだけでなく、メンテナーが内容を理解し受け入れやすい形にする必要があります。
- 多くのプルリクエストは、ニーズと解決策を示す上で有用ですが、マージには適さない場合があります(他の問題を引き起こす、大局的な観点が欠けているなど)。迷った場合でも、問題を指摘しマージ可能な解決策を見つける第一歩としてプルリクエストを提出してください。長期間マージされないプルリクエストであっても、その存在が他のユーザーにとって有用であり、一般的な解決策を見つける助けとなります。
- 新しい機能を追加する場合は、 使用する状況(どのように使用するのか、なぜ必要なのかなど)を説明してください。XY問題 に注意してください。
- 警告やコンパイルの問題を修正する場合は、 コンパイラのログを投稿し、使用しているコンパイラのバージョンとプラットフォームを明記してください。
- スクリーンショット(またはGIF/ビデオ)を添付して、コンテキストを明確にし、機能を一目で示してください。 メッセージ編集ボックスに画像やファイルをドラッグして添付できます。サードパーティのホスティングサービスではなく、GitHubの添付ファイルの長期的な保存性を優先してください。
- コードが既存のコードベースのコーディングスタイルに従っていることを確認してください: インデントは4スペース(タブ不可)、
local_variable
、FunctionName()
、MemberName
、// テキストコメント
、//CodeComment();
、Cスタイルキャストなどを使用します。Dear ImGuiでは、モダンなC++のイディオムは使用せず、C++11の機能も最小限に留めています。examples/
以下のアプリケーションは、一部のエコシステムのスタイル(例: DirectX関連のコード)を模倣しているため、スタイルが一貫していない場合があります。 - プルリクエスト専用のブランチを作成してください。 Gitでは、1つのプルリクエストは1つのブランチに関連付けられます。プルリクエストを送信した後で同じブランチに変更をプッシュし続けると、新しいコミットがプルリクエストに追加されます(個別のコミットを選択して取り込むことは可能です)。
著作権 / 貢献者ライセンス契約
あなたが送信したコードはリポジトリの一部となり、Dear ImGuiのライセンスの下で配布されます。コードをプロジェクトに送信することで、そのコードがあなた自身の作品であり、プロジェクトに提供できることを保証するものとします。
さらに、コードを送信することにより、そのコードに関するすべての譲渡可能な権利をプロジェクトのメンテナーに付与することに同意したものとみなされます。これには、例えばコードの再ライセンス、修正、ソースまたはバイナリ形式での配布などが含まれます。具体的には、著作権をプロジェクトのメンテナーに譲渡することが求められます。このため、プルリクエスト内のファイルで著作権に関する記述を変更しないでください。