ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

Visual StudioなしでAzure DevOpsのTFVCリポジトリにコマンドラインで接続する方法

何をいまさら。。。

正直普通にやるならAzure DevOpsのBuild Agentに登録して、Azure Pipelinesのタスクでやるのが王道だと思います。 その方が圧倒的に簡単だし楽だし、悪いことはほぼないでしょう。 ですが、今回事情によってどうしてもそういう作戦が取れず、何とか無理やり実現したことをまとめておきます。

歴史を振り返る

TFVC(Team Foundation Version Control)のクライアントツールってほとんど存在しません。 そもそもTFVC自体がGitに押されまくってあまり使われていないのと、MSの製品なので、Windows + Visual Studioが前提だった背景があるんだろうなーと想像しています。 基本的にTFVCのリポジトリにアクセスするためには、Visual Studioに付属するチームエクスプローラーを用いることになっています。 コマンドラインから操作する場合も、Visual Studioに付属する「tf.exe」を用いてアクセスするのが王道です。

そんな中、2012年にEclipseのマーケットプレースに、チームエクスプローラーのプラグインであるTeam Explorer Everywhereが追加されました。 今振り返ってみれば、Team Foundation Serverをもっと広げていくための布石として作ったんだなーと思ったりもするわけです。 このプラグインがリリースされてから、Team Foundation ServerVisual Studio OnlineとしてSaaSサービス化され、Visual Studio Team Services、Azure DevOpsとリブランディング(という名の改名=迷走)を繰り返し今に至っています。 Java系の開発者もTeam Foundation ServerとかAzure DevOpsのエコシステムに取り込むための先行投資として、こういったプラグインが作られたのでしょう。

グダグダ書きましたが、結論このEclipse用のプラグインを使えば、Visual StudioなしでAzure DevOps上のTFVCにアクセスることができます。 コマンドラインも本家Visual Studio付属のtf.exeと似たような体系になっています。

Team Explorer Everywhere

さて、Team Explorer Everywhereですが、残念なことに2018年で開発が終了しています。 ご存知の通り、既に構成管理システムはGitがデファクトになっており、MSがEclipse向けのプラグインをわざわざ提供する必要性や価値がなくなったものと思います。 Gitのクライアント向けEclipseプラグインならほかにもいろいろありますからね。

ただ、ありがたいことにTeam Explorer Everywhereの最終版は、現在もGithubリポジトリからダウンロードすることができます。

github.com

今回はこのツールを使って、TFVCリポジトリにアクセスしようと思います。

導入手順

Javaのインストール

Team Explorer Everywhereのコマンドラインツールは、Javaで作成されています。 使用するマシン上にJavaのランタイムを入れておきましょう。 GitHubの解説では、Java 6を入れろと書かれていますので、お好きに*1インストールしてパスを通しておきましょう。

コマンドラインツールを配置してパスを通す

準備が整ったので、Team Explorer Everywhereを導入していきます。 Team Explorer Everywhereは、Eclipse用のプラグイン部分と、そのプラグインから使用するツールが分割配置されています。 先ほどのGithubリポジトリのReleaseタブを見てもらうと、以下のように3つの構成物があることがわかります。

f:id:masatsuna:20190825141245p:plain
Team Explorer Everywhere最終版

今回はコマンドラインからTFVCのリポジトリに接続したいので、「TEE-CLC-14.134.0.zip」をダウンロードします。 ダウンロードが完了したら、ブロックの解除を行ってからzipファイルを展開し、お好きな場所に配置します。

f:id:masatsuna:20190825155215p:plain
Team Explorer Everywhereの展開

後程このディレクトリにある「tf.cmd」をコマンドプロンプトから叩くことになるので、パスを通しておきましょう。 パスが通った状態で、コマンドプロンプトから

tf /help

を実行すると、tf.cmdの使い方を知ることができます。

f:id:masatsuna:20190825155437p:plain
tf /helpの実行

Team Explorer Everywhereのライセンスに同意する

このコマンドラインツールは、実行前にライセンスに同意しておかないと使えません。 まずコマンドプロンプトから以下のコマンドを実行します。

tf eula

すると以下のようにライセンス条項が流れてきます。

f:id:masatsuna:20190825160738p:plain
エンドユーザーライセンス

ちゃんと読んでEnterキーを押下しながら最後まで進めましょう。 最後に同意するかどうか聞かれます。 Enterキーを連打しすぎるとこの選択肢もすっ飛ばしてしまうので注意です。

f:id:masatsuna:20190825161236p:plain
ライセンスへの同意

Azure DevOpsのTFVCにアクセスする

Azure DevOpsでPATを発行する

続いてTFVCリポジトリのあるAzure DevOps組織にログインして、PATを発行します。 Full accessの権限が必要*2ですので、割り当てておきましょう。

コマンドラインからローカルのワークスペースを作成する

ここからはTeam Explorer Everywhereのコマンドラインツールを使用していきます。 コマンドプロンプトを管理者権限で起動してください。 tf workspaceコマンドを使用してローカルワークスペースを作成します。

tf workspace /new /location:local TEE-Test /collection:<Azure DevOpsの組織のURL> /login:<Azure DevOpsのログインユーザー名(メールアドレス)>,<先ほど取得したPATの値>
Workspace 'TEE-Test' created.

ここで注意してほしいのは、/collectionスイッチに指定するURLは、Azure DevOpsの組織のURLである点です。 TFVCのリポジトリがあるプロジェクトのURLではありません。 なお/loginスイッチは未指定でも実行可能です。 その場合、ユーザー名とパスワードをインタラクティブに聞いてきます。 この場合も、パスワードはPATの値になるので注意してください。

ワークフォルダーのマップを作成する

次にローカルマシン上のワークフォルダーをtf workfoldコマンドで作成します。

tf workfold /map /workspace:TEE-Test $/TEE-Test C:\Repos\TEE-Test /collection:<Azure DevOpsの組織のURL> /login:<Azure DevOpsのログインユーザー名(メールアドレス)>,<先ほど取得したPATの値>

この例では、指定した組織のAzure DevOps内にある「$/TEE-Test」という名前のTFVCリポジトリとのマップを作成しています。 これで指定したディレクトリ(この例では「C:\Repos\TEE-Test」)に「$tf」という名前の隠しフォルダが作成されます。

ここで指定するディレクトリに後程TFVCのリポジトリが丸ごと落ちてきます。 ですので、なるべく浅いパスを指定しておく方が幸せになれます。

リポジトリを取得する

最後に、作成したディレクトリにTFVCリポジトリのファイル一式をtf getコマンドで取得します。

tf get /recursive /overwrite C:\Repos\TEE-Test /login:<Azure DevOpsのログインユーザー名(メールアドレス)>,<先ほど取得したPATの値>
C:\Repos:
TEE-Test を取得しています

C:\Repos\TEE-Test:
Sample1.txt を取得しています
Sub1 を取得しています

C:\Repos\TEE-Test\Sub1:
Fuga1.txt を取得しています
Fuga2.txt を取得しています
Sub2 を取得しています

これで「C:\Repos\TEE-Test」ディレクトリにTFVCリポジトリの全ファイルが落ちてきます。

まとめ

今回は、Visual Studioをインストールしていない環境でAzure DevOpsのTFVCリポジトリにアクセスする方法を解説しました。 ご紹介したのはTeam Explorer Everywhereの提供するコマンドラインの本当にわずかな部分だけです。 ヘルプを参照すると、もっといろいろ使い方がわかるかと思います。

ただ、今の時代はAzure DevOpsのビルドエージェントに登録してしまえば、こんな面倒なことしなくて済みます。 そういうことがどうしてもできない事情がある場合のみ参考にしてください。

*1:なお私はAdopt Open JDK 8(HotSpot)を入れて動かしてみました。私が使った範囲では問題なく動きました。

*2:調べた範囲だとCodeのFullアクセスでよさそうなんですが、2019/8/25現在、CodeのFullアクセス権のみだとファイルを取得する際401エラーが出てしまいました。