SVN(Subversion)のリポジトリを見ると、必ずと言っていいほど trunk・branches・tags という3つのフォルダがあります。「なんとなくこの形にしている」という現場も少なくありません。
結論から言えば、この3つはチームでソースを安全に育てるための「フォルダの使い分けの約束事」です。trunkで本流を進め、branchesで枝分かれして作業し、tagsでリリースの瞬間を記録に残す。役割を理解すれば、運用ルールはぐっとシンプルになります。
この記事では、SVNを10年以上ホスティングサービスとして提供してきた私たちが、trunk/branches/tagsの考え方から、ブランチの作成・作業・マージ・タグ付けまでを順番に解説します。
SVNの基本操作(checkout・commit・update)がまだの方は、先に「SVNの基本コマンドと使い方|checkout・commit・updateを実例で覚える」をどうぞ。
trunk・branches・tagsとは|3つのフォルダの役割
SVNでは、リポジトリの直下を次の3つのフォルダに分けるのが、標準的な構成です。
- trunk(トランク):開発の主軸(本流)。常に動く、最新の正となるコードを置きます
- branches(ブランチ):trunkから枝分かれした作業場所。新機能の開発や、リリース版の保守など、本流を止めずに並行作業するために使います
- tags(タグ):ある時点のスナップショット。「v1.0リリース時点」のように、後から変更しない記録として残します
重要なのは、この3つはSVNの特別な機能ではなく、ただのフォルダだということです。SVNが「この名前にしなさい」と強制しているわけではありません。それでも世界中の現場がこの慣習に従っているのは、役割を分けておくと運用が破綻しにくいからです。新しく参加した人も、フォルダ名を見ただけで構造を理解できます。
SVNのブランチの考え方|「コピー」で枝を作る
Gitに慣れた方は、ブランチと聞くと特別な仕組みを想像するかもしれません。SVNのブランチはもっと素朴で、「trunkを branches の下にまるごとコピーする」だけです。
ただし、この複製は安価コピー(cheap copy)と呼ばれ、実際にファイルを丸ごと二重に持つわけではありません。SVNは「trunkのこのリビジョンから枝分かれした」という履歴だけを記録します。だから、巨大なリポジトリでもブランチ作成は一瞬で終わり、容量もほとんど増えません。
つまりSVNのブランチは、「いつ・どこから分かれたか」を履歴に刻んだフォルダのコピーだと理解すれば十分です。
ひとつ公平に補足すると、機能ごとに細かく枝分かれと統合を高速に繰り返す現代的な開発スタイルでは、ブランチ・マージを日常前提に設計されたGitに分があります。SVNのブランチは、「本流を止めずに並行作業する」というシンプルな用途で力を発揮します。
ブランチを作る|copyで枝分かれする
ブランチの作成は、TortoiseSVNなら右クリックの「ブランチ/タグ(Branch/tag)」、コマンドなら svn copy です。
svn copy https://svn.example.com/repos/project1/trunk \
https://svn.example.com/repos/project1/branches/feature-login \
-m "ログイン機能開発用のブランチを作成"
- コピー元は trunk、コピー先は branches の下に作る作業用フォルダです
- ブランチ名は目的がわかる名前にします(
feature-login、release-1.2など) - リポジトリ上で直接コピーするため、手元の作業コピーは関係しません
作ったブランチで作業するには、作業コピーをそのブランチに切り替えます。TortoiseSVNなら「切り替え(Switch)」、コマンドなら svn switch です。この「切り替え」は、手元のフォルダの向き先をtrunkからブランチへ変える操作なので、新しくチェックアウトし直す必要はありません。
ブランチで作業してマージする|本流に取り込む
ブランチでの作業は、trunkと同じです。普段どおり編集して update/commit を繰り返します。本流(trunk)を止めずに、安心して試行錯誤できるのがブランチの価値です。
作業が完成したら、その成果を trunk に取り込みます。これがマージ(merge)です。
- 作業コピーを trunk に切り替える(Switch)
- ブランチの変更を trunk にマージする(TortoiseSVNの「マージ」/
svn merge) - 内容を確認して
commitする
※SVN 1.8以降は、ブランチを取り込む際に --reintegrate のような特別なオプションは不要になりました。SVN側が「これは枝の取り込みだ」と自動で判断するため、通常のマージで完了します(古い1.5〜1.7のクライアントでは --reintegrate が必要でした)。
マージで最も多いつまずきが、競合(コンフリクト)です。同じ箇所をtrunk側でも変更していると発生します。慌てず、どちらの変更を採用するかを決めて解決します。手順は基本コマンドの記事の「競合を解決する」で解説しています。
コツ:ブランチを長く放置するほど、trunkとの差が開いてマージが難しくなります。ブランチは短命に保ち、こまめにtrunkの変更を取り込むのが、マージを楽にする最大のポイントです。
タグの使い方|リリースの瞬間を記録する
tags は、ある時点のスナップショットを残すために使います。作り方はブランチと同じ svn copy で、コピー先を tags にするだけです。
svn copy https://svn.example.com/repos/project1/trunk \
https://svn.example.com/repos/project1/tags/release-1.0 \
-m "バージョン1.0リリース時点のタグ"
ブランチとの違いは、運用上の約束にあります。タグは作ったら変更しない——これがチームの合意事項です。「v1.0として世に出したのは、まさにこの状態だ」と後から確実に取り出せることに、価値があります。
製造業の現場では、このタグがベースライン管理そのものになります。「この成果物のこの版で、どの設計・どの試験に対応したか」を確定させ、後の監査や変更管理で証跡として提示できる。ISO 26262などの規格対応でSVNの履歴とタグが重宝されるのは、この一貫性のためです。
運用のコツとよくある失敗
最後に、ブランチ運用を破綻させないためのポイントをまとめます。
- ブランチを作りすぎない:目的のはっきりしたものだけに絞ります。放置された古いブランチが増えると、どれが生きているのか誰もわからなくなります
- 命名ルールを決める:
feature-◯◯/release-◯.◯/bugfix-◯◯のように接頭辞をそろえると、一覧で役割が判別できます - マージは小さく頻繁に:大きな塊を一度にマージするほど、競合は深刻になります
- 属人化させない:「ブランチ運用はあの人しかわからない」という状態は、その人の不在でプロジェクトが止まります。構成のルールを文書化し、誰でも同じ手順を踏めるようにしておきます
まとめ
| 役割 | フォルダ | 使い方 |
|---|---|---|
| 本流 | trunk | 常に動く最新の正 |
| 枝分かれ作業 | branches | 本流を止めず並行作業 → 完成したらtrunkへマージ |
| リリース記録 | tags | 作ったら変更しない。ベースライン・監査証跡 |
- trunk/branches/tagsはSVNの機能ではなくフォルダの約束事。役割を分けるほど運用は安定します
- SVNのブランチは安価コピー。巨大リポジトリでも一瞬で作れます
- マージを楽にするコツは短命なブランチとこまめな取り込み
- タグは変更しない約束で、製造業ではベースライン管理・監査証跡として効きます
SVNを試せる環境がすぐ欲しい方へ
tracpathのフリープランなら、サーバー構築不要で今日からSVNリポジトリを使えます。ブランチ運用の練習環境にもどうぞ。国内サーバー・ISMS認証・ディレクトリ単位の権限管理。
→ 無料でSVNリポジトリを作る / → 導入のご相談はこちら
関連記事
この記事の著者
株式会社オープングルーヴ / tracpath編集部
2004年よりソフトウェア開発の現場を支援。SVN・Gitのクラウドホスティングサービス「tracpath」を提供し、製造業・業務システム開発企業のバージョン管理・移行を多数支援。ISMS(ISO 27001/27017)認証取得。






No Comments