前回までの第4部では、ブランチ戦略、命名規約、コミットメッセージ、そしてプッシュ前チェックリストといった「現場の実践ルール」を徹底的に叩き込んできました。
そして本日のDay 21より、いよいよ本講座のクライマックスである【第5部: 開発フェーズ別・現場ケーススタディ】が開幕します!
記念すべきCase 1のテーマは、現場で最も日常的かつダイナミックな「新規開発フェーズ(複数人でのスプリント並行開発)」です!
「来週のリリースに向けて、3人のC#エンジニアが同時に認証機能・決済機能・管理画面を開発する」——そんなリアルな現場を舞台にシミュレーションを行います。
Subversion (SVN) や Visual SourceSafe (VSS) で開発してきたベテランの方なら、「複数人で同じプロジェクトを触ると、誰かがコミットした瞬間コンパイルエラーになり、一日中ビルド修復で終わってしまった…」というトラウマを一度は経験したことがあるはずです。
しかし、Gitを正しく使いこなせば、誰一人として他人の作業に邪魔されることなく、最高速度で並行開発を進めることができます。
本日は、トピックブランチによる完全隔離、C#マルチレイヤー構成での競合回避術、そしてプロが毎朝欠かさず行う「リベース習慣」とPR作成までの完全フローを完全解説します!
① 導入・本日の達成目標
アジャイルやスクラム開発における「スプリント(1〜2週間の開発サイクル)」では、チーム全員が複数の異なるタスクを並行して実装します。
このとき、バージョン管理システムが「中央集権の一本道」であるか、「分散型の自律ブランチ」であるかによって、開発効率とエンジニアの心理的安全性には天と地ほどの差が生まれます。
Gitのトピックブランチモデルを導入することで、開発者は「自分の城」の中で自由に試行錯誤し、完成した機能だけを厳格なレビューとCIテストを経て本流へ合流させることが可能になります。
- SVNの一本道コミット地獄とGitのトピックブランチ隔離の決定的な違いを理解する
- 3人のC#エンジニアが並行開発する現場シナリオ(認証・決済・管理画面)の全体像を把握する
- C#マルチレイヤー構成(API・Domain・UI)における競合を最小化するプロジェクト設計を身につける
- 毎朝のルーティン:
git fetchとgit rebase origin/developによる競合の超早期解消をマスターする - プッシュからPull Request(PR)起票、CI通過、レビュー、マージまでの黄金サイクルを実践できる
② 【図解】スプリント開発の安全性対比:SVN地獄 vs Gitの完全隔離
まずは、SVNのような集中型バージョン管理とGitにおける「複数人並行開発」の構造的な違いを図解で比較してみましょう。
一本道への直接コミット vs 自律的なトピックブランチ
- SVNの悲劇(一本道の中央共有): SVNではブランチの作成やマージが重厚で難しいため、開発者全員が同じ
trunk(または単一ブランチ)に対して直接コミットしがちでした。その結果、「Aさんが作りかけのクラスをコミットしたせいで、BさんのPCでコンパイルが通らなくなる」「誰かのバグのせいでチーム全体の作業が丸一日ストップする」という地獄が日常茶飯事でした。 - Gitの理想(トピックブランチによる完全隔離): Gitではブランチの作成・切り替えが一瞬です。開発者は必ずタスクごとの「トピックブランチ(例:
feature/auth-jwt)」を作成して作業します。自分のブランチの中でコードがどれほど未完成でも、テストが落ちていても、他のメンバーの開発環境には1ミリも影響を与えません。
③ 【現場シミュレーション】3人のC#エンジニアによるスプリント並行開発
それでは、具体的な現場シナリオを見ていきましょう。
ECサイトの新規機能追加スプリントにおいて、3人のC#エンジニア(Aさん、Bさん、Cさん)が同一のC#ソリューション(ECommerce.sln)に対して並行開発を行います。
チームメンバーのタスクとブランチ一覧
| 担当者 | 開発タスク | 作業ブランチ名 | 主な変更レイヤー |
|---|---|---|---|
| Aさん(リード) | JWTによるユーザー認証API実装 | feature/auth-jwt |
ECommerce.Api/ControllersECommerce.Infrastructure/Auth |
| Bさん(バックエンド) | Stripe決済連携とドメインロジック | feature/payment-stripe |
ECommerce.Domain/PaymentECommerce.Services/Payment |
| Cさん(フロントエンド) | 売上集計・ユーザー管理ダッシュボード | feature/admin-dashboard |
ECommerce.Web/ComponentsECommerce.Web/Pages |
C#で複数人が同じソリューションを開発する場合、「プロジェクト分割(マルチレイヤー構成)」と「インターフェースによる境界定義」を徹底することで、ファイルの物理的競合(コンフリクト)を劇的に減らすことができます。
例えば、Bさんが決済ロジックを作る際、Aさんの認証やCさんのUIが未完成でも、IPaymentService インターフェースさえ合意していれば、お互いのコードを1行も触ることなく完全に並行して単体テストまで書き上げることができるのです。
④ 【プロの朝習慣】毎朝のルーティン:最新developのリベース取り込み
「スプリント開発の最大の敵」は何でしょうか?
それは、「長期間放置されて親ブランチ(develop)から乖離しすぎた巨大なブランチ」です。
スプリントの1週間、自分のブランチに引きこもって他のメンバーの変更を一度も取り込まずにいると、最終日にいざマージしようとした瞬間、数十箇所の衝突が発生し「マージ地獄」に陥ります。
これを防ぐ唯一にして最強の習慣が、「毎朝のリベース(Daily Rebase)」です!
毎朝出社したら実行する「黄金の3ステップ」
自分の作業を開始する前に、ターミナルで以下のコマンドを実行します。
git fetch origin
# 2. 自分のブランチの分岐元を最新の origin/develop に付け替える
git rebase origin/develop
# 3. ビルドとテストが正常に通ることを即座に確認!
dotnet build
dotnet test
開発途中のブランチに対して git merge develop を繰り返すと、「Merge branch 'develop' into feature/xxx」という無意味な合流コミットが大量に発生し、コミット履歴がクモの巣のように汚れてしまいます。
git rebase origin/develop を使えば、「あたかも最新のdevelopから今さっきブランチを切って開発を始めたかのような、一直線で美しい履歴」を維持できます。
万が一コンフリクトが発生しても、昨日の1日分だけの小さな差分なので、数分で安全に解消できるのです。
⑤ 【品質担保】PR作成からCI自動テスト・レビュー・マージまでの完全フロー
機能の実装が完了したら、いよいよGitHub上で本流(develop)へ統合するための「プルリクエスト(Pull Request: PR)」を作成します。
プロの開発現場では、以下の4つのステップが厳格な品質ゲートとして機能しています。
プルリクエスト成功の4大ステップ
-
① プッシュ&PR起票:
Day 20で学んだ「5大セルフチェック」を済ませ、git push -u origin feature/auth-jwtでリモートへプッシュ。GitHubでPRを作成します。
PRの説明欄には「変更の目的」「実装概要」「確認手順」「関連チケット番号」を明記します。 -
② GitHub Actions(CI)による自動テスト:
PRが作成された瞬間、クラウド上のCIランナーが起動し、自動でdotnet buildとdotnet testを実行します。
1つでもテストが失敗するとマージボタンが赤くロックされ、壊れたコードが混入するのを機械的に遮断します。 -
③ チームメンバーによるピアレビュー:
他のメンバー(例: AさんのコードをBさんやテックリードがレビュー)が差分を確認し、設計の妥当性、可読性、エッジケースの考慮をチェックします。「LGTM (Looks Good To Me / 承認)」をもらうことで、チーム全員のコード品質が底上げされます。 -
④ developブランチへの統合(マージ完了):
承認とCI通過が揃ったら、GitHubの「Squash and merge」または「Rebase and merge」を実行してdevelopブランチへ統合!
不要になったトピックブランチは即座に削除し、ローカルも最新のdevelopへ同期して次のタスクへ進みます。
⑥ 現場の実践まとめ&次回予告
📌 本日の最重要ポイントまとめ
- トピックブランチで隔離せよ: SVNの一本道コミットとは決別し、タスクごとに独立したブランチで作業することでチームの足を引っ張らない。
- マルチレイヤーとインターフェース: C#ソリューションではプロジェクト分割とインターフェース設計により、並行開発時の物理競合を根本から排除する。
- 毎朝のリベース習慣:
git fetch originとgit rebase origin/developを毎朝実行し、差分を極小のうちに解消してマージ地獄を防ぐ。 - PR+CI自動化が品質の盾: プルリクエスト起票時にGitHub Actionsで
dotnet testを全件自動実行し、ALL GREENとピアレビューを経て安全にdevelopへ統合する。
次回は、第5部 ケーススタディの第2弾!
【Day 22: 【Case 2】運用保守・障害対応フェーズ(hotfix緊急パッチとCherry-pick)】をお届けします!
本番環境で緊急バグが発覚したとき、開発中の未完成コードを巻き込まずに本番ブランチ(main)だけに修正を当て、さらにそれをdevelopブランチにも安全に同期させるプロの「hotfix&チェリーピック運用術」を完全解説します。お楽しみに!
コメント
コメントを投稿