第1回ではGitとGitHubの役割分担を学びました。本日は第2回として、VSS/SVN経験者が最もカルチャーショックを受ける「排他ロックの撤廃(楽観的並行制御)」と「オフラインコミットの圧倒的自由度」をC#現場の視点で徹底解説します!
① 導入・本日の達成目標
Visual SourceSafe (VSS) や Subversion (SVN) の時代、チーム開発の鉄則は「編集前にファイルをチェックアウトしてロックする」「他の人が編集中のファイルは触らない」でした。
しかし、Gitには**ファイルロック機能が基本的に存在しません**。全員が同じファイルを同時に編集します。
「それって事故が起きないの?」「どうやって整合性を保つの?」という疑問を、本講義で完全に解消します!
- 「悲観的ロック」から「楽観的並行制御」へのメンタルモデル転換。
- なぜ複数人で同じC#コード(.cs)を編集しても安全にマージできるのかを理解する。
- ネットワーク不要で何十回も手元で試行錯誤できる「オフラインコミット」の快適さを体験する。
② 排他ロック vs 楽観的並行制御
VSSの設計思想は「悲観的ロック(Pessimistic Locking)」でした。「衝突が起きると困るから、最初から1人しか触らせない」というアプローチです。
これに対し、Gitは「楽観的並行制御(Optimistic Concurrency)」を採用しています。
「人間が同時にコードを書いても、行単位で賢く合体(マージ)すればほとんど衝突しない」という思想です。
③ C#開発現場での具体例(.csファイルの自動マージ)
例えば、Visual Studioでひとつの UserService.cs というクラスファイルがあるとします。
Aさんがファイルの先頭に「ログイン機能」を追加し、Bさんがファイルの末尾に「パスワード変更機能」を追加した場合:
- VSSの場合: Aさんが編集し終わるまで、Bさんは作業を開始できません。
- Gitの場合: 2人が同時に作業を終えてコミットしても、Gitが「変更された行が離れている」ことを自動判定し、1秒で綺麗にマージします。
④ オフラインコミットの快適さ
SVNのコミットは「サーバーへの即時反映」だったため、中途半端な動かないコードをコミットすることはタブーでした。
しかしGitなら、手元のPC(ローカルリポジトリ)に保存するだけなので、どれだけ細かくコミットしても誰にも迷惑をかけません。
「新幹線の中でネットが繋がらなくても、10行書くごとにコミットして安心を得る」という開発スタイルが可能です。
⑤ 実践! 3大アプローチでの操作
[A] CLI / PowerShell
# 1. 現在の変更状況を確認 git status # 2. 手元で細かいスナップショットを記録(オフラインOK) git add Services/UserService.cs git commit -m "feat: ログイン処理のバリデーション追加" # 3. 過去の履歴を一覧表示(手元に全履歴があるため一瞬で表示) git log --oneline -n 5
[B] TortoiseGit(Windows エクスプローラー右クリック)
TortoiseSVNユーザーならおなじみの右クリックメニューから 「Git コミット(C)...」 を選択します。
SVNと違い、ダイアログ下部に「コミット&プッシュ」ボタンが用意されており、「手元に保存するだけ(コミット)」か「サーバーへも送る(コミット&プッシュ)」かを直感的に選べます。
[C] 4大AIエージェントへの指示プロンプト
AIエージェント(Antigravity / Claude Code / ChatGPT / Copilot)にオフライン作業やコミットを依頼する際の黄金プロンプトです:
「UserService.cs にパスワードハッシュ化処理を追加してください。完了後、Conventional Commits規約に従ってローカルコミットを作成してください(プッシュはまだ行わないでください)。」
「同じファイルを触るから、声をかけ合って順番に編集しよう」と手動ロック運用をしてしまうチームがあります。
Gitの真価は「同時に書いて、Gitにマージさせる」ことにあります。衝突を過度に恐れず、安心して同時編集を試してみましょう!
第2回の講義、お疲れ様でした!
「ロックは不要、Gitがマージしてくれる」「コミットは手元保存だから何回やっても安全」という感覚が掴めれば、Gitの楽しさが一気に加速します!
コメント
コメントを投稿