SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual Studio Team System 徹底活用

TFSの作業項目をプロジェクトに合わせてカスタマイズする(前編)

Visual Studio Team System 徹底活用(1)

  • X ポスト
  • このエントリーをはてなブックマークに追加

作業項目のワークフロー定義(<WORKFLOW>要素)

 作業項目定義に含まれるワークフローとは、ある一つの作業項目に定義されている作業そのものがどのような状態と状態遷移を取るかを定義するものです。例えば、新しく作業項目を作成したときは新規作成という状態、次に作業者が割り当てられると作業待ちという状態、実際に作業が開始されると作業中、作業が終了すると完了、などという具合に一つの作業はその進捗状況によって必ず状態を変えています。このときの一つ一つの状態と、新規作成から作業待ちと言った状態の遷移を定義するのが、作業項目のワークフロー定義です。それぞれについて少し細かく見ておきましょう。

作業項目の状態定義

 作業項目定義に含まれる状態とは、先ほども書いたとおり、実際に作業が進捗していく中で取り得る、ある時点での状況を示すものです。先ほどの例では、新規作成、作業待ち、作業中、完了という4つの状態が存在していることになります。これを作業項目定義の中に定義する方法ですが、以下の書式で定義します。

[リスト2]状態定義の方法
<STATE value="新規作成" />

 定義自体は至ってシンプルです。value属性に状態の名前を定義するだけです。ここの理解はなんら問題ないでしょう。ただし、実際には次のリストに示すような定義になることが一般的です。

[リスト3]よくある状態定義の方法
<STATE value="新規作成">
  <FIELDS>
    <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
      <REQUIERD />
    </FIELD>
  </FIELDS>
</STATE>

 ここで、増えた<FIELDS>要素配下は、作業項目定義にあるフィールドの規則という機能を利用しているものです。詳細については回を改めて解説しますが、作業項目定義には、フィールドの入力規則を決めるための機能があり、ある特定の状態や状態遷移の場合にその規則を有効にするという機能もあると理解しておいてください。なお、ここでは、状態が新規作成のとき、refname属性が"Microsoft.VSTS.Common.ActivatedBy"のフィールドは必須入力項目になるという設定がされています。

作業項目の状態遷移定義

 先ほどの例では、新規作成から作業待ち、作業待ちから作業中など、ある状態からある状態に状態が変わっていました。作業項目定義に含まれる状態遷移とは、作業項目が取り得るすべての状態遷移のパターンを網羅的に定義しているものです。例えば、作業待ちから作業中に遷移した後、作業中からなんらかの事情で作業待ちに逆遷移する可能性がある場合、それぞれを別に合計2つ定義する必要があります。

 さて、実際の定義の仕方ですが、次のようになります。

[リスト4]状態遷移定義の方法
<TRANSITION from="新規作成" to="作業待ち">
  <REASONS>
    <DEFAULTREASON value="担当者割り当て" />
  </REASONS>
</TRANSITION>

 状態遷移は<TRANSITION>要素を利用して、その中のfrom属性がto属性に状態が変わることを示します。ここでfrom属性、to属性はそれぞれ、<STATE>要素のvalue属性に定義されている値の中から選択して同様の文字列にする必要があります。また、状態が変わるには、それ相応の理由があるはずだという観点から、<REASONS>要素を利用して、理由を設定します。<DEFAULTREASON>は、状態遷移させるときに初期値として選ばれる理由で、いくつかの候補から選択したい場合には、以下に示すようにいくつかの<REASON>要素を追加します。

[リスト5]状態遷移の理由の定義の方法
<TRANSITION from="作業中" to="完了" >
  <REASONS>
    <DEFAULTREASON value="レビュー終了" />
    <REASON value="延期" />
    <REASON value="中止" />
  </REASONS>
</TRANSITION>

 いくつかの<REASON>要素を追加する場合でも<DEFAULTREASON>要素は必ず必要になります。もう1点、重要な点があります。それは、作業項目が新しく作られた時の状態遷移を必ず定義しておかなければならないということです。例えば、タスクという作業項目には、リスト6のような定義があります。

[リスト6]デフォルト状態遷移
<TRANSITION from="" to="アクティブ">
  <REASONS>
    <DEFAULTREASON value="新規" />
  </REASONS>
</TRANSITION>

 <TRANSITION>要素のfrom属性が空になっているのがデフォルト状態遷移であることを示しています。この定義によって、作業項目が新しく作成されたときにどの状態から開始されるかが決定されます。

 確認いただいても分かるように、状態定義も状態遷移定義も、定義そのものはさほど難しくはありません。ですが、どんな状態を取り得て、どんな状態遷移をさせるのかという設計とも言うべきところでは、大いに悩むことが予想されます。というのも、これらは実際に使い始めてからでは、おいそれと変更できるものではないため、事前にきちんと作りこんでおく必要があります。しかし、それをするためには、自分たちのプロジェクトに起こりえる作業やバグなどの項目を、どのような作業フローで処理していくかを明確に決めておかなければなりません。

作業項目のフォーム定義(<FORM>要素)

 作業項目定義に含まれるフォームとは、作業項目のフィールドを画面としてどのような見た目で表示するかを定義するものです。実際にフィールドを画面に表示するための定義方法は次のとおりです。

[リスト7]フィールドを表示するフォーム定義の方法
<Control Type="FieldControl" FiledName="Jp.CodeZine.WIT01.Name" Label="サンプル名" LabelPosition="Left" />

 Type属性は作業項目のフィールドを画面に表示するときに利用するコントロールの種類を設定します。設定可能な種類は図6およびその次の表に示すものが用意されています。

図6:利用可能なコントロールの種類
図6:利用可能なコントロールの種類
番号 種類 概要
(1) WorkItemClassificationControl 区分パスとイテレーションパスのフィールドの場合に利用します。具体的には、フィールドのrefname属性がSystem.AreaPath、System.IterationPathの場合に利用します。画面上にツリー形式でフィールドの値を表示することができます。
(2) HtmlFieldControl フィールドタイプがPlainText、HTMLの場合に利用します。画面上に複数行形式またはHTML形式でフィールドの値を表示することができます。
(3) WorkItemLogControl 作業項目の履歴のフィールドの場合に利用します。具体的には、フィールドのrefname属性がSystem.Historyの場合に利用します。画面上に作業項目の履歴情報を表示することができます。
(4) FieldControl 他のコントロールの利用条件に該当しないフィールドの場合に利用します。大多数のフィールドでは、これを利用することになります。画面上に単項目形式でフィールドの値を表示することができます。
(5) LinksControl 作業項目に他の作業項目やドキュメントなどへのリンクを持たせたいときに利用します。特定のフィールドには関連付けず、画面上にのみ、リンクの管理情報を表示することができます。
(6) AttachmentsControl 作業項目に添付ファイルを持たせたいときに利用します。特定のフィールドには関連付けず、画面上にのみ、添付ファイルの管理情報を表示することができます。

 利用可能なコントロールが何種類かありますが、実際には限られた用途のみに利用するものがいくつかあり、作業項目定義をカスタマイズする場合には、主にHtmlFieldControlとFieldControlの2つを利用していくことになります。見た目の違いだけで言うと、複数行に渡る表示が可能なHtmlFieldControlと1行表示のみのFieldControlということになります。基本的にはこれらを押さえておけば問題ないでしょう。

 FieldName属性は画面に値を表示したり、画面で入力された値を作業項目に保存したりするために利用するフィールドを設定します。ここには、<FIELD>要素内に定義したフィールドから任意のものを設定することができます。ただし、<FIELD>要素のrefname属性に定義してある文字列と完全に一致するように定義する必要があります。

 Label属性は作業項目定義のフィールドを画面に表示したときにそれを説明するためのラベル名を設定します。一般的に、WindowsフォームアプリケーションやWebアプリケーションなどにあるテキストボックスなどの入力項目の左側につけるラベルと同様のものと考えると分かりやすいのではないでしょうか。

 LabelPosition属性はさきほどのLabel属性に設定した文字列をコントロールに対してどの位置に表示するかを設定します。設定できる値は、Top、Bottom、Left、Rightの4種類のうちのいずれかで、それぞれ表示されるコントロールの上、下、左、右側のいずれかにラベルを表示させるように設定します。

 作業項目のフォーム定義では、フィールドを画面に表示させるための基本的な要素である<Control>要素の他に、WindowsフォームアプリケーションのGroupBoxやTabに該当するグループ化やタブ化をサポートする<Group>や<TabGroup>要素などがサポートされています。他にもレイアウトにかかわる要素がいくつか用意されていますが、詳細についてはMSDNライブラリの『作業項目フォームの<Layout>、<Group>、および<Column>要素』を参照してください。

まとめ

 前編となる今回は、作業項目定義を構成する4つのブロック(フィールド定義、状態定義、状態遷移定義、フォーム(レイアウト)定義)について、それぞれがどのように定義されているかを確認してきました。WPF(Windows Presentation Foundation)のXAML(eXtensible Application Markup Language)を理解されているような方にはもしかしたら難なくといったところも多いかもしれませんが、なかなか敷居が高いと感じられたのではないでしょうか。ですが、TFSのようなプロジェクトの管理を目標とするツールを使いこなし、自分たちのプロジェクトにとっての便利な道具にするためには、必要なことになってくるはずです。次回は、今回確認してきた定義の方法をもとに実際に自分たちの作業項目を作り上げていくところに踏み込んでいきます。お楽しみに。

参考文献

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Visual Studio Team System 徹底活用連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト りばてぃ(リバティ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3965 2009/06/18 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング