SVN(Subversion)とは?初心者向けに特徴や使い方をわかりやすく解説

DevOps

SVN (Subversion) とは何か

皆さんはファイルのバージョン管理という言葉を聞いて、どんな印象を持つでしょうか。

プログラムのソースコードを扱うときは、過去の状態をさかのぼって確認できる仕組みがあると便利ですね。

SVN (Subversion) は、このバージョン管理を行うための集中型システムです。

開発の現場では、複数のメンバーが同じプロジェクトを並行して進めることがよくあるでしょう。

このとき、各メンバーの変更内容をひとつの場所で管理できるのがSVNの特徴です。

特に Apache Subversion 1.14系 など、更新が続けられているバージョンを使うことで、信頼性と互換性のある環境を保ちやすいです。

ただ、SVNはGitのような分散型のシステムとは異なり、サーバーにリポジトリを置いて一元管理を行います。

集中型と分散型の違い

集中型のSVNでは、すべてのデータがサーバーに保管されます。

そのため、メンバーはサーバー上のリポジトリを軸としてファイルを更新し、変更を反映するような流れが基本でしょう。

一方で、Gitなどの分散型システムの場合は、各メンバーの環境にリポジトリのコピーを置いて作業します。

SVNの場合は、ネットワークが常につながっていることが前提になりますが、中央のリポジトリに集約されているため、管理者がアクセス権限を細かく設定しやすいです。

また、リポジトリを一本化することで、運用ルールを一か所に集めやすいのもポイントです。

大きな企業やチームでは、まだSVNを利用しているケースも多く、Gitへ切り替えずに継続するプロジェクトもしばしば存在します。

このような背景から、SVNを理解しておくと、バージョン管理ツールの全体像をつかみやすいと言えるでしょう。

SVNの基本コマンドと操作手順

では、SVNの操作を簡単に体験してみましょう。

まず、SVNではリポジトリを作成し、そのリポジトリから作業コピーをチェックアウトして作業します。

以下の例では、ローカルでSVNリポジトリを作成する方法を紹介します。

# リポジトリを作成したいフォルダで実行
svnadmin create /path/to/svn-repo

# リポジトリをチェックアウト(URL部分はファイルパスやサーバーURL)
svn checkout file:///path/to/svn-repo /path/to/working-copy

# 作業コピーに移動してファイルを作り、SVNに追加
cd /path/to/working-copy
echo "Hello SVN" > hello.txt
svn add hello.txt

# コミットして変更をリポジトリへ反映
svn commit -m "Add hello.txt"

このように、集中型の手順としては リポジトリの作成 → チェックアウト → 作業ファイル追加 → コミット の順番が基本ですね。

コミットするたびに、サーバー側の履歴に更新が記録されます。

履歴を確認するときは svn log コマンドを使います。

svn log を実行すると、コミットのメッセージや日時、コミットした人の情報などが一覧で見られます。

コードを間違えてしまった場合も、このログから特定のリビジョンに戻したり、中身を確認したりできますね。

ブランチとマージの活用

SVNには、ブランチと呼ばれる並行開発の仕組みがあります。

大きな機能を開発したいときなどは、メインのコードから枝分かれして作業したほうが安全でしょう。

ブランチを切り替えるコマンドは特別ではなく、サーバー上に branches ディレクトリを用意し、そこへコピーして作業することがよくあります。

# メインブランチ(trunk)から新しいブランチを作成
svn copy file:///path/to/svn-repo/trunk file:///path/to/svn-repo/branches/new-feature -m "Create new branch"

コピーを作ったあとは、そのブランチをチェックアウトして作業するのが基本ですね。

開発が完了したら、変更内容をメイン側(trunk)にマージします。

# メインブランチを作業コピーにチェックアウトしてからマージ
svn checkout file:///path/to/svn-repo/trunk /path/to/trunk-working-copy
cd /path/to/trunk-working-copy

# ブランチの変更を取り込む
svn merge file:///path/to/svn-repo/branches/new-feature
svn commit -m "Merge changes from new-feature branch"

集中型でもブランチを管理できるのは大きなメリットです。

