いよいよ本日より「第3部:ブランチ・マージ・リベースの基礎」へと突入します!
Subversion (SVN) や Visual SourceSafe (VSS) を長年使ってきたエンジニアにとって、「ブランチを切る」という行為は一大プロジェクトでした。「サーバー上で
/branches 配下にギガバイト級のディレクトリを丸ごと物理コピーし、時間がかかり、サーバー容量を圧迫し、あとでマージするときにリビジョン範囲指定で頭を抱える……」そんな苦い思い出がある方も多いはずです。そのため、「ブランチはリリース直前など、よほどの理由がない限り切ってはいけない禁断の技」と思い込んでいませんか?
しかしGitの世界では、その常識が180度覆ります。Gitのブランチは、作成するのに0.01秒しかかかりません! ディスク容量もほぼゼロです!
本日は第11回として、なぜGitのブランチはこれほど超軽量なのかという内部構造(40バイトのポインタ)の秘密を解き明かし、Git 2.23以降の新標準コマンド
git switch による安全な切り替え、TortoiseGitでのGUI操作、そして現代のAIエージェントを活用した並行開発作法まで、徹底的にわかりやすく解説します!
① 導入・本日の達成目標
GitをGitたらしめている最大の強み、それこそが「超軽量でコストゼロのブランチ(Branch)」です。
日常のあらゆる小さな修正、新機能の実験、バグ調査のたびに気軽にブランチを作り、用が済んだら統合してサッと捨てる。この軽快なブランチ運用を身につけることが、現代のソフトウェア開発スピードを手に入れる第一歩となります。
本日の講義でマスターするゴールは以下の3点です!
- なぜGitのブランチは一瞬で作れるのか? SVNの物理ディレクトリコピーとの決定的な違いと内部構造(コミットを指すポインタ)を理解する。
- Git 2.23+ 新標準コマンド
git switchとgit branchの実践操作をマスターし、旧来のgit checkoutから卒業する。 - TortoiseGitでの直感操作と、AIエージェント(Antigravity / Claude Code等)に安全に機能実装させるためのブランチ指示作法を習得する。
② 【徹底比較】SVNの物理コピー vs Gitの40バイトポインタ
SVN出身のエンジニアが最初に最も驚くのが、「ブランチ作成のコスト」の違いです。
両者のアーキテクチャの違いを比較表で確認してみましょう:
③ 【内部構造】ブランチの正体と「HEAD」の役割
「40バイトのポインタに過ぎない」とはどういうことでしょうか? Gitリポジトリの内部(.git フォルダの中)を覗いてみると、そのカラクリが一発で分かります。
リポジトリの .git/refs/heads/main というファイルを開いてみると、そこには以下のような40文字のコミットハッシュが1行書かれているだけです:
3a8f1b29d45e7890123456789abcdef012345678
つまり、ブランチとは「特定のコミットを指し示す付箋(名札・ポインタ)」に過ぎません! 新しいブランチを作成するとは、単にこの40文字のテキストファイルを1個作るだけの操作なのです。だからこそ、ファイルが何万件あろうと一瞬で作成できます。
Gitにはもう一つ、超重要なポインタがあります。それが HEAD(ヘッド) です。
HEADは「今自分がどのブランチで作業しているか(現在地)」を指し示す看板です。
.git/HEAD を開くと、通常は ref: refs/heads/main のように、「mainブランチを見ているよ」という参照先が書かれています。ブランチを切り替える(switchする)と、HEADの看板が別のブランチ名へと掛け替えられ、作業ツリーのファイルがそのブランチの最新コミット状態へと自動で展開されます。
④ 【コマンド実践】Git 2.23+ 新標準 git switch をマスターする
古いGitの入門書では、ブランチの切り替えに git checkout が使われていました。
しかしDay 10でも触れたとおり、旧来の git checkout は「ブランチの切り替え」と「作業ファイルの破棄」という全く異なる危険な操作を同一のコマンドで兼ねており、初心者の誤爆事故が絶えませんでした。
そこで Git 2.23(2019年)以降、機能が明確に2つに分離されました:
git restore: 作業ファイルの変更を取り消す(復元する)git switch: ブランチを切り替える
現在では、ブランチ操作には git switch を使うのが絶対の新標準です!
実務で毎日使うブランチ操作コマンド 5選
$ git branch
* main
# 2. 新しいブランチを作成する(まだ移動はしません)
$ git branch feature/order-api
# 3. 指定したブランチに切り替える(HEADが移動)
$ git switch feature/order-api
Switched to branch 'feature/order-api'
# 4. 【超頻出!】ブランチ作成と切り替えを1撃で同時に行う(-c = create)
$ git switch -c feature/order-api
Switched to a new branch 'feature/order-api'
# 5. 直前にいたブランチに一瞬で戻る(ショートハンド)
$ git switch -
⑤ 【C#現場のリアル】新機能開発用ブランチでのC#コントローラー追加
ASP.NET Core Web API プロジェクトで「注文管理機能(OrderController)」を新設する現場シナリオを考えてみましょう。
もし main ブランチで直接コーディングを始めてしまうと、途中で「本番環境で緊急バグが見つかったから大至急直してリリースして!」と頼まれたとき、作りかけの未完成コードが邪魔をして身動きが取れなくなってしまいます。
🚀 実務ワークフロー:機能ブランチ(Feature Branch)を切る
- 最新の
mainからgit switch -c feature/order-controllerで新機能ブランチを分岐。 - Visual Studio で
Controllers/OrderController.csを新規作成し、注文作成エンドポイントを実装。 - 動作確認を行い、
git add&git commit -m "feat: 注文コントローラーを追加"でコミット。 - もし緊急修正が入ったら、一旦コミットした上で
git switch mainで本番環境の安全な状態に瞬時に復帰可能!
ブランチを git switch main と git switch feature/order-controller で往復すると、Visual Studioのソリューションエクスプローラー上で OrderController.cs が自動的に現れたり消えたりするのが確認できます。これがGitの作業ツリー同期の威力です!
⑥ 【GUI編】TortoiseGitでのブランチ作成と切り替え
Windowsエクスプローラー上でマウス操作で開発を進めるエンジニアのために、TortoiseGitでの操作手順も確認しておきましょう。
- プロジェクトフォルダの何もない場所で右クリック →「TortoiseGit」→「ブランチの作成(B)...」を選択。
- ダイアログが表示されたら、「ブランチ」欄に作成したい名前(例:
feature/order-api)を入力。 - 一番下にある「✔ 新規ブランチに切り替える(Switch to new branch)」にチェックを入れて[OK]をクリック!
- 既存の別ブランチに移動したいときは、右クリック →「TortoiseGit」→「切り替え/チェックアウト(S)...」を選び、移動先ブランチを指定するだけです。
⑦ 【AI時代の新常識】AIエージェントへのブランチ指示と安全な並行開発
現代のソフトウェア開発現場では、Antigravity や Claude Code、Cursor、GitHub Copilot Workspace といった「自律型AIエージェント」に大規模なコード改修を依頼することが日常化しています。
AIエージェントにコードを書かせるときに、絶対にやってはいけない禁忌があります。
それは、「安定版の main ブランチでいきなり直接作業させること」です!
AIにタスクを振る際は、必ず「専用ブランチを切ってから作業する」指示を組み込みましょう:
ただし、事前に feature/ai-order-controller ブランチを新規作成して切り替えた上で作業を行い、完成後にコミットしてください。」
専用ブランチで作業させれば、もしAIの生成結果が気に入らなかったりビルドエラーが頻発した場合でも、そのブランチごと丸ごと削除してしまえばメインコードには1ミリも影響が出ません!
「ブランチは安価な実験場である」というGitの思想こそが、AI共生時代の最大の防波堤なのです。
⑧ 📌 本日のまとめ・理解したい最重要ポイント
第11回の講義、お疲れ様でした! 本日の最重要ポイントを振り返りましょう。
- Gitのブランチは40バイトのポインタ: SVNのようなディレクトリ物理コピーとは異なり、作成速度は0.01秒、ディスク消費はほぼゼロ。
- HEADは現在地マーカー: いま自分がどのブランチを見ているかを追跡する特別な参照ポインタ。
- 切り替えの新標準は
git switch: 旧来の多機能すぎたcheckoutから安全に役割分離。同時作成・移動はgit switch -c <branch>。 - AI時代のセーフティネット: AIへの改修依頼や実験的コーディングは必ず機能ブランチを切り、mainブランチの清浄性を守る!
コメント
コメントを投稿