【Visual Studio Online】TFS APIを利用してVisual Studio Onlineからソースを取得する。
- 2014.05.08 Thursday
- 08:14
最近のソース管理のはやりはGitHubっていうらしいですね。うん。よくわからん。Visual Studio 2013 にはデフォルトでローカルGitなるものが付属していて、私もちょちょちょ程度に触ってみてちょっちょっちょ〜〜って感動したんですが、今回はTFSのお話。数か月前からVisual Studio Onlineを利用させてもらっているのですが、これが実に便利でして、自分が書いたサンプルコードをクラウド上にあるTFSにソース管理させてもらっている次第です。いっぱいPCを持ってると、ソースがあっちゃこっちゃいってしまって困ってたんですが、Visual Studio Onlineというサービスを利用することで、大分、ストレスが軽減されました。
それで、ふと思ったんですが、Visual Studio OnlineってAzure上に設置されているTFSだと聞いたことがあるんです。つまり、TFS APIって利用できるなじゃない??って思い立ちまして、試してみたのですが、見事にTFS APIでVisual Studio Onlineにアクセスすることができました。おー便利かもー。という事で今回は、アクセス方法と簡単なソースの取得方法をご紹介します。前置き長くてごめんなさい。
■参照を追加する。
・Microsoft.TeamFoundation.Client.dll
・Microsoft.TeamFoundation.VersionControl.Client.dll
を参照に追加します。場合によってはほかのも追加する必要がありますが、今回のコードではこれだけで十分です。
■コードを書く。
using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace Art55.TfsApi20140508_001
{
class Program
{
static void Main(string[] args)
{
var teamCollectionUri = new Uri(@"https://XXXXXXXX.visualstudio.com/DefaultCollection");
var teamCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(teamCollectionUri);
// 前に認証されていない場合は Team Foundation Server につながりを認証します。
teamCollection.EnsureAuthenticated();
var versionControlService = teamCollection.GetService<VersionControlServer>();
const string localProjectPath = @"c:/source/test";
Workspace localWorkspace = versionControlService.TryGetWorkspace(localProjectPath);
if (localWorkspace != null)
{
// すでに存在する場合は、削除する。
localWorkspace.Delete();
}
string workspaceName = string.Format("{0}_{1}", Environment.MachineName, DateTime.Now.ToString("yyyyMMddHHmmssms"));
const string serverProjectPath = @"$/hoge/";
localWorkspace = versionControlService
.CreateWorkspace(
workspaceName,
versionControlService.AuthorizedUser,
string.Empty,
new[] { new WorkingFolder(serverProjectPath, localProjectPath) });
localWorkspace.Get();
localWorkspace.Delete();
}
}
}
ちょっとだけ説明。
var teamCollectionUri = new Uri(@"https://XXXXXXXX.visualstudio.com/DefaultCollection");
var teamCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(teamCollectionUri);
自分のvisual Stuido OnlineのURI(つまりURLです。)とチームコレクションを指定します。URIだけ指定して、後かチームコレクションにアクセスする2段構えの方法もあります。今回は、チームコレクションを直接指定しました。
const string localProjectPath = @"c:/source/test";
ローカルのワークスペースのパスを指定します。c:/source/testというパスを指定しています。一時的に利用するなら、時刻などを指定したフォルダを作成してもいいかもしれません。サンプルコードなので適当ですが、実際に利用しているWorkSpaceのパスなどを指定すると、ギャーってなるので注意してください。
string workspaceName = string.Format("{0}_{1}", Environment.MachineName, DateTime.Now.ToString("yyyyMMddHHmmssms"));
ワークスペース名です。今回は、既存のワークスペースは利用せず一時的に別のワークスペースを作成し、そこにソースを落としたいので、既存のワークスペースに被らないような名前を指定しました。ワークスペースが被らないことも注意する必要がありますが、その前に指定したlocalProjectPath も既存のワークスペースですでに指定されていたりするとエラーとなるので注意が必要です。
localWorkspace = versionControlService
.CreateWorkspace(
workspaceName,
versionControlService.AuthorizedUser,
string.Empty,
new[] { new WorkingFolder(serverProjectPath, localProjectPath) });
ワークスペースを作成します。既存のワークスペースを取得する場合は、GetWorkspaceメソッドまたあTryGetWorkspaceメソッドを利用します。
const string serverProjectPath = @"$/hoge/";
Visaul Studio Onlineの取得したいソースのパスを指定します。
localWorkspace.Get();
実際に、ソースを取得します。
localWorkspace.Delete();
一時的に利用したかっただけなのでワークスペースを削除します。削除し忘れるとVisual Studio 2013等から削除しなければなりません。
今回は、ユーザ名、ドメイン、パスワードを指定していませんが、これはVisual Studio 2013からVisual Stuido Onlineへ接続している為と思われます。未接続の場合は、認証する処理も必要です。
まとめ
1.Visual Studio Onlineは、ローカル上のTFSと同様にTFS APIが利用できる。
2.TFS APIは、以下のdllを参照することで利用できる。
・Microsoft.TeamFoundation.Client.dll
・Microsoft.TeamFoundation.VersionControl.Client.dll
3.TFS APIを利用することで、Visual Studio 2013からソース管理するよりも高度な操作が可能である。