ただし、Gitのように各ユーザーが自由にブランチを作ってローカルでコミットするわけではないため、運用ルールをしっかり決めることが大切ですね。

チーム開発でSVNを利用するメリット

チーム内でファイルを共有するとき、SVNなら一元管理ができるのが魅力です。

リポジトリを中央に置くため、どのファイルが最新なのかがわかりやすいでしょう。

さらに、SVNではディレクトリ単位でアクセス権限を設定できます。

この機能を使うと、プロジェクトの一部のみを特定のメンバーに公開するといった柔軟な運用が可能です。

また、サーバーにしっかりバックアップを取っておけば、万が一ローカルでファイルを失ってしまったときも復旧がしやすいです。

こういった特性から、企業の開発現場ではSVNが今も重宝されているケースがあります。

Gitと比べるとブランチの操作がやや煩雑ですが、すでに整備されたSVNの仕組みを引き続き使いたいという現場もあるようですね。

具体的な実務シーンでの使い道

例えば、Web制作会社ではデザイナーとエンジニアが同じリポジトリで作業したい場面があります。

画像ファイルやHTML、CSSを一括して管理し、誰がいつどの変更を行ったかを追いやすくするのです。

また、業務アプリケーションの開発などで、大規模なソースコードと各種ドキュメントをまとめて保管するときにもSVNは向いています。

ドキュメントのバージョンを管理できるため、古い仕様書やマニュアルが混在するリスクを低減できるでしょう。

さらに、SVNはネットワークドライブのように扱う運用方法もよく見られます。

新しいファイルを追加するときも、コミット一回で全員が最新の状態を参照できるのが便利ですね。

このように、実務では開発体制や社内ルール次第でSVNが活用され続けています。

SVNを導入するまでの流れ

まずは、サーバー環境にSubversionをインストールします。

Linuxサーバーの場合は、パッケージマネージャーから subversion を導入する形が一般的です。

次に、リポジトリを作成する場所を決めましょう。

社内サーバーなどでフォルダを用意し、 svnadmin create コマンドを使ってリポジトリを作成します。

その後、Apache HTTP Serverと組み合わせて、HTTP経由でSVNリポジトリにアクセスできるようにする運用も多いですね。

ユーザー管理を行う場合は、Apacheの設定ファイルなどを使って、パスワード認証やアクセス制限を設定します。

こうして環境を整えたら、あとはメンバーがチェックアウト先のパスを案内してもらい、各自作業を始めるだけです。

SVN用のGUIクライアントもあり、コマンドラインが苦手な方でも操作しやすくなっています。

集中型特有の注意点

SVNはサーバーが停止してしまうと、基本的に新しいコミットができません。

Gitのような分散型なら、ローカルにコミットを蓄積しておけますが、SVNではその点に制約があると考えましょう。

そのため、サーバーのメンテナンスやネットワーク障害が発生しないように、IT部門がしっかりと環境を管理する必要があります。

また、大人数で並行してコミットやマージを行う場合は、どの順番で反映するかを調整することが大切ですね。

運用ルールをチームで共有しないと、競合が頻発して混乱のもとになりかねません。

SVNのブランチやマージ機能を正しく使い、必要に応じてコミュニケーションをとりながら進めるのが理想的でしょう。

SVNサーバーのバックアップは計画的に行うと安心ですね。

まとめ

SVN(Subversion)は、ファイルのバージョン履歴を集中管理できるシステムです。

Gitのような分散型と比べると、サーバーに依存する点や運用ルールのカスタマイズがしやすい点に特徴があります。

実際の現場では、同じプロジェクトに参加するメンバーが最新のファイルを常に把握したいときに便利ですね。

アクセス権限を細かく設定できるため、ドキュメントや画像データなどもまとめて管理しやすいでしょう。

ただ、サーバーへの依存度が高いため、障害対策やメンテナンス計画が不可欠です。

皆さんも、バージョン管理システムの選択肢としてSVNを理解しておくと、さまざまなプロジェクトに対応しやすくなるかもしれません。

SVNの基本を押さえておけば、いざというときに柔軟な対応ができるのではないでしょうか。

Gitをマスターしよう

この記事で学んだGitの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。