0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

レビュー、サジェスチョン、マージリクエスト承認、コードオーナー

0
Posted at

レビュー、サジェスチョン、マージリクエスト承認、コードオーナー

(トップページはこちら) - (コード管理を始める)

コードレビューの課題は明確です。レビュー待ちでマージリクエストが滞留し、レビュアーの負荷が偏り、承認プロセスが形骸化する。GitLabは、これらの課題に対して、レビュープロセスの可視化、変更提案の直接適用、承認ルールの自動化という3つのアプローチで応えます。本記事では、GitLabのコードレビュー機能を体系的に解説し、実践的な導入方法を示します。

1. レビュープロセスの全体像

GitLabのレビュー機能は、レビュー依頼から承認までを一貫してサポートします。

1.1. レビュアーの指定方法

適切なレビュアーを見つけることが、効率的なレビューの第一歩です。

基本的な指定(全エディション)

サイドバーの「Reviewers」セクションから名前で検索するか、クイックアクション /assign_reviewer @username を使用します。

承認ルールに基づく指定(Premium/Ultimate)

「Assign reviewers」ドロワーを使用すると、承認ルールやCode Ownersに基づいて適切なレビュアーを自動的に提案します。

例えば、「3人のCode Owner承認が必要」というマージリクエストでは、変更されたファイルのCode Ownerが自動的にリストアップされます。これにより、誰に依頼すべきか迷う時間を削減できます。

1.2. レビューの実施

レビュアーは、定められたプロセスに従ってレビューを進めます。

レビュー開始

  1. マージリクエストの「Changes」タブを開く
  2. 最初のコメントで「Start a review」を選択
  3. サイドバーのステータスが「Reviewer started review」に変更される

「Start a review」を選択することで、コメントは未公開状態(Pending)となります。これにより、レビュー途中の未完成なコメントが作成者に通知されることを防ぎます。

レビューステータスの可視化

サイドバーには、各レビュアーの状態がリアルタイムで表示されます。

アイコン 状態 説明
レビュー未開始 レビュー依頼を受けたが、まだ着手していない
レビュー進行中 レビューを開始し、コメントを追加している
承認済み レビューを完了し、承認した
変更要求 レビューを完了し、変更を要求(マージブロック中)

この可視化により、マージリクエスト作成者は、誰がレビュー中で、誰がまだ着手していないかを一目で把握できます。

1.3. レビュー結果の提出

レビューを完了する際は、3つの選択肢から結果を選びます。

Approve(承認)

フィードバックを残しつつ、変更を承認します。必要な承認数が満たされると、マージリクエストはマージ可能になります。

Comment(コメント)

明示的な承認や変更要求を行わず、一般的なフィードバックのみを残します。軽微な指摘や、参考情報の共有に使用します。

Request changes(変更要求)

Premium/Ultimateでは、この選択によりマージリクエストが物理的にブロックされます。変更要求を行ったレビュアー自身が再承認するまで、マージボタンは無効化されます。

変更要求のバイパス

変更要求を行ったレビュアーが休暇中などで不在の場合、マージ権限を持つユーザーは「Bypass」機能でブロックを解除できます。ただし、マージ時に警告アイコンが表示され、どのチェックがバイパスされたかが記録されます。

2. 変更提案機能(Suggestions)

レビューコメントで「こう直すべき」と文章で説明するのではなく、具体的なコード変更を提案し、ワンクリックで適用できる機能です。

2.1. 変更提案の作成

単一行の提案

  1. 変更したい行にカーソルを合わせ、コメントアイコンをクリック
  2. ツールバーから「Insert suggestion」を選択
  3. 自動挿入されたコードブロックを編集
```suggestion:-0+0
修正後のコード
```

複数行の提案(最大200行)

行番号を選択してドラッグするか、オフセット値を手動で編集します。

```suggestion:-2+2
## 作成者による承認を防止

デフォルトでは、マージリクエストの作成者は自身のマージリクエストを承認できません。この設定を変更するには:
```

オフセット値の意味:

  • -2: コメント行の2行上から
  • +2: コメント行の2行下まで

この例では、合計5行(上2行 + コメント行 + 下2行)を置き換えます。

リッチテキストエディタの活用

GitLab 16.2以降では、WYSIWYGエディタで行番号を視覚的に調整できます。「From line」の横にある「+」「-」ボタンをクリックするだけで、変更範囲を直感的に指定できます。

2.2. 変更提案の適用

作成者またはDeveloper権限以上のユーザーは、提案を適用できます。

個別適用

各提案の「Apply suggestion」ボタンをクリックすると、即座にコミットが作成され、マージリクエストのブランチにプッシュされます。

バッチ適用(推奨)

複数の提案をまとめて適用することで、コミット履歴を整理できます。

  1. 各提案で「Add suggestion to batch」を選択
  2. すべて選択後、「Apply suggestions」をクリック
  3. 必要に応じてコミットメッセージをカスタマイズ

注意点: バッチ適用では、複数の提案者がいる場合でも、適用者が単独のコミット作成者となります。プロジェクト設定で「コミット追加者による承認を防止」を有効にしている場合、適用者は承認者から除外されます。

2.3. コミットメッセージのカスタマイズ

プロジェクト設定(Settings → Merge requests → Merge suggestions)で、提案適用時のコミットメッセージテンプレートをカスタマイズできます。

利用可能な変数

変数 説明 出力例
%{suggestions_count} 適用した提案の数 3
%{files_count} 変更したファイル数 2
%{file_paths} 変更したファイルのパス(カンマ区切り) docs/index.md, docs/about.md
%{username} 適用者のユーザー名 tanaka_taro
%{user_full_name} 適用者のフルネーム 田中太郎
%{co_authored_by} 提案者の共同作成者情報 Co-authored-by: 山田花子 <yamada@example.com>

カスタマイズ例

デフォルト:

Apply %{suggestions_count} suggestion(s) to %{files_count} file(s)

カスタマイズ:

%{username}のレビュー指摘に対応

%{co_authored_by}

出力:

tanaka_taroのレビュー指摘に対応

Co-authored-by: 山田花子 <yamada@example.com>
Co-authored-by: 佐藤次郎 <sato@example.com>

3. 承認ルールによる品質管理

承認ルールを設定することで、マージ前に必要なレビューを強制し、コード品質を担保します。

3.1. エディション別の機能比較

機能 Free Premium/Ultimate
承認機能 ○(任意) ○(必須化可能)
最小承認者数の設定 ×
承認ルールの作成 ×
Code Owners承認 ×
カテゴリ別レビュアー ×
セキュリティポリシー連携 × ○(Ultimateのみ)

3.2. 承認ルールの設定

設定手順

  1. プロジェクトの「Settings」→「Merge requests」を開く
  2. 「Merge request approvals」セクションで承認ルールを設定
  3. ルール名、最小承認者数、承認者を指定

実践的なユースケース

ケース1: 最小承認者数の設定

すべてのマージリクエストに対して、最低2人の承認を必須化します。

  • ルール名: 最小レビュー
  • 最小承認者数: 2
  • 承認者: すべてのDeveloper以上

ケース2: カテゴリ別レビュアー

変更内容に応じて、専門家のレビューを必須化します。

ルール名 対象 最小承認者数 承認者
バックエンドレビュー すべて 1 @backend-team
フロントエンドレビュー すべて 1 @frontend-team
セキュリティレビュー すべて 1 @security-team

ケース3: テストカバレッジ低下の防止

テストカバレッジが低下した場合、QAチームの承認を必須化します。

  • ルール名: カバレッジ低下時の承認
  • トリガー: カバレッジ低下
  • 最小承認者数: 1
  • 承認者: @qa-team

3.3. 承認ステータスの確認

マージリクエスト単体での確認

マージリクエストウィジェットに承認ステータスが表示されます。

表示 意味
Approve さらに承認が必要(マージ不可)
Approve additionally 必要な承認数は満たしている(追加承認も可能)
Revoke approval すでに承認済み(取り消し可能)

「Expand eligible approvers」を選択すると、各承認ルールの詳細と、誰が承認可能かを確認できます。

マージリクエスト一覧での確認

プロジェクトやグループのマージリクエスト一覧では、各マージリクエストの承認状態がアイコンで表示されます。

アイコン 状態
承認が不足(マージ不可)
承認済み(マージ可能)
承認済み(自分も承認者の一人)

3.4. 無効なルールの扱い

以下の場合、承認ルールは「Auto approved」として自動的に承認されます。

  • 唯一の承認者がマージリクエスト作成者本人
  • 承認可能なユーザーが割り当てられていない
  • 必要な承認数が承認可能なユーザー数を超えている

例外: セキュリティポリシー

セキュリティポリシーで作成されたルールは自動承認されず、「Action required」と表示されてマージをブロックします。これにより、セキュリティ要件が確実に満たされます。

4. Code Owners機能

Code Owners機能は、コードベースの特定部分に対する責任者を明確化し、適切な専門家のレビューを保証します。

4.1. Code Ownersの役割

品質保証

特定のファイルやディレクトリに対して、専門知識を持つユーザーの承認を必須化できます。

責任の明確化

ファイルやディレクトリの所有者が、GitLab UIに表示されます。「このコードは誰に聞けばいいのか」という疑問を解消します。

4.2. Code Ownersと承認ルールの使い分け

Code Ownersと承認ルールは、異なる目的で使用します。

項目 Code Owners 承認ルール
目的 ファイル・ディレクトリ単位の所有者定義 プロジェクト全体の承認プロセス定義
対象範囲 特定のファイルパターン すべてのファイル、または条件付き
設定場所 CODEOWNERSファイル プロジェクト設定
変更頻度 高(コードベースの変化に応じて) 低(プロジェクトポリシーの変更時)

実践的な組み合わせ例

種類 名前 対象範囲 説明
承認ルール UX すべてのファイル UXチームメンバーがすべての変更をレビュー
承認ルール セキュリティ すべてのファイル セキュリティチームが脆弱性をレビュー
Code Owner承認ルール フロントエンド: コードスタイル *.cssファイル フロントエンドエンジニアがCSSのスタイル規約をレビュー
Code Owner承認ルール バックエンド: コードレビュー *.rbファイル バックエンドエンジニアがRubyファイルのロジックとスタイルをレビュー

4.3. CODEOWNERSファイルの設定

配置場所

GitLabは以下の順序でCODEOWNERSファイルを検索し、最初に見つかったファイルを使用します。

  1. ルートディレクトリ: ./CODEOWNERS
  2. docsディレクトリ: ./docs/CODEOWNERS
  3. .gitlabディレクトリ: ./.gitlab/CODEOWNERS

基本的な記述例

# バックエンドチーム
*.rb @backend-team
/app/models/ @backend-team @database-team

# フロントエンドチーム  
*.vue @frontend-team
*.css @frontend-team @design-team

# インフラチーム
/config/ @infra-team @security-team
/docker/ @infra-team
Dockerfile @infra-team

# ドキュメントチーム
*.md @doc-team
/docs/ @doc-team

# セキュリティチーム(機密情報)
/config/secrets/ @security-team
.env.* @security-team

複数承認の設定

特定のディレクトリに対して、複数のCode Ownerの承認を必須化できます。

# 2人の承認が必要
[2] /config/production/ @infra-team @security-team

# 3人の承認が必要
[3] /app/payments/ @backend-team @security-team @finance-team

4.4. 保護ブランチとの連携

Code Ownersの承認を強制するには、保護ブランチの設定が必要です。

設定手順

  1. プロジェクトの「Settings」→「Repository」→「Protected branches」を開く
  2. 保護するブランチ(例: main)を選択
  3. 「Require code owner approval」を有効化

実用例: 機密情報の保護

プロジェクトのconfig/ディレクトリに機密情報が含まれている場合:

ステップ1: CODEOWNERSファイルの作成

# 機密情報の保護
/config/ @infra-team @security-team

# 本番環境設定は3人の承認が必要
[3] /config/production/ @infra-team @security-team @cto

ステップ2: 保護ブランチの設定

  1. mainブランチを保護ブランチに設定
  2. 「Require code owner approval」を有効化
  3. 「Allowed to push and merge」を制限(Maintainer以上)

この設定により、config/ディレクトリを変更するマージリクエストは、指定されたCode Ownersの承認なしにはマージできなくなります。

「Allowed to push and merge」権限の注意点

この権限を持つユーザーは、マージリクエストを経由せずに直接ブランチにプッシュできます。その場合、Code Owner承認を含むマージリクエストの保護機能がバイパスされます。

推奨設定:

  • 人間のユーザー: この権限を付与せず、すべての変更をマージリクエスト経由で行う
  • 自動化アカウント: CI/CDやリリースツールなど、信頼できる自動化にのみ付与

4.5. Code Ownersの確認方法

ファイル・ディレクトリ単位での確認

  1. プロジェクトの「Code」→「Repository」を開く
  2. 確認したいファイルまたはディレクトリに移動
  3. ページ上部にCode Ownersが表示される

マージリクエストでの確認

マージリクエストの承認ステータスで「Expand eligible approvers」を選択すると、以下の情報を確認できます。

  • どのCode Ownerルールが適用されているか
  • 各ルールに対して誰が承認可能か
  • 現在の承認状況

5. レビュー効率化のための機能

5.1. 再レビュー依頼

レビュアーがレビューを完了した後、作成者は再レビューを依頼できます。

依頼方法

方法1: クイックアクション

/request_review @yamada_hanako

方法2: サイドバーから
サイドバーのレビュアー名横にある「Re-request a review」アイコン(↻)をクリック

効果

  • レビュアーに新しいTo-Doアイテムが作成される
  • レビュアーに通知メールが送信される
  • レビューステータスが「レビュー未開始」にリセットされる

5.2. レビュー中のスレッド解決

コメント返信時に、スレッドの解決・再オープンを同時に実行できます。

手順

  1. コメントを記入
  2. 「Resolve thread」または「Reopen thread」を選択
  3. 「Add comment now」または「Add to review」を選択

Pendingコメントには、レビュー送信時に実行される遅延アクションの情報が表示されます。これにより、レビュー完了時にどのスレッドが解決されるかを事前に確認できます。

5.3. レビュードロワー

画面右上の「Your review」をクリックすると、レビュードロワーが開きます。

機能

未公開コメントの管理

  • すべての未公開コメントを一覧表示
  • 各コメントの編集・削除
  • コメントの対象行へのジャンプ

レビュー結果の選択

  • Approve: 承認
  • Comment: コメントのみ
  • Request changes: 変更要求(Premium/Ultimate)

レビューサマリーの記入

  • レビュー全体の総括コメント
  • クイックアクションの実行
  • AI生成サマリー(Premium/Ultimate)

レビューの破棄

「Discard review」を選択すると、未公開のコメントがすべて削除されます。この操作は取り消せないため、注意が必要です。

使用場面:

  • レビューを中断し、後で最初からやり直したい場合
  • 誤って大量のコメントを追加してしまった場合

5.4. キーボードショートカット

効率的なレビューのために、以下のショートカットを活用できます。

グローバルショートカット

ショートカット 機能
Shift+m マージリクエスト一覧を表示
Shift+r レビュー依頼ページを表示

コメント入力時のショートカット

OS コメント追加(即時公開) レビューに追加(未公開)
macOS Shift+Command+Enter Command+Enter
その他 Shift+Control+Enter Control+Enter

6. 段階的な導入戦略

GitLabのコードレビュー機能は、プロジェクトの成熟度に応じて段階的に導入することで、最大の効果を発揮します。

6.1. フェーズ1: 基本的なレビューフロー(Free版でも可能)

対象: チーム立ち上げ期、小規模プロジェクト

導入する機能:

  • レビュアー指定
  • 変更提案機能
  • レビューステータスの可視化

期待される効果:

  • レビューの抜け漏れ防止
  • レビューコメントの適用時間の短縮(手動修正 → ワンクリック適用)
  • レビュー進捗の可視化

導入のポイント:
まず、変更提案機能の使用をチーム内で推奨します。「こう直すべき」という文章コメントではなく、具体的なコード提案を行うことで、レビューの質が向上します。

6.2. フェーズ2: 承認ルールの導入(Premium/Ultimate)

対象: チームが成長し、コード品質の標準化が必要になった段階

導入する機能:

  • 最小承認者数の設定(推奨: 2名)
  • カテゴリ別承認ルール

期待される効果:

  • コード品質の安定化
  • レビュー責任の明確化
  • 属人化の防止

導入のポイント:
最初は最小承認者数を2名に設定するだけで十分です。過度に厳格なルールは、開発速度を低下させる可能性があります。

6.3. フェーズ3: Code Ownersの活用

対象: コードベースが複雑化し、専門領域が明確になった段階

導入する機能:

  • CODEOWNERSファイルの作成
  • 保護ブランチでのCode Owner承認の必須化
  • 複数承認ルール(機密情報など)

期待される効果:

  • 適切な専門家のレビュー保証
  • 責任範囲の明確化
  • セキュリティリスクの低減

導入のポイント:
最初は主要なディレクトリのみをCode Ownersで管理し、徐々に範囲を拡大します。すべてのファイルをCode Ownersで管理しようとすると、メンテナンスコストが高くなります。

6.4. 導入時の注意点

過度な厳格化を避ける

承認ルールやCode Ownersを厳格にしすぎると、以下の問題が発生します。

  • レビュー待ちでマージリクエストが滞留
  • 緊急時の対応が困難
  • チームメンバーのモチベーション低下

推奨: 最初は緩めに設定し、問題が発生したら段階的に厳格化します。

レビュアーの負荷分散

特定のメンバーにレビューが集中しないよう、Code Ownersやレビュアー指定を工夫します。

  • Code Ownersにチーム全体を指定(個人ではなく)
  • ローテーション制の導入
  • レビュー負荷の可視化(GitLab Value Stream Analyticsを活用)

ツールに振り回されない

GitLabの機能は強力ですが、すべてを使う必要はありません。プロジェクトの規模と成熟度に応じて、必要な機能を選択してください。

7. まとめ

GitLabのコードレビュー機能は、レビュープロセスの可視化、変更提案の直接適用、承認ルールの自動化という3つの柱で、堅牢な開発ワークフローを実現します。

重要なポイント:

  1. 段階的な導入: 小さく始めて、徐々に機能を拡張する
  2. 適切な粒度: すべてを厳格化するのではなく、重要な部分に集中する
  3. チームの成熟度に合わせる: ツールに振り回されず、チームの実情に合わせて調整する

次のステップ:

  • フェーズ1: 変更提案機能を使い始める
  • フェーズ2: 最小承認者数を2名に設定する
  • フェーズ3: 主要ディレクトリのCODEOWNERSファイルを作成する

コードレビューは、ツールだけでは完結しません。GitLabの機能を活用しつつ、チーム内でレビュー文化を育てることが、長期的なコード品質の向上につながります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?