Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

プロジェクトへの貢献

整合性チェック

コード・テスト・スクリプト・ドキュメントのいずれかを変更するたびに、 3 つの層が同期していることを確認してください。

  1. コード → ドキュメント: モジュール・関数・ CLI コマンド・動作を追加・削除・名前変更した場合は、それを参照するすべてのドキュメントを更新してください(concepts.mdarchitecture.mdcli.mdquickstart.mddemo.mdtraceability.md)。
  2. ドキュメント → コード: ドキュメントが機能やコマンドを説明している場合は、それが存在し、説明通りに動作することを確認してください。古くなったサンプルや誤ったテストターゲット名は CI 失敗の原因になります。
  3. スクリプト → コード: テストファイルや Cargo フィーチャーの名前を変更した場合は、それを参照するすべてのスクリプトとワークフローを更新してください(例:scripts/integration_test.sh.github/workflows/)。
  4. トレーサビリティ: コンプライアンスコントロールを実装または変更した場合は、docs/src/traceability.mdのステータスを更新してください(✅ / ⚠️ / 🔲)。

PR 作成前の簡単な grep チェック:

# Find docs that mention a symbol you changed
grep -r "<old-name>" docs/ scripts/ .github/

Issue ラベル

すべての Issue には 1 つの タイプ ラベル、 1 つの 優先度 ラベル、 1 つ以上の カテゴリ ラベルを付けてください。

タイプラベル

ラベル使用場面
bug何かが壊れているか、誤った動作をしている
enhancement新機能または既存動作の改善
documentationドキュメントのみの変更 — プロダクションコードへの影響なし

優先度ラベル

ラベル意味
priority:P0必須 — 対象標準( CLS ・ JC-STAR ・ CRA )を満たすために直接必要。解決するまで作業はブロックされる壊れた署名検証、欠けたハッシュチェーンリンク、失敗している完全性ゲート
priority:P1望ましい — コンプライアンスの態勢や開発者体験を強化するが、標準適合のハードブロッカーではない鍵ローテーションツール、 CI 強化、トレーサビリティマトリックス、 FFI ブリッジ
priority:P2ベストエフォート — ストレッチゴール・あると良いもの・専用ハードウェアを必要とするもの。余裕があれば取り組むHSM 統合、教育白書、リファレンスアーキテクチャ

判断に迷う場合は「標準が明示的にこれを要求しているか?」と問いかけてください。 Yes なら P0 。標準で義務付けられていないが役立つなら P1 。ストレッチゴール・望ましい追加・ハードウェア依存の作業なら P2 。

カテゴリラベル

ラベル使用場面
coreコアセキュリティコントロール — 署名・ハッシュ・完全性ゲート・インジェストパイプライン
compliance-governanceコンプライアンスエビデンス・トレーサビリティマトリックス・開示プロセス
devsecopsCI/CD パイプライン・サプライチェーンセキュリティ・静的解析・監査ツール
platform-operationsインフラ・デプロイメント・運用準備
hardware-needed物理ハードウェアまたはハードウェアバックのインフラが必要(常にpriority:P2と組み合わせること)

プルリクエストの規約

プルリクエストを作成する際は、常にブランチを作成したユーザーをアサインしてください。

gh pr create --assignee "@me" --title "..." --body "..."

必須:コード変更後は必ずテストを実行する

毎回 のコード変更後に実行:

cargo test --workspace

すべてのテストが通過するまで変更が完了したとみなさないでください。

ユニットテスト

前提条件( macOS )

まず Rust ツールチェーンをインストール:

brew install rustup-init
rustup-init -y
source "$HOME/.cargo/env"
rustup default stable

cargo-denyをインストール( OSS ライセンスチェックに必要):

cargo install cargo-deny
source "$HOME/.cargo/env"
cargo deny --version

テストの実行

すべてのユニットテストを実行:

cargo test --workspace

特定のクレートのテストを実行:

cargo test -p edgesentry-rs

S3 互換バックエンドフィーチャーを有効にしてedgesentry-rsクレートを実行:

cargo test -p edgesentry-rs --features s3

ライブ MinIO インスタンスに対して S3 統合テストを実行(以下の環境変数が設定されている必要があります):

TEST_S3_ENDPOINT=http://localhost:9000 \
TEST_S3_ACCESS_KEY=minioadmin \
TEST_S3_SECRET_KEY=minioadmin \
TEST_S3_BUCKET=bucket \
cargo test -p edgesentry-rs --features s3 --test integration -- --nocapture

4 つのTEST_S3_*変数のいずれかが未設定の場合、テストは自動的にスキップされます。

ユニットテストと OSS ライセンスチェックを 1 コマンドで実行:

./scripts/run_unit_and_license_check.sh

静的解析と OSS ライセンスチェック

リリース前に以下のチェックを使用してください。

1) 静的解析(clippy

cargo clippy --workspace --all-targets --all-features -- -D warnings

2) 依存関係セキュリティアドバイザリチェック(cargo-audit

一度だけインストール:

cargo install cargo-audit

実行:

cargo audit

3) 商用利用 OSS ライセンスチェック(cargo-deny

一度だけインストール:

cargo install cargo-deny

ライセンスチェックを実行(ポリシーはdeny.tomlに定義):

cargo deny check licenses

完全な依存関係ポリシーチェック(オプション):

cargo deny check advisories bans licenses sources

このチェックが失敗した場合は、違反しているクレートを調べ、法務/セキュリティレビューの後にのみ依存関係またはポリシーを更新してください。


main とのコンフリクトを避ける

コンフリクトは、フィーチャーブランチが main から分岐した後、同じファイルに触れる他の PR が main にマージされると発生します。このリポジトリで最もコンフリクトしやすいファイルはscripts/local_demo.shdocs/src/demo.md.github/copilot-instructions.mdです。

作業開始前に

git fetch origin
git checkout main && git pull origin main
git checkout -b <your-branch>

ブランチを最新の状態に保つ — 特に PR を開く前に、定期的に main にリベースしてください:

git fetch origin
git rebase origin/main

リベース中のコンフリクトの解消

  1. コンフリクトしているファイルを特定:git diff --name-only --diff-filter=U
  2. 各ファイルについて、どちら側を保持するかを決定:
    • 自分のバージョンを採用: git checkout --theirs <file>
    • main のバージョンを採用: git checkout --ours <file>
    • 手動でマージ: <<<<<<< / ======= / >>>>>>>マーカーを削除するようにファイルを編集する
  3. 解消したファイルをステージ:git add <file>
  4. 続行:GIT_EDITOR=true git rebase --continue
  5. 次のコミットで再度コンフリクトが発生した場合は、ステップ 1 から繰り返す。

解消後、リベースしたブランチを force-push :

git push --force-with-lease origin <your-branch>

最もコンフリクトしやすいファイル — 編集前に調整してください:

ファイル頻繁にコンフリクトする理由
scripts/local_demo.sh複数の PR がステップを追加したりデモフローを再構成したりする
docs/src/demo.mdデモスクリプトの変更を反映する
.github/copilot-instructions.md新しいモジュールやサンプルが追加されるたびに構造セクションが更新される
crates/edgesentry-rs/examples/lift_inspection_flow.rsクイックスタートの改善とロール境界の両方の作業で触れられる