---
url: /ja/contributing.md
description: Issue および Pull Request の起票ガイドライン：Issue と PR の使い分け、コードとドキュメントの責務、受付不可の変更。
---

# 貢献ガイド

本プロジェクトの3つのリポジトリはいずれもコミュニティによって保守されているオープンソースプロジェクトです。貢献はコードの作成にとどまらず、問題の再現、ドキュメントの拡充、デバイス互換性の検証なども同様に価値があります。

## &#x20;どのような貢献が可能か

| 貢献タイプ | 重要度 | 受付窓口 |
| --- | --- | --- |
| バグの再現とログの提出 | 高 | Issue |
| ドキュメントの補足・修正 | 高 | 当ドキュメントリポジトリまたは各リポジトリの `docs/` |
| 新イベント海域への対応 | 高 | `campaign/` |
| 画像認識・スケジューラーの不具合修正 | 高 | PR |
| 実機・エミュレーターの互換性検証 | 中 | Issue（デバイス情報を添付） |
| 各言語への翻訳 | 中 | `i18n/*.json`、`locales/*.yml` |
| 新機能の提案 | 事前議論が必要 | Issue（機能提案） |

## &#x20;Issue の起票

調査・対応可能な Issue には少なくとも以下の情報を含めてください：

```text
バージョン：コア 7de6bb9 / ランチャー 2.2.5 / Android なし
実行環境：Windows 11 + MuMu12 16384 + 1280×720
再現手順：設定 → タスク → 研究（科研） → 有効化 → 即時実行
期待動作：研究成果物の回収が完了する
実際の結果：「研究プロジェクト一覧」で停止。直近のログ20行を添付
証跡データ：log/error/ap/2026-10-20_10-00-00/ のスクリーンショットと log.txt
試行した対策：スクリーンショット方式の変更、エミュレーター再起動、海域変更
```

::: danger 認証情報を貼り付けないでください
`config/deploy.yaml`、`password.txt`、`remote-access.json`、SSH 秘密鍵、アカウント情報の写ったスクリーンショットは絶対に添付しないでください。メンテナがこれらを要求することはありません。
:::

## &#x20;Pull Request（PR）の送信

### 基本フロー

1. リポジトリを Fork し、デフォルトブランチからトピックブランチを作成します（コアは `master`、ランチャーと Android は `main`）。
2. 単一の課題・目的に絞って改変を行います。
3. 変更に関連するテストやコード生成スクリプトを実行します。
4. `.github/PULL_REQUEST_TEMPLATE.md` に従って PR 本文を記述します。
5. CI が正常にパスすることを確認します。

### コアリポジトリにおける必須チェック

| 変更内容 | 必須アクション |
| --- | --- |
| 設定 YAML の変更 | `config_updater` を実行し、生成成果物をコミット |
| ボタンリソースの変更 | `button_extract` を実行 |
| API パラメータの変更 | `export_api_schema` を実行 |
| 新規タスクの追加 | 5言語の i18n 辞書、モジュールドキュメント、索引の追加 |
| モジュール仕様の変更 | `docs/modules/` 内の該当ドキュメントを更新 |

### 禁止事項

* `args.json`、`menu.json`、`config_generated.py`、`generated.ts`、`contract.json` を手作業で直接編集しないでください。
* `--no-verify` による Git フックのバイパスは避けてください。
* 機能変更の PR に無関係なコードフォーマット変更を混入させないでください。
* PR 内に `config/`、`log/`、`.venv/` などのローカルファイルをコミットしないでください。
* 実際に検証を行っていない状態で「テスト済み」にチェックを入れないでください。

## &#x20;コード規約

| 言語 | 規約 |
| --- | --- |
| Python | インデント4スペース。コメントは中国語可、識別子は英語。既存のモジュール構造を尊重 |
| TypeScript | strict モード。コンポーネントは近接配置。新しい状態管理ライブラリは導入しない |
| Rust | `cargo fmt`。プラットフォーム分岐は `#[cfg]`。ロギングは `tracing` |
| Kotlin | インデント4スペース。スレッド制約およびライフサイクル制約を KDoc に明記 |
| Markdown | 簡潔な技術文書スタイル。結論を先に述べ、詳細を後に展開 |

## &#x20;ドキュメントへの貢献

詳細は[ドキュメントメンテナンス](/ja/contributing/docs)を参照してください。原則は1点のみです：**事実はソースコードまたは再現可能な検証結果に基づく**ものとし、主観や推測に基づかないこと。

## &#x20;セキュリティ脆弱性の報告

セキュリティ上の問題（認証情報の漏洩、権限昇格、インジェクション等）を発見した場合は、公開 Issue を作成しないでください。GitHub リポジトリの Security タブ、またはメンテナのメールアドレス宛に非公開で報告してください。

| 分類 | 具体例 |
| --- | --- |
| 認証情報漏洩 | ログへのパスワード出力、設定ファイルの平文コミット |
| 権限昇格 | ループバック外からの `/android/*` への不正アクセス、Binder 戻り値の未検証 |
| インジェクション | 設定値のエスケープ不備によるシェルコマンド注入 |
| サプライチェーン | 依存関係の乗っ取り、ハッシュ検証のない外部ダウンロード |

## &#x20;ライセンス

| リポジトリ | ライセンス | 注意事項 |
| --- | --- | --- |
| コアプログラム | GPL-3.0 | 改変版を配布する場合はソースコード公開が必須 |
| Android ホスト | AGPL-3.0 | ネットワーク越しに利用させる場合もソースコードの提供義務あり |
| ランチャー | GPL-3.0 | 同上 |

貢献を送信した時点で、各リポジトリのライセンスに従ってコードや素材が配布されることに同意したものとみなされます。権利関係が不明確なコードや素材は提出しないでください。
