第2部:基礎知識 / 第4章:バージョン管理

SVNの基礎

Subversion(SVN)は、現在も多くの現場で使われているバージョン管理システムです。特に大企業やレガシーシステムの現場では、Gitではなく SVNを使っていることも珍しくありません。

📖 読了目安 約14分 対象:SVNを使う現場に配属される可能性がある方

なぜSVNを理解する必要があるか

SVNは現場を選ぶバージョン管理システム

「Gitが主流」と言われる時代でも、SVNはまだ多くの現場で使われています。

  • 大企業やSIer(システムインテグレーション企業)
  • レガシーシステムの保守現場
  • 金融機関や公共機関などの堅実性重視の現場

最初の配属先でSVNだった場合、「Gitと同じようにやればいい」では失敗します。SVNとGitは 設計思想が異なる ため、操作や考え方が大きく違います。

SVN特有のルールを知ることが生き残りの鍵

以下のようなSVN特有の問題を避けるためには、基本を理解する必要があります。

  • 「commitしたら即座に全員に公開される」という焦り
  • 「衝突が起きたら大変」というパニック
  • 「ブランチが重い操作」であることの戸惑い

GitとSVNの比較 も合わせて読むと、違いが明確になります。

SVNとは

特徴:集中型のバージョン管理システム

SVNは「集中型」のバージョン管理システムです。つまり、「中央に1つのリポジトリがあって、全員がそこにアクセス」する方式です。

flowchart TB
    subgraph サーバー
        R[(リポジトリ)]
    end
    A[開発者A] --> R
    B[開発者B] --> R
    C[開発者C] --> R
  • 中央に1つのリポジトリがあり、全員がそこにアクセス
  • 履歴は全てサーバー側に保存
  • オフラインでは履歴確認やコミットができない

Gitとの詳しい違いについては GitとSVNの比較 を参照してください。

最低限理解すべき概念

リポジトリ構成

SVNでは、以下の3つのディレクトリ構成が一般的です。

repository/
├── trunk/      ← メインの開発ライン(Gitのmainに相当)
├── branches/   ← ブランチ(機能開発用など)
└── tags/       ← リリース版のスナップショット

ポイント

  • trunk で通常の開発を行う
  • 大きな機能開発は branches で行う
  • リリース時に tags にコピーを作る

作業コピー(Working Copy)

サーバーからチェックアウトした、自分のPC上のファイルです。Gitのローカルリポジトリとは違い、履歴は含まれません

flowchart LR
    A[(リポジトリ)] -->|checkout| B[作業コピー]
    B -->|commit| A
    A -->|update| B
  • ローカルリポジトリとは異なり、履歴は含まれない
  • 編集して、サーバーにコミットする

リビジョン(Revision)

コミットごとに付与される連番の番号です。

r1 → r2 → r3 → r4 → r5 → ...
  • シンプルな連番で管理される
  • 「r100に戻して」のように番号で指定できる
  • リポジトリ全体で共有される(ファイル単位ではない)

基本操作

よく使うコマンド

コマンド説明
svn checkoutリポジトリから作業コピーを取得
svn update最新の変更を取得
svn add新しいファイルをバージョン管理に追加
svn commit変更をサーバーに送信
svn status変更状態を確認
svn diff差分を確認
svn log履歴を確認
svn revert変更を取り消す

基本的な作業フロー

# 1. 最新を取得
svn update

# 2. ファイルを編集
# (エディタで編集)

# 3. 状態を確認
svn status

# 4. 差分を確認
svn diff

# 5. コミット
svn commit -m "機能Aを追加"

新しいファイルを追加する

# 1. ファイルを作成
# (エディタで作成)

# 2. バージョン管理に追加
svn add newfile.txt

# 3. コミット
svn commit -m "新しいファイルを追加"

ファイルを削除する

# 1. バージョン管理から削除
svn delete oldfile.txt

# 2. コミット
svn commit -m "不要なファイルを削除"

ブランチ操作

SVNのブランチ

SVNではブランチは「ディレクトリのコピー」として実現されます。

# ブランチを作成
svn copy http://svn.example.com/repo/trunk \
         http://svn.example.com/repo/branches/feature-a \
         -m "feature-aブランチを作成"

# ブランチに切り替え
svn switch http://svn.example.com/repo/branches/feature-a

注意

  • ブランチ作成は比較的重い操作
  • 頻繁にブランチを切る文化は少ない
  • 現場によってはtrunk直接作業も多い

1年目でよくある失敗

失敗1:updateせずにcommit

他の人の変更と衝突(conflict)が起きます。

# 必ずupdateしてからcommit
svn update
# 衝突がないことを確認
svn commit -m "変更内容"

失敗2:衝突(Conflict)でパニック

同じファイルを複数人が編集すると衝突が起きます。

<<<<<<< .mine
自分の変更
=======
他の人の変更
>>>>>>> .r123

対処法

  1. 両方の変更を確認
  2. 正しい内容に編集
  3. svn resolved ファイル名 で解決を宣言
  4. コミット

分からなければ先輩に相談してください。

失敗3:コミットメッセージが雑

分かりやすいメッセージを書くことが重要です。

# 良い例
svn commit -m "[add] ログイン機能を追加"

# 避けたい例
svn commit -m "修正"

失敗4:間違えてcommitしてしまった

SVNでは、一度commitすると取り消しが難しいです。

  • 過去のリビジョンに戻すには svn merge を使う
  • 間違えたら、すぐに先輩に相談

GUIツールを活用しよう

実際の現場では、コマンドラインよりGUIツールを使うことが多いです。SVNの現場ではTortoiseSVNが圧倒的に主流です。

TortoiseSVN(Windows定番)

Windowsのエクスプローラーに統合されるツールで、SVNの現場ではほぼ必須といえます。

  • 右クリックメニューで全ての操作ができる
  • ファイルの状態がアイコンで表示される(緑=変更なし、赤=変更あり)
  • 差分表示、履歴確認も視覚的に分かりやすい
  • 無料で利用可能

詳しい使い方は「TortoiseSVN 使い方」で検索すると解説サイトが多数あります。

その他のツール

ツール特徴
CornerstoneMac向け、有料だが使いやすい
IDE内蔵Eclipse、IntelliJなどに統合されている

コマンドラインは覚えなくていい?

TortoiseSVNがあれば、コマンドラインを覚える必要はほぼありません。ただし、何が起きているかを理解することは重要です。上記のコマンド説明は「TortoiseSVNで何をしているか」を理解するための参考にしてください。

SVNの現場で気をつけること

trunkへの直接コミットが多い

ブランチを切らずにtrunkで作業することが多いです。

  • こまめにupdateする習慣が重要
  • 大きな変更は事前に相談
  • 複数人で同じファイルを触る場合は声をかけ合う

ロック機能

バイナリファイル(Excel、画像など)は、同時編集を防ぐため「ロック」を使うことがあります。

# ロックを取得
svn lock file.xlsx

# 編集後、コミット(ロックは自動解除)
svn commit -m "Excel更新"

# または明示的にロック解除
svn unlock file.xlsx

サーバーへの依存

オフラインでは履歴確認やコミットができません。

  • ネットワーク環境を確認
  • VPN接続が必要な場合も

まとめ

SVNで理解しておくべきポイント:

  1. 集中型:リポジトリは中央に1つ
  2. updateを忘れずに:コミット前に必ず最新を取得
  3. リビジョン番号で履歴を管理
  4. 衝突は落ち着いて対処(分からなければ相談)
  5. commitは慎重に(取り消しが難しい)

GitとSVNの違いについては GitとSVNの比較 も参照してください。