Subversion が気になる あ・な・た に贈る Team Foundation Server の紹介♪

ごくたまにですが、聞かれますので、ちょっとだけ書いていきたいと思います。

Subversion (以下、SVN) は、オープンソースのソースコード管理ツール(VCS: Version Control System)です。Team Foundation Server (以下、TFS) はソースコード管理を含む、開発プラットフォームです。したがって、同じカテゴリのツールとは、私はまったく思っていないのですが、以下の観点で見ていきたいと思います。

※詳細に言及したり、比較する気はありません。気になるならば、ご自身でお調べくださいw

SVN と TFS は同じか?

  • SVN も TFS もソースコードのバージョン管理ができます。
  • SVN も TFS も変更セット(※開発のトランザクションの単位でのバージョン管理)が行えます。
  • SVN も TFS も Web セントリックなアーキテクチャです。
  • SVN も TFS も比較やマージのツールを選択できます。

SVN と TFS は違う?

  • SVN には、Windows エクスプローラーから利用できる TortoiseSVN がある!
    • TFS だと、TFS Power Tools にて、同様の機能を提供しています。
      image
      (TFS Power Tools の Windows エクスプローラー拡張機能 - その1 [クリックで拡大表示])
      image
      (TFS Power Tools の Windows エクスプローラー拡張機能 - その2 [クリックで拡大表示])
    • また、オープンソースの SVNBridge というのがあり、そのものズバリ!TortoiseSVN などの SVN クライアントが使えてしまいます
      • SVNBridge: https://svnbridge.codeplex.com/
        こちらは、サーバーサイドと、クライアントサイドのツールが備わっています。したがって、チーム全体で SVN クライアントから TFS に接続したいならば、サーバーサイドのツールをセットアップすればよく、一人ないし、数名の開発者だけが、SVN クライアントから使いたいという場合は、クライアントサイドのツールを各開発端末にセットアップすればいいです。
        このサーバーサイドの仕組みは、このツールをホストされている CodePlex でも利用されています。CodePlex は TFS がベースですが、SVN の各クライアントからも接続ができるようになっています。
  • SVN と Trac や Redmine のように、ソースコード管理とバグ トラッキング(BTS/ITS)を連携することもできる!
    • TFS は、Trac や Redmine と連携する仕組みは、提供していません。なぜならば、BTS/ITS の仕組みも包含しているからです。作業項目と呼んでいる追跡・管理機能で、要求(ユーザーストーリー)からタスク、バグ、テスト ケース(テストスイート、テスト ステップ、テスト構成、テスト環境、テスト結果なども)、バグ、チームの懸案事項などを追跡・管理できます。
    • 同じ TFS 内で実現しているので、各ツールごとにリポジトリが異なるとか、使い勝手が異なるとか、連携を開発者が過度に意識しなければいけない、といったことはありません。
    • Visual Studio の中で開発時に必要な情報はすべて手に入ります(Webブラウザ開くとか、Excel 開くとか不要です)。
      image
      (Visual Studio 2010 の中で、タスクとソース管理を見ているところ [クリックで拡大表示])
    • 変更セット単位でのバージョン管理はもちろんのこと、タスクやバグとの関連付けも、ごく自然です。
      imageimage
      タスクやバグと関連付けをしていないとチェックイン(コミット)することができないようにすることも設定一発で行えます。
      image
    • ソースコードのバージョン管理は、本来すごく難しいものです。開発プロセスとも密接に関係し、ソフトウェアの構成を決定したり、ソフトウェア構成を再現したり、把握したりするのに役立つからです。単にファイルを版管理するだけ、共有するだけに使うならば簡単ですが、それは本来の目的ではないことが多いでしょう。そんなときは、バグやタスクと関連付けることをしっかりと考えましょう。タスクやバグは、開発プロセスのワークフローを形成します。また、ソースコードという細かい粒度の把握、追跡、管理から、利害関係者が理解できるタスクやバグに、粒度を挙げてくれる働きがあります。
  • Hudson, Jenkins CI を使いたいから SVN!
    • SVN と連携をさせて、自動ビルドや継続的インテグレーション(CI)を行いたいというニーズも増えてきました。Hudson や Jenkins CI の記事でも SVN との連携が取り上げられることが多いですね。では、TFS はどうか?というと:
    • TFS は自動ビルドの仕組みも包含しています。継続的インテグレーションも設定一発です。継続的インテグレーションの進化系であるゲート チェックインもあります。
  • TFS は、Windows サーバーがいるでしょう?
    • ここまで紹介した機能であれば、Windows クライアント(Vista/7)にサーバー環境を構築することもできます。「基本構成」と呼ばれるセットで、ソースコードのバージョン管理、バグやタスクの追跡・管理、自動ビルドが行えます。これらは、単一のリポジトリで管理され、リポジトリも SQL Server Standard を使うことができます。軽量化をしたいならば、SQL Server Express も選択できます。
  • SVN は Windows だけでなく、Mac OS、 Linux、UNIX などの開発環境でも使えるから便利
    • TFS には、Team Explorer Everywhere (以下、TEE) というクロスプラットフォーム環境から TFS に接続できるツールがあります。
    • TEE により、以下が行えます:
      • Eclipse から TFS で管理するリソースに Visual Studio と同等に利用できる
      • コマンドライン インターフェイスで、TFS で管理するリソースにアクセスできる
    • TFS は Web のインターフェイスもあるので、ソースコードの状況を把握したり、バグやタスクの情報を閲覧、更新したりすることもできます。
  • TFS は VSS でしょ?
    • TFS と VSS は全く異なるツールです。TFS に VSS の機能が包含されているわけではありません。でも似ているところだってあります。
      • VSS と親和性の高い Look & Feel (見た目が似ているだけで中の仕組みは全く異なります)
      • ロックも行える(ロックを行わない運用ももちろんできます)

まとめ

まとめでもありませんが、TFS は、開発リソースを包括的に追跡・管理することができるシステムです。「開発者が本来の能力を発揮し、よりクリエイティブな活動に注力するための環境づくり」それが TFS の役目です。

手段ではなく、目的に対して SVN も TFS もどう貢献できるか・・・といった視点で見てみてはいかがでしょうか。

何かのお役にたてれば幸いです。

何か、お手伝いが必要でしたら、ご連絡ください。

@tomohn