TFS Advent Calendar Day 19 ~ ODataを使ってTFSサーバにアクセス:設定編

この記事はTFS Advent Calendarの19日目の記事です。
サイトはこちら:http://atnd.org/events/22819

前回は、OData Service for TFSのセットアップについて書きましたが、今回は設定についてです。結構強引なことをやってますので、ちゃんと知識のある方はちゃんとした方法で対応してくださいw

OData Service for TFSを動かすためには
 ・Windows Azure Compute Emulator上で動かす
 ・IIS 7.0上で動かす
という2つの選択肢がありますが、今回はIIS7.0上で動かす方法をとります。
なぜかというと、Windows Azure Compute Emulatorは、IPアドレスが「127.0.0.1」しか使えないので、公開するには適していないからです。

さて、設定手順ですが、「StartHere.html」-「Introduction」-「Run the OData Service loccaly, see the Configuration and Running the OData Service」にある「Running the Service outside the Windows Azure Compute Emulator (using IIS 7)」になります。
ただ、この手順に従うと、IISの80番ポートを使うことになりますが、TFSサーバでSharePointが稼働している環境だとポートが競合し、うまく動作しません。
今回は、IIS上に別サイトを作成し、OData用のポートを割り当てるようにします。

最初に、IISに別サイトを作成します。
IISマネージャーで「Webサイトの追加」を実行します。

Set08

設定内容は
 ・サイト名:ODataTFS
 ・アプリケーションプール:ASP.NET v4.0
 ・物理パス:OData Services for TFSインストール先の「code」フォルダ
 ・ポート:9999
にします。

Set17

作成できたら、OData Service for TFSをインストールしたフォルダの「code\ODataTFS.Web\Setup」にある
 ・InstallVisualCRedist.cmd
 ・InstallTFSObjectModel.cmd
を実行します。

次に、Microsoft Visual Web Developer 2010 Expressを管理者権限で起動し、「code\ODataTFS.sln」を開きます。
「ODataTFS.Web」がスタートアッププロジェクトになっているのを確認してください。
(デフォルトで「ODataTFS.Web」がスタートアッププロジェクト(太字)になっていると思います)
「Web.config」を開き、<system.diagnostics>-<trace>-<listeners>にある「<add type="Microsoft.WindowsAzure.~」をコメントアウトします。



Set10_2

<appSettings>にある「add key="ODataTFS.TfsServer"」の後ろのvalueに接続先のサーバを指定します。(VS IDEでの接続先と同じ設定です)



Set11_2

ここで、web.configを一旦保存します。

ODataTFS.Webプロジェクトのプロパティを開き、「Web」タブにある「プロジェクトのURL」に対して、先ほど作成したIISサイトのポート番号を追加し、「仮想ディレクトリの作成」を押します。

Set12

「仮想ディレクトリは正しく作成されました。」とメッセージボックスが表示されればOKです。
その後、「配布パッケージの作成」を実行します。

この状態で、「http://localhost:9999/ODataTFS.Web/」にアクセスすると、トップページが表示されます。

Set16

下の方に、各種リソースにアクセスするためのパスが記載されていますが、「http://localhost」を「http://localhost:9999/ODataTFS.Web」に置き換えればアクセスできます。
さらに、「http://localhost:9999/ODataTFS.Web」の「localhost」をサーバ名に置き換えれば、クライアントからもアクセスできます。
ためしに、WorkItemsコレクションにアクセスしてみると、こんな感じで表示されます。

Set18

ということで、OData Services for TFSがローカルのTFSサーバで使えるようになりました。

ODataが使えると、別サーバからTFSのリソースが操作できるようになるので、Webアプリでプロジェクト運営に合わせたサイトを作成するとかも簡単にできるようになるのかなと。

個人的には、codeplexにある「TFS On The Road」のような、WindowsPhone7からODataを使ってTFSサーバにアクセスするアプリを作ってみたいですが、スキルの問題が^ ^;

第2回 Team Foundation Server ユーザーズ勉強会に参加してきました

前回の予告通り、12/10(土)に開催されたTFS勉強会に参加してきました。
自腹を切ったのも予告通りです><
(概要はこちらにて。)

レドモンドで開催されたALM Summitの報告会でしたが、今回もとっても濃い内容でした。

ざっとですが、
 ・シアトルにスタバ1号店がある
 ・ブロックごとにスタバがある
 ・アメリカでも、30%程度が組織変更に成功していない?
 ・失敗から学べ
 ・DevelopmentからDeleveryへ
 ・ビジネスニーズ駆動のリリース
 ・CI/BTS/SCMなんてものは5年前のネタ
 ・ソース管理/タスク管理/自動テストは開発者の躾/基礎体力
 ・VSの機能が、開発者が追従すべき内容
 ・VS vNextのTeam Web Accessがとんでもなく使いやすい(特にScrumプロジェクト)
 ・システム開発のサイクルが開発だけでなく運用まで拡大
といった感じだったかと。(実際にはまだまだたくさん話して頂いています)

「運用からのフィードバックを元に開発サイクルを起動し、ビジネス価値を向上させる開発を行う」というのが大きなメッセージの1つになってますが、後で考えてみると、パッケージ開発とマーケティングリサーチの関係に似ているかなと思いました。
ただ、運用者からのフィードバックを直接受けて開発するのは、ビジネス価値としてはやはり大きいかと。

VS vNextもTeam Web Accessの使いやすさもすごかったです。もうWeb Accessだけでもいいのではないかと思うぐらいです。

「ソース管理/タスク管理/自動テストは開発者の躾/基礎体力」は、自分にとっては耳が痛いお話(特に自動テストはw)でしたが、「やっぱりそうなんだ」とも認識させてもらいました。

懇親会にも参加させて頂き、あれやこれやとお話を聞かせてもらえました。
「ブレない」ことはすごいことです(謎)

次回は1月中旬ぐらいの平日に開催予定とのことですが、さすがに2回連続で自腹は痛いので参加できるかどうかは怪しいです。
でも、やはり参加したいですね。

あ、TFS Advent Calendarの参加者も募集中だそうですw

TFS Advent Calendar Day 11 ~ ODataを使ってTFSサーバにアクセス:セットアップ編

この記事はTFS Advent Calendarの11日目の記事です。
サイトはこちら:http://atnd.org/events/22819

TFSのデータを参照/更新するには、
 ・VS2010
 ・Web Access
 ・Excel
 ・API
などありますが、ODataというWebプロトコルでのアクセス方法がBrian Kellerのブログで紹介されています。
OData Service for Team Foundation Server 2010 – v1

ただ、サンプルとしてcodeplexへ接続しデータを参照する方法がメインで、ローカルのTFSサーバに接続する方法がない(見つけられないだけ??)ので、ちょっとまとめてみました。
(ルータの設定などを行えば、インターネット経由でのアクセスも行えます。)

まずは、WebPIをインストールしておきます。
OData Service for TFSでは、いろいろなソフトをインストールすることになります。
セットアップを簡単に行うため、WebPIでのセットアップコマンドがあるぐらいです。

次に、Brian Kellerのブログから、OData Service for TFSのセットアップイメージ(ソース付)をダウンロードし、実行します。インストーラが英語ですが、使用許諾とインストール先フォルダの指定ぐらいですので、たぶん大丈夫かと。

セットアップが完了すると、こんな感じに展開されます。

Set01

「StartHere.html」がマニュアルになっています。

Set02

毎度のごとく、英語は駄目なのでほとんど読んでいませんが、とりあえず「Introduction」に飛んでみます。

Set03

「Quick Start」に「Run the OData Service loccaly, see the Configuration and Running the OData Service」となるので、飛んでみます。

Set04

何か、セットアップ/設定方法について書かれているようですので、ちょっと実践してみます。
まずは前提ソフトのインストールです。
setup.cmdを管理者権限で実行し、WebPIでセットアップを行います。
ちなみに、管理者権限がない状態でsetup.cmdを実行した場合、一部SDKがインストールされないとか、WebMatrixでプロジェクトが正常に読めないという状態になるので注意です。
(単純に環境を作るのであれば、WebPIってホントに楽ですね。)

直後にDOSプロンプト画面が表示されますが、これは終わるまで放置します。
もう少し待つと、セットアップ対象ソフトの一覧が表示されます。(表示内容は環境により異なります)

Set06

何も考えずに「INSTALL ALL」を押してください。適切にインストールされます。
インストールが終了すると、またこの画面が表示されます。
サーバ環境だと、「Windows Phone SDK 7.1」がインストールできませんが、無視しても問題ありません。「SKIP」を押すと「NEXT」が押せるようになります。
「NEXT」を押すと、DOSプロンプト画面が表示され、何かファイルを処理しますので、終わるまで待ちます。

Set07

Enterキーを押すと、セットアップ終了画面に戻るので、「CLOSE」で終了します。
最初に表示されたDOSプロンプト画面もEnterキーを押して終了します。

やはり長くなったので、IIS/OData Service for TFSの設定については次回にて。

TFS Advent Calendar Day 7 ~ ユーザ「追加」について

この記事はTFS Advent Calendarの7日目の記事です。
サイトはこちら:http://atnd.org/events/22819

予定していたネタの環境構築がうまくできず、既に黄信号状態です\(;゚∇゚)/

さて、今回のネタですが、実はいい解決策がないのです。
できれば良い策を教えてください<(_ _)>という感じです。

運用例ですが、
「TFSUsers」というグループをWindowsに作成し、その中に開発者ユーザ(DTFSUser01~DTFSUser05)を登録してあります。
TFSUsersグループを、TFSのチームプロジェクトの「共同作成者」として登録しました。

Tfsadc01

クライアントから、DTFSUser01でチームプロジェクトに接続すると、当然ですが、ちゃんと接続できます。

開発を続けているうちに、どうにも開発が間に合わないということで、犠牲者支援者が現れました(DTFSUser06)
さっそく、チームプロジェクトにアクセスしてもらおうということで、TFSUsersグループに追加しました。



Tfsadc02_2

さて、クライアントから接続設定しようとすると・・・

Tfsadc03_2

資格情報を聞かれます。

(この時点であやしいのですが)
再度ユーザ名/パスワードを入力すると・・・

Tfsadc04

怒られます><

登録したはずなのに~ということでいろいろ確認すると、驚愕の事実が・・・。

Tfsadc05

そ~なんです、OSのグループ情報が反映されないんです!
最初は分からずに何日か悩みました。

とりあえずは、
 ・サーバ再起動
 ・コレクションの停止→開始
 ・グループの削除→再登録
で追加したユーザは反映されるのですが、どれもあまりいい策では...。
あ、ちなみにユーザを直接追加した場合は即反映されますw

何かいい策お持ちの方、情報開示してください~<(_ _)>

TFS Advent Calendar Day 3 ~ TFSを使いたいと思った理由

TFS Advent Calendarに参加させて頂くことになりました。
告知サイトはこちら(http://atnd.org/events/22819)です。

おそらく、まともなTFSネタはほかの方々が提供されると思いますので、自分はちょっと外れたネタで行きます。

自分がTFSなるものを知ったのは、TechEd2007でした。
 「VSSではないソース管理」
 「作業項目が管理できる」
 「なんかスゲー」
って感じでしたが、そうとうお高めでしたので、使うことはないかな~と思ってました。

その後、想像通りTFSを使用することはありませんでしたが、またもやTechEdでTFS2010のお話を聞き、
 「チェックインしたソース群と作業項目が連動できるんだ」
 「Eclipseとの連動もできるんだ」
 「LabManagerすげ~」
 「安くなったんだw」
となり、とあることからMSDN Ultimateが利用できた状態でもあったので、さっそく検証しようと。すると、
 「MSSCCI使えばVB6/VC6からも使えるじゃなーい」
 「ゲートチェックインってやっぱり便利」
 「Team Explorer EverywhereのLanguagePack使えば、VS IDEとほとんど使い勝手が変わらない!」
などなど出てくるではありませんか。
ちょうど、自分の部署で
 ・ソース管理どうしよう
  VB6/VC6はVSS、JavaはVSS or SVN、uniPaaS(旧dbMAGIC)はファイル管理。
  どうにか統一できないかな?
 ・作業者にやさしくない進捗管理
  進捗管理はExcelで。でも進捗の修正はだいたい同じタイミングになるから、「他の人が修正中~」で待たされると。
 ・テスト自動化
  外部装置を扱うので、全て自動は無理にしても、自動化でデグレード確認の手間を少なくしたい
とか考えていたところなので、TFS2010使えばだいたい解決できそうかなと。
(ちなみに、uniPaaSがサポートするバージョン管理ソフトにSVNは入っていません)
それに加えて、なんとなくですが「今後こんな感じで管理していくんですよ~」みたいなものが具現化されているような気がして、TFS追っかけしています。

個人的な感想ですが、TFS2010は「管理ツール」ではなく、「管理インフラ」ですね。
TracLightningと比較されることも多く、どうしてもコスト面では不利ですが、「各機能の統合感」ではやはりTFSの方がいいなぁと感じます。
(Trac+SVN+JenkinsでだいたいTFSと同じような管理は可能ですが、なんとなく「引っ付けた」感が残っているような感じがします)

さて、次のネタどうしよう?w

第1回 Team Foundation Server ユーザーズ勉強会に参加してきました

11/4(金)に開催された、TFS勉強会に参加しました。
(登壇者のご紹介はこちらにて。)

登壇者のリストを見て「これは参加しないと」と思い、少し強引にスケジュールを調整したのですが、やはり内容の濃い勉強会でした。

○中村さんのセッション
 Trac+SVNからTFSへの移行についてでした。
 ・アンケート:勉強会の参加者の2/3ぐらいがTFS利用者
 ・チケット移行はExcelを使用
  TracもExcel使えるんだぞと。
 ・TFSは各管理情報の連携が簡単にできる
 ・日本語の情報があまりないのが残念(英語ならたくさんある)
 ・実際のセッションがスライドに組み込まれた想定時間通り
 ・CI(継続的インテグレーション)できないと生きていけないらしい

○りばてぃさんのセッション
 ウォーターフォール(WF)開発でのTFS活用についてでした。
 ・既存のプロセス/生成物を変更されると嫌がる方々がいらっしゃる
  なので、TFSにプロセスを合わせるのではなく、プロセスにTFSを合わせる(使えるところだけ使う)
 ・TFSの機能をちゃんと理解していないと、プロセスに合わせるのは難しい
 ・TestManagerの受けがいいらしい
 ・Excel使える

○柴山さんのセッション
 分散アジャイル開発でのTFS活用についてでした。
 ・Innovation Sprint2011実行委員長だった@kawagutiさんの頭だし
 ・TOC厨/プロセス厨
 ・詳細はBlog/SlideShare等々
 ・「流れないウォーターフォール」
 ・某ガンダムのタイトル流用
 ・プロジェクトの改善内容について、惜しげもなく公開
 ・「Continuous Delivery」
 ・ツールとアナログは対立するものではなく、組み合わせて使うもの

お一人当たり30分ぐらいだったので、「さらっ」とお話されていましたが、とんでもないことを実行されているのがよくわかりました。

あと、全体的に感じたことは
 ・ツールを使うだけでは改善できない。何を改善したいかを見失わないこと。
 ・TestManager万歳
 ・プロジェクトにかかわる人の意識を共有することが重要
 ・某ガンダムはやはり名作w
といったところです。

このお三方、ALM Summitにも参加されるとのことで、お土産が12/10(土)の第2回TFSユーザーズ勉強会でお話ししていただけるとのこと。自腹切ってでも行きます!

あと、書籍「Team Foundation Server入門」頂きました。
じっくり読んでみたいけど、地元の勉強会にも出してみたいし、悩みます( ´・ω・`)

TFS カスタムアクティビティの作成

自分で機能拡張できるのもTFSのいいところということで、カスタムアクティビティを作成してみます。
主要なところ(というか、ほぼ^ ^;)は、「C#.NETでいく? TFS2010ビルド テンプレートのカスタマイズ(1)」以降と「Ewald Hofman Customize Team Build 2010 – Part 1: Introduction」以降を参考にさせて頂きました。

VSで新規プロジェクトを作成します。テンプレートから「アクティビティ ライブラリ」を選択します。

Act012

プロジェクト作成後、TFSのライブラリ(Microsoft.TeamFoundation.Build.Client)を追加します。

Act013


Act015

次に、プロジェクトにWorkflowテンプレートからコードアクティビティのクラスを追加します。

Act016


Act017

詳細は割愛させて頂いて、以下のようなソースに変更します。

Act018

変更概要としては
 ・Microsoft.TeamFoundation.Build.Clientを参照追加
 ・クラス属性として「[BuildActivity(HostEnvironmentOption.All)]」を追加
  →これを指定しないと実行時にエラーになります
 ・ワークフローで指定してもらうプロパティを追加する
  最初の「BuildDetail」は、ビルド結果が格納されているオブジェクトになります
 ・BuildDetailに対して、リンク形式の出力結果を追加する
  AddExternalLinkについての詳細はこちら
という感じです。

一旦ビルドを実行し、エラーがなければワークフローにおいてみます。
プロジェクトにある「Activity1.xaml」を開き、ツールボックスの「CustomActivities」タブに「WriteExternalLink」があるはずです。これをワークフローエディタにドロップし、プロパティで3つの引数が指定できる状態であればOKです。

Act020


Act021

次は、作成したアクティビティを展開する方法についてです。

TFSカスタムアクティビティの展開:セットアッププロジェクトの作成

作成したアクティビティを使うためには、
 ・VS/TFSが参照するフォルダにdllが格納されていること
 ・グローバルアセンブリキャッシュ(GAC)に登録されていること
が条件になります。(詳細については「Customize Team Build 2010 – Part 7: How is the custom assembly found?」)

参考にさせて頂いた「C#.NETでいく? TFS2010ビルド テンプレートのカスタマイズ(3)」とか「Ewald Hofman Customize Team Build 2010 – Part 7: How is the custom assembly found?」では、ビルドコントローラーに対してカスタムアセンブリを参照させる方法で解決していますが、複数のカスタムアセンブリを使いたくなった時にややこしくなるのが嫌だったので、ここではセットアップを作成して登録する方法をとります。

ソリューションに対して、セットアッププロジェクトを追加します。

Act022


Act023

自動的にエディタが起動されますので、「対象コンピュータのファイルシステム」を右クリックし、「特別なフォルダーの追加」-「グローバルアセンブリキャッシュフォルダ」を選択します。

Act024

GACに登録するファイルとして、プロジェクトでビルドされたファイルを指定します。

Act025


Act026

次は、セットアップ時の動作を少しだけ変更します。
通常、セットアップ実行時に「このユーザーのみ」と「すべてのユーザー」という選択肢が表示されますが、アクティビティはユーザ単位で使う/使わないというコントロールはしない(はず)ので、必ず「すべてのユーザー」でインストールするように変更します。
セットアッププロジェクトを右クリックし、「表示」-「ユーザーインターフェイス」を選択します。ユーザーインターフェイスのエディタ画面で、「インストール」-「開始」-「インストールフォルダー」のプロパティにある「InstallAllUsersVisible」をTrueに変更します。

Act034


Act035

ここで、セットアッププロジェクトをビルドすると、こんなエラーになってしまいました。

Act028

すっかり忘れていましたが、GACに登録するアセンブリは、厳密名を持っていないと登録できない仕組みになっています。(いわゆる「DLL Hell」の解決)

これはちゃんと対応しないといけないので、厳密名をアセンブリに付与します。

TFSカスタムアクティビティの展開:厳密名の付与

カスタムアクティビティのプロジェクトのプロパティを開き、「署名」タブを選択します。

Act029

「アセンブリの署名」をONにし、キーファイルの選択から「<新規作成…>」を選択します。

Act030

作成画面で「キーファイル」にファイル名を指定します。ここでは「キーファイルをパスワードで保護する」をOFFにしておきます。(他にも展開するのであれば、ちゃんとパスワード指定した方がよいかと思います)

Act031

この状態で、カスタムアクティビティのプロジェクトを一旦ビルドし、次にセットアッププロジェクトのビルドを行うとセットアッププログラムが正常に作成できます。

このセットアッププログラムを使って、ビルドワークフローを編集する端末とビルドサーバにアクティビティをインストールします。
なお、インストール後にビルドサービスの再起動を行わないとちゃんと認識してくれません。

次は、インストールしたアクティビティをVS IDEに登録します。

TFSカスタムアクティビティの展開:VS IDEへの登録

ビルドワークフローを編集する端末でビルドプロセステンプレートファイルを開きます。ツールボックスの「全般」タブで右クリックし、「アイテムの選択」を選択します。

Act033

アイテムの選択画面で、「System.Activitiesコンポーネント」タブにある「参照」ボタンを押します。

Act036

インストールしたアセンブリ(dll)を選択するのですが、「C:\Windows\Microsoft.NET\assembly\GAC_MSIL」に、「CustomActivities」フォルダがあり、その中にあるわけのわからない名前(バージョン番号+公開キートークン)になっているフォルダ内のdllファイルを選択します。すると、ツールボックスに「WriteExternalLink」が表示されます。

Act037


Act038


Act039


Act040

次に、これを使って、適用なファイルへのリンクを出力するようにワークフローを変更します。