TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

KubeVirt ソースコードリーディング 8: コントリビューション入門 — レビューの読み方、最初のPRの選び方、テストの実行

ステータス: ドラフト(2026-10-17)、リポジトリのドキュメント+ファイルの実測。 基準は KubeVirt v1.9.0(コミット 79d34c17)の CONTRIBUTING.md, docs/reviewer-guide.md, docs/getting-started.md、OWNERSファイル、PRテンプレートです。テストとビルドは実行していません。

KubeVirt ソースコードリーディング 8: コントリビューション入門

目次

1. 直観:人間の判断とボットのラベル

KubeVirtのPRは、2人の人間の判断があって初めてマージされます。 reviewer が「コードが良い」と話し、/lgtm), approver が「このリポジトリに入れてよい」/approveと言います。誰がreviewer・approverであるかは、PRが触れたフォルダの OWNERS ファイルが定め、その意志表示はPRコメントのスラッシュコマンドで行います。その言葉をラベルに変換し、テストレーンを実行し、条件がすべて揃ったらマージするのは、 prow というボットのセットです。Kubernetesと同じ方式であるため、一方を学べばもう一方でも活用できます。

2. 図

PR 하나가 main 에 들어가기까지 (prow) 코드 글꼴은 사람이 터미널이나 PR 댓글에 치는 명령 git commit -s DCO: Signed-off-by 줄이 없으면 막힌다 PR 열기 — 템플릿 · release-note 블록 첫 기여면 needs-ok-to-test 라벨 /ok-to-test 조직 멤버가 달면 시험 레인이 돈다 prow 레인: 단위 · 린트 · 기능 시험 실패하면 /retest 또는 /test <레인> 리뷰어 자동 배정 바뀐 폴더의 OWNERS → reviewers · approvers /lgtm reviewer 가 「코드가 좋다」 → lgtm 라벨 /approve OWNERS 의 approver 가 「들여도 된다」 → approved tide 가 병합 두 라벨 · 시험 통과 · /hold 없음 실측(v1.9.0): OWNERS 파일 141개 · 저장소 전체 approvers 24명 pkg/virt-controller/watch/vm 의 OWNERS 는 sig-compute 별칭을 쓴다
図:1つのPRがmainに取り込まれるまでのコマンドとラベル

3. OWNERSで地図を再び見る

v1.9.0にはOWNERSファイルが 141個 存在します(実測)。ルートの OWNERS はすべてのファイルのデフォルトのreviewer・approverをエイリアス code-reviewers·approvers として定め、ビルドファイル(BUILD.bazel, Makefile など)は sig-buildsystem で個別に処理します。フォルダ内のOWNERSはさらに限定されます。例えば第3篇の pkg/virt-controller/watch/vm/OWNERS は次のようになります。

reviewers:
  - sig-compute-reviewers
approvers:
  - sig-compute-approvers
labels:
  - area/controller
  - sig/compute

出典:kubevirt/kubevirt v1.9.0 pkg/virt-controller/watch/vm/OWNERS(コメント行を除く、Apache-2.0)。このフォルダを変更したPRにはprowが sig/compute·area/controller ラベルを付与し、sig-computeからレビュアーを選出します。エイリアスの実際の名簿は OWNERS_ALIASES にあります。 人数を集計すると次のようになります(v1.9.0、実測)。

エイリアス 人数 エイリアス 人数
approvers(全体) 24 code-reviewers 11
sig-compute-approvers 8 sig-compute-reviewers 7
sig-storage-approvers 4 sig-storage-reviewers 6
sig-network-approvers 3 sig-network-reviewers 4
sig-buildsystem-approvers 3 sig-control-plane-reviewers 7

この表こそがまさに コードの地図のもう一つの顔です。第4・5篇のネットワークコード(pkg/network, converter/network)はsig-network、第6篇のストレージ側 (pkg/storage)はsig-storage、残りの大部分はsig-computeが担当します。レビューを早く受けたい場合は、PRを1つのSIGのフォルダ内に収めるのが得策です。複数のSIGにまたがると、複数のapproverが必要になります。

4. コマンドとラベル

コマンド 実行者 効果
/ok-to-test 組織のメンバー 初めてコントリビューต์する人のPRに付く needs-ok-to-test を解除してテストレーンを実行させる(CONTRIBUTING.md 67行目)
/test <레인> · /retest メンバー・作成者 特定のレーンを再実行する / 失敗したレーンを再実行する
/lgtm reviewer lgtm ラベル。通常、新しいコミットをプッシュすると外れる
/approve そのフォルダのapprover approved ラベル。変更したOWNERS領域ごとに必要
/hold · /unhold 誰でも マージを一時的にブロックする
/cc @이름 · /assign 誰でも 人を呼び出す

マージは人がボタンを押すのではなく、 tide が行います。2つのラベルとテストの通過が満たされ、ブロック用のラベル(do-not-merge/…, /hold)がなければキューに追加されます。ドラフト(draft)PRはCIが実行されず、レビュアーもアサインされないため、方向性を相談したい場合はドラフトとしてオープンするのがマナーです。

PRに必ず含めるべきものは3つあります。

  1. すべてのコミットの Signed-off-by: — DCO。 git commit -s で付与します。ないとDCOチェックにブロックされます。
  2. PRテンプレートの release-note ブロック — ユーザーに表示される変更であれば1行、そうでなければ NONE。リリースノートはこのブロックから生成されます。
  3. テスト — レビューガイドの最低ラインは「新しいコードには単体テスト、新機能とバグ修正には1つ以上のe2eテスト」です (reviewer-guide.md:103 周辺)。

コミットメッセージはKubernetesのルールに従います(docs/commit-message-guidelines.md)。タイトルは50文字前後・命令形・ピリオドなし、本文は72文字で改行し、本文には何と なぜを記載し、 Fixes #123 のようなキーワードはコミットではなくPRの説明に記述します。冒頭に net, vmi: のような領域のプレフィックスを付ける例がドキュメントに記載されています。また、v1.9.0のPRテンプレートのチェックリストには、 KubeVirt AIコントリビューションポリシーを遵守したかを確認する項目があります。ツールの助けを借りて作成したPRである場合は、そのポリシーを事前に読んでください。

5. レビューガイドが注目するポイント

docs/reviewer-guide.md は短いですが、前述の7篇で見てきた設計がなぜそのようになっているのかを逆から説明してくれます。レビューを受ける際に出される指摘を事前に予測することができます。

アナライザーがビルド時に検出してくれます。

6.最初のコントリビューションに適した場所 本シリーズの地図から見ると、最初は1つのファイルとそのテストのみを変更する箇所

でコードを検索する方法(第1篇)を活用すると、同じ行が頻繁に出力されている箇所(第7篇のデバイス検証ログなど)を実際のクラスターで発見できます。修正する前にIssueで事前に質問することをおすすめします。

7. テストの実行方法と必要なツール

本記事の執筆にあたってはテストを実行しておらず、以下のツールもダウンロードしていません。必要な情報のみを記載します。 単体テスト。

make test                                    # Bazel 로 전체(빌더 컨테이너 안)
make go-test WHAT=./pkg/virt-controller/...  # Bazel 없이 go test (역시 컨테이너 안)

最も確実な方法は、リポジトリが指定するビルダーコンテナを使用することです。必要なのはDockerまたはPodman、rsync、そして初回のみ取得するビルダーイメージ(quay.io/kubevirt/builder:<판>, hack/dockerized 19行目)です。コンテナの外で go test を直接実行するには、 go.mod の go 1.26.0 に適合するGoと、virt-launcher側のパッケージがcgoで利用するlibvirt開発ヘッダー(libvirt.org/go/libvirt)が必要です。コンテナの外でどこまでのパッケージが動作するかはimportをたどって確認する必要があるため、今回は未確認です(未確認)。最初はコンテナを使用する方が手軽です。単体テストもGinkgoを使用しているため、個別で実行する際は -ginkgo.focus='문자열' を渡します。

機能テスト。 make cluster-up はkubevirtciでノードをVMとして起動したクラスターを作成し、 make cluster-sync が自身のビルドをデプロイし、 make functest が tests/ を実行します。一部のみを実行する場合は FUNC_TEST_ARGS='--focus-file=…' を使用します(docs/getting-started.md 221行目)。必要なのは、 ネストした仮想化(Nested Virtualization)が有効なLinuxマシーン(Macでは困難です)、十分なメモリ、そしてkubevirtciが取得するノードイメージです。PRではこのテストをprowのレーンがSIGごとに代行して実行してくれるため、最初は単体テストまでを自分のマシーンで実行し、機能テストはレーンの結果を確認することから始めても問題ありません。

8. 制限事項

Tidから一言。 最初のPRは小さければ小さいほど良いです。1つのファイル、1つのテスト、そして変更理由を1段落!そしてレビューのコメントは攻撃ではなく、地図の空欄を埋めてくれるものです。感謝を伝えて1つずつ修正していけば大丈夫です!

参考

すべて2026-10-17に閲覧しました。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます