承認 / 承認を得る: その意味、Gitにおける承認とコードレビュー

著者: IT Sectr 公開日: 2026-08-01 読了時間: 8 分

Approval(承認)は、GitHub、GitLabまたはBitbucketにおいて、pull requestがコードレビューを経て、ターゲットブランチにマージできることを確認するものです。リポジトリの所有者が必須承認の数を設定し、その後PRがマージのためにアンロックされます。GitHubのドキュメンテーション(2026)によると、レビュー中にレビュアーはコメントを残したり、変更を要求したり(Request Changes)、PRを承認したり(Approve)できます。承認は単なる形式だけではなく、法的な行為でもあります: レビュアーは受け入れられるコードの品質に対して責任を負います。

まとめ

  • 承認 — コードレビュー後のpull requestの承認、ターゲットブランチへのマージを許可します。
  • レビュアーの数 — リポジトリで設定: 1人から指定された全員の必須承認まで。
  • Request Changes — ブロック中のステータス: 修正後の再レビューまでPRをマージできません。
  • 著者による承認 — 禁止: コードの作成に関与していない独立した開発者が判断を下します。
  • CI/CDゲート — すべてのチェックが成功した場合にのみ、承認によってPRが自動的にアンロックされます。

pull request承認とは

承認は、pull requestに対する良好なレビューであり、レビュアーがコードをチェックし、危重な問題がないことを確認し、変更がマージの準備ができているとみなすことを意味します。GitHubのインターフェースでは、これはPRページの緑色の«Approve»ボタンです。承認後、著者(または書き込み権限を持つメンバー)がマージを実行できます。

承認プロセスはBranch Protection Rulesの一部です。リポジトリの所有者は必須要件を設定します: 最小承認数(例えば1または2)、承認できる人(コード所有者、チームメンバー)、および変更後にPRを再承認する必要があるか(Dismiss stale reviews)。ルール設定なしでは承認はオプションですが、プロのチームでは必須です。

GitLabはApproval Rulesと呼ばれる同様の仕組みを使用します。GitLabでは、異なるグループからの必要承認数を設定できます(例えば、バックエンド開発者から2つ、DevOpsから1つ)。すべての必須承認を受けた後、CI/CDパイプラインが緑であれば、PRはマージのために自動的にアンロックされます。

レビューの種類: Approve, Request Changes, Comment

GitHubとGitLabには、レビュアーがpull requestに残すことができる3つのレビュータイプがあります。各タイプには異なるステータスとマージプロセスへの影響があります。Approveは緑、Request Changesは赤、Commentは中性の灰色です。選択はコードの品質と変更の受け入れ準備によります。

Approve — レビュアーが確認: コードは正しく書かれており、基準を満たし、明らかなエラーがなく、マージできます。Approveはコードが完璧であることを意味しません — ただプロダクションに十分なクオリティであるというだけです。小さなコメント(スタイル、名前付け)がある場合は、PRをブロックせずにコメントとして残すことができます。

Request Changes — レビュアーが、マージ前に修正すべき問題を発見: 論理エラー、脆弱性、アーキテクチャ違反、テスト不足。Request Changes後、PRはブロックされ、同じレビュアーによる再承認が必要です(新しいコミットでDismiss stale reviewsが有効な場合)。

  • Approve — コードはマージ準備完了、CIクリア後にマージ可能。
  • Request Changes — 必須修正があり、再レビューまでPRはブロック。
  • Comment — PRをブロックせずに一般的な指摘または提案。

リポジトリでの承認ルール設定

Branch Protection Rulesは、マージの品質を制御するGitHubの仕組みです。保護されたブランチ(main、develop、release/*)ごとにSettings → Branchesで設定します。主なパラメータ: 必須承認数、コード所有者(CODEOWNERS)、必須CI/CDチェック、およびPRなしのpushの禁止。

Dismiss stale pull request approvalsパラメータは、PRに新しいコミットが追加された場合に自動的に承認を外します。これにより、レビュアーがマージされるコードのバージョンを承認することが保証されます。この設定がなければ、著者は承認後に新しいコードを追加し、再チェックなしでmainに入ってしまう可能性があります。

CODEOWNERS — リポジトリのルートにあるファイルで、異なるディレクトリの責任者を指定します。PRがコード所有者のファイルに影響する場合、その承認が必須になります。CODEOWNERSにより責任範囲を分散できます: iOS開発者はSwiftファイル、DevOpsはDocker設定、テスターはテストシナリオを担当します。

bash
# リポジトリルートのCODEOWNERSファイル例

# iOS開発者がSwiftコードを所有
*.swift @team/ios-developers

# DevOpsがCI/CD設定を所有
.github/workflows/* @devops-team

# QAエンジニアがテストをレビュー
**/tests/* @qa-engineers

# その他全てのデフォルト所有者
* @tech-leads

承認前のコードレビュー: 確認事項

承認前のコードレビューは、システマティックなコードチェックであり、diffをちらっと見るだけではありません。質の高いコードレビューには、アーキテクチャ、論理、スタイル、テスト、セキュリティのチェックが含まれます。このチェックがなければ、承認は品質管理ツールではなく、形式となってしまいます。

まず確認すること: 変更の論理 — コードは任務を解決しているか、副作用はないか、エッジケースの処理は正しいか。テスト — 新しいテストはすべてのシナリオをカバーしているか、既存のテストは変更後もパスするか。セキュリティ — SQLインジェクション、XSS、機密データの漏えいがないか。

レビューの対象としてはならないべきもの: フォーマッティングスタイル(そのためのlinterやformatterがあります)、事前に決定されたアーキテクチャ決定(コードを書く前に話合いされます)。レビューが400行を超えたり、1時間を超えたりする場合、それは任務が大きすぎて分解が必要であることを示しています。最良のレビュー実践 — PR作成後24時間以内の200〜400行のポーション。

  • 論理 — 解決の正確さ、エラー処理、エッジケース。
  • テスト — 新しいシナリオのカバレッジ、既存テストのパス、flakyテストの無さ。
  • セキュリティ — インジェクションの無さ、出力のエスケープ、データアクセス制御。
  • パフォーマンス — アルゴリズムの効率、過剰なクエリ、メモリリーク。
  • ドキュメンテーション — ドキュメントは更新されているか、複雑な部分のコメントは明確か。

チームでの承認ワークフロー

5〜10人の開発者からなるチームでの典型的な承認ワークフローは次のようになります: 開発者がPRを作成し、レビュアーを指定し(通常はチームから1〜2名またはコード所有者)、CI/CDが自動チェックを実行します。すべての必須承認と緑色CIを受けた後、著者がマージを実行します。PR作成からマージまでの時間は、複雑さにより2時間から2日程度です。

GitHub Actionsは、承認後のマージを自動化することができます。ブランチルールが設定されていれば、すべての条件が満たされるまでGitHubが自動的にマージをブロックします。いくつかのチームはbors-ngMergifyを使用しています — これらのボットは、すべての承認を受け、CIがパスした後に自動的にPRをマージします。これによりプロセスが効率化され、マージにおける人的要因が除去されます。

現代的なアプローチはtrunk-based developmentで、短期のブランチを使用します。このワークフローでは、数時間以内に承認を得る必要があり、それ以外は任務が古くなり、mainとの再同期が必要となります。レビュー文化の高いチームは、承認までの時間を労働4時間以内にすることを目指しています。

承認のミスとその回避法

もっとも多いミスは、実際のコードチェックなしの形式的な承認です。PRが大きいか期限が迫っている場合、レビュアーは変更を調べずにApproveを押すことがあります。これにより、コードレビュープロセス全体が貧値化します。解決策: PRサイズの制限を設ける(400行以下)、およびコード解析ツール(SonarQube、CodeClimate)を使用して自動チェックを行う。

2つ目のミスは、過度に厳しい承認です。完璧なコードを期待すると開発がブロックされます。レビュアーが品質に影響しないスタイル上のコメントを修正するよう要求することがあります。解決策: 必須コメント(ブロッキング)とオプショナル提案(コメント)を明確に区別する。GitHubでは、コメントがブロッキングかどうかを明確に指定できます。

3つ目のミスは、CI/CDを確認せずに承認することです。コードが正しく見えても、コンパイルできなかったり、テストに失敗したりする可能性があります。設定されたBranch Protectionは赤色CIで自動的にマージをブロックしますが、いくつかのチームは速さを優先してこの保護を無効にしています。解決策: 承認前に常にCIステータスを確認し、赤色パイプラインのPRを承認しない。

  • 形式的な承認 — 実際のコードチェックの缺如。解決策: PRを400行に制限。
  • 過度の厳しさ — スタイル上のコメントによるブロック。解決策: blockingとoptionalに区分。
  • CIの無視 — 赤色パイプラインでの承認。解決策: 常にテストステータスを確認。
  • 著者の指定 — PR著者による承認。解決策: Branch Protectionを著者に対して設定。

よくある質問

PRを承認するとはどういう意味ですか?

承認するとは、GitHub/GitLabでコードレビュー後にApproveボタンを押してpull requestを承認することを意味します。これは、コードがレビューされ、基準を満たし、マージの準備ができていることを意味します。承認は、Branch Protectionルールが設定された保護ブランチへのマージのための必須条件です。

PRにはいくつの承認が必要ですか?

リポジトリのルールによります。最低準備は、著者以外のレビュアーからの1つの承認です。クリティカルなコンポーネント(支払いモジュール、セキュリティ)では2〜3つの承認が必要な場合があります。数はGitHubのBranch Protection RulesやGitLabのApproval Rulesで設定されます。

ApproveとRequest Changesの違いは何ですか?

Approve — コードはマージ準備完了、コメントはオプショナル。Request Changes — コードに必須修正事項があり、PRは再レビューまでブロックされます。Request Changesではマージは不可能、ApproveではCI/CDチェッククリア後にマージ可能です。

著者は自分のPRを承認できますか?

いいえ、著者は自分のPRを承認できません — これは独立したレビューの原則に反します。GitHubはインターフェースレベルでこれをブロックしています。リポジトリの設定が禁止していなくても、著者による承認は外部コードレビューが行われていないため無効とみなされます。

Dismiss stale reviewsとは何ですか?

Dismiss stale reviewはBranch Protectionのオプションで、PRに新しいコミットが追加されたときに自動的に承認を外します。これにより、レビュアーがコードの現在のバージョンを承認することが保証されます。このオプションがなければ、著者は承認後にコードを変更し、その変更が追加レビューなしに main に入ってしまう可能性があります。

まとめ

  • 承認 — レビュアーによるpull requestの承認、保護ブランチへのマージを許可。
  • GitHub/GitLabは3つのレビュータイプをサポート: Approve、Request Changes、Comment。それぞれ異なるブロック状態。
  • Branch Protection Rulesで最小承認数と新コミット時の自動外しを設定。
  • CODEOWNERSで責任範囲を分散: コード所有者の承認が当該ディレクトリで必須。
  • 承認前のコードレビューには論理、テスト、セキュリティを含める — スタイルだけではない。
  • 形式的な承認が主なミス。解決策: PRサイズを400行に制限。
  • 承認前にCI/CDパイプラインが緑であること、コードが正しく見えても。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください