CODEOWNERSの設定:PR放置とレビュー担当間違いを解消する

Git tutorial - IT technology blog
Git tutorial - IT technology blog

PRが「放置」されたり、専門外のレビューが行われたりする悩み

5〜10人のチームで働いているなら、魂を込めて作成したプルリクエスト(PR)が誰にも見向きもされず放置されるという経験が一度はあるはずです。たとえ実践的なブランチ管理術を導入していても、リンクをチャットグループに送って、1時間、2時間、そして丸一日経っても反応がない。あるいはさらに悪いことに、フロントエンド専門のメンバーがバックエンドのロジックをレビューし、的を射ていないフィードバックが返ってくることもあります。

問題の根源は「コードの所有権(Code Ownership)」の曖昧さにあります。全員にすべてをレビューする権限がある場合、結果として「誰も自分に責任があると感じない」状態に陥りがちです。その結果、リリースのスピードが落ち、Gitの履歴を「ゴミの山」にしないための取り組みと同様に、コードの品質も運任せになってしまいます。

私が以前参加した受託案件での実体験です。あるジュニアエンジニアが、誤ってDevOpsチームの docker-compose.yml ファイルを修正してしまいました。チェック機能がなかったため、別のジュニアエンジニアがPRを承認し、そのままメインブランチにマージ。結果としてCI/CDがダウンし、チーム全員がエラーの特定に午後の時間を丸々潰すことになりました。この一件以来、私は CODEOWNERS は単なるオプションではなく、システムを守るために必須のものだと確信しました。

CODEOWNERSとは?

CODEOWNERS は、リポジトリ内での「役割分担表」だと考えてください。これはリポジトリ(GitHub/GitLab)内に配置するシンプルな設定ファイルで、どのコードに対して誰(またはどのチーム)が責任を持つかを正確に定義します。

リストに含まれるファイルに変更を加えると、システムが自動的に担当者をReviewersとして割り当てます。もう、どのファイルを誰が書いたか覚えたり、手動でメンションを飛ばしたりする必要はありません。GitHub CLI (gh) 活用術を併用すれば、ターミナルから離れることなく迅速にレビュー作業を進めることも可能です。

主な3つのメリット:

  • 完全な自動化: 各PRでの待機時間やメンションの手間を5〜10分削減。
  • 適材適所: データベース関連のコードはDBAが、CSSはUI/UXエキスパートが担当。
  • 最大限のセキュリティ: /security/config などの機密ファイルは、常に経験豊富なメンバーが監視。

CODEOWNERSの詳細な設定方法

GitHubとGitLabの両方がこのファイルをサポートしており、構文はほぼ同じですが、ファイルの配置場所が少し異なります。

1. ファイルの配置場所

CODEOWNERS ファイル(拡張子なし)は、以下のパスに配置できます:

  • ルートディレクトリ: /CODEOWNERS
  • 隠しディレクトリ: .github/CODEOWNERS または .gitlab/CODEOWNERS

私は常に .github/ または .gitlab/ ディレクトリ内に置くようにしています。これにより、プロジェクトのルートディレクトリをスッキリ保つことができます。

2. 構文の書き方

CODEOWNERS の構文は .gitignore に非常によく似ています。ファイルパスを指定し、その後に責任者のユーザー名を記述するだけです。

# リポジトリ内のすべてのファイルにデフォルト의 担当者を割り当て
*       @tech-lead-username

# フロントエンドチームがすべての .js ファイルを担当
*.js    @org-name/frontend-team

# ドキュメント専用ディレクトリの指定
/docs/  @documentation-expert

# インフラ設定ファイルはDevOpsシニアのみが承認可能
/infra/terraform/  @devops-senior

黄金律: ファイル内の記述順序は非常に重要です。下の方に書かれた行ほど優先度が高くなります(上のルールを上書きします)。

フルスタックプロジェクトでの実践的な活用

Webアプリを運用しているチームを想定してみましょう。「誰でも何でも修正できる」状態を避けるために、CODEOWNERS ファイルは以下のように分割するのが理想的です:

# 1. テックリードがシステム全体を監視
* @big-boss

# 2. バックエンドの権限割当
/src/api/ @backend-team

# 3. フロントエンドの権限割当
/src/components/ @frontend-team
/src/styles/ @frontend-team

# 4. インフラとCI/CDの保護
.github/workflows/ @devops-engineer
Dockerfile @devops-engineer

フロントエンドのメンバーが /src/components/ 内のファイルを修正すると、GitHubは自動的に @frontend-team をPRに割り当てます。もしそのついでに Dockerfile も修正してしまった場合、即座に @devops-engineer が呼び出されます。

Protected Branchesと組み合わせて規律を高める

CODEOWNERS ファイルを作成しただけでは、まだ単なる「推奨」レベルです。これを真の防壁にするには、Branch Protection Rules(ブランチ保護ルール)を有効にする必要があります。

GitHubでは、Settings > Branches に移動し、メインブランチを選択して Require review from Code Owners にチェックを入れます。これにより、指定された「オーナー」の署名なしではPRをマージできなくなります。これはmainブランチを保護し、チームの「ゴミコード」を阻止する方法と組み合わせることで、より強固な開発フローを実現できます。

実体験に基づく注意点

多くのプロジェクトに導入する中で、チームに迷惑をかけないための3つの教訓を得ました:

  • 1つのファイルに多くのオーナーを割り当てすぎない: 1つのファイルを5人で管理していると、「きっと他の誰かがレビューするだろう」という心理が働きます。特に大規模なForking Workflowを採用しているプロジェクトでは、1〜2人、または少人数のチームに割り当てるのがベストです。
  • 人員の変更を迅速に反映する: メンバーが退職した場合は、すぐに CODEOWNERS ファイルを修正してください。唯一のレビュアーが先月退職したためにPRが止まってしまう、という事態は避けましょう。
  • テックリードをボトルネックにしない: 大規模なチームの場合、すべてのファイルに * @tech-lead を割り当てるのは避けましょう。テックリードが通知攻めに遭い、プロジェクト全体のボトルネックになってしまいます。

CODEOWNERS の導入は、プロセスをプロフェッショナル化するための重要な一歩です。これは単なるツールではなく、チーム内に責任感の文化を醸成するのに役立ちます。今日から設定を試してみてください。1週間後には、コードの品質とスピードの違いを実感できるはずです。

Share: