MS-Project

2009年11月20日 (金)

Tracを真のプロジェクト管理ツールとして使うことが検討されている

TracをMS-Projectのように,真のプロジェクト管理ツールとして使えるように拡張することが,ProjectManagementIdeasで検討されています.親子関係と依存関係の両方を扱っているということで,私のTracDependencyPluginも紹介されています.大きなプロジェクトということだけど,依存関係をInterTracに拡張したことはあまり興味が持たれてないみたい.

| | コメント (0) | トラックバック (0)

2009年9月14日 (月)

MS-Project複数プロジェクト対応版

プラグイン名が変になっちゃいましたが,複数のTracプロジェクトに対応した,Trac->MS-Projectのインポートツールの TracProject.mpp をTrac-Hacksに登録しました.一緒に置いてあるExcelは複数のプロジェクトに対応したチケット編集と,進捗報告書作成用のファイルです.

まだ,大切な機能の追加が残っているため,今のところTrac-VBAコネクタのサンプルという位置づけです.TracDependencyPlugin と InterTracCommitPatch と合わせて,つぶしてもいいところで使ってみてください.

| | コメント (0) | トラックバック (0)

2009年8月23日 (日)

今までTrac関係で作ったものの関係をまとめる。

勉強会の発表資料は分かりにくかったのと,Trac関係に一区切りをつけたいなということで,最近は仕事でTrac使うことがないので,テストとかほとんどできてなくて,すべて中途半端ですが、私がやってきたこと(ProjectのVBAは後で登録します)をまとめておきます.

今まで,Tracの問題としてあげられてきた内容をまとめると.

  • プロジェクトの親子関係がない
  • チケットの粒度が違うものをどうするか
  • 項目(カスタムフィールド)が大きく違うものを同じプロジェクトで扱うこと
  • 複数のプロジェクトに分割したときの登録,確認,出力方法
  • コミットメッセージが一つのプロジェクトにしかつけられないため分割できない

これらを解決するために,私が作ってきたものがどこにからんでくるかということを,次の図にしました.この図ならなんとかわかってもらえるのではないかと

Multitracdep_3

1. InterTracCommitPatch

コミットメッセージを,同じサーバ上の隣のプロジェクトにつけることを可能にします.これにより,今までは,要件定義,工程,実作業,障害などは,同じリポジトリを使う必要があため,どれだけ扱う項目(カスタムフィールド)が違っていたとしても,同じプロジェクトで扱うしか方法がありませんでした.これがあれば,リポジトリの縛りから解放され,プロジェクトを自由に分割することができます.

2. TracDepenecencyPlugin

同じサーバのTracプロジェクト間でチケットの親子関係と,依存関係を扱えるように拡張し,Tracのプロジェクトを分割することが容易になります.カスタムフィールドの入力のところのチェックがまだ追加できてないので,先行チケットを複数指定するときはカンマで区切り,スペースを追加しないとだめなはず.

3. レポート,クエリのHTA

複数のプロジェクトの状況を確認するには,いろいろやらなければならないことが多かったため,これを使用することで,一つのクエリ,レポートの状況を一目で確認できるようにします.いまはTraM(まだ確認してません)があるので必要ないのでしょうか.このHTAは,環境によるのだと思いますが,接続できない未解決の問題があるようです.

4. チケット登録/編集用Excel VBA

XML-RPC経由でチケットの登録と編集を行います.単純に複数のシートに書き込めるようにしただけですが,あれば結構便利です.

5. MS-Project - Trac 連携VBA InterTrac対応版(未公開)

このVBAは,2.のプラグインの情報を元に,ガントチャートが作成でき,先行タスクのところにカッコつきで指定した,四つの依存関係(SS,FS,SF,FF))に対応もしています.作ったものの,仕事で使う機会がなく,デバッグできてないので,公開してません.どの範囲の親子や依存関係を取ってくるかは情報の取得時に設定するため,開発者個人のプロジェクトやレビュープロジェクトを含め内容にすることができます.(MasterTicketsのように,双方向のリンクをDBに保存してないのはそういう理由だったんですが,今となってはあってもよかったのかなぁと思ってます.)

最近出てきたTraMとか含めると,いろいろなところで出ていたTracの問題や,RedMineより劣る点って,解決すると思うんですがどうでしょうか.

| | コメント (0) | トラックバック (0)

Shinjyuku.trac勉強会第4回発表資料

Shinjyuku.trac勉強会第4回の発表資料を登録しておきます。

プロジェクト間のチケットの親子関係(u-z)

3_2

4

5

6

7

8

9

10

11

12    

| | コメント (0) | トラックバック (0)

2009年7月11日 (土)

trac勉強会準備1 依存関係プラグインの設定

Shinjyuku.trac勉強会第4回で発表する。プロジェクトを跨ぐ、依存関係プラグインの設定を、まとめて生きたいと思います。プロジェクトを跨ぐということなので、「リポジトリを共有しない場合で隣のプロジェクトへコミット時のメッセージをつける」の設定はやっておくとして、「TracDependencyPlugin-0.11.1.3-py2.5.egg」をダウンロード (※プロトタイプレベルなのでなにが起こっても責任持てません。インストールして確認とかはまだしないほうがいいと思います)してインストールし、Test1,Test2プロジェクトを作成し双方のTrac.iniに次の設定をします。

# u-z作の依存関係プラグインを有効にします
[components]
tracdependency.* = enabled

# 基準計画のカスタムフィールドでdecoratorを使えるように
[decorator]
calendar_fields = due_assign,due_close,baseline_start,baseline_finish

# InterTracリンクを使えるようにします
# .pathはプロジェクトのパスです。
# .labelは左辺の文字列は小文字になってしまうので、大文字小文字を区別したプロジェクト名です。
[intertrac]
test1.label = Test1
test1.path = C:\TracLight\projects\trac\Test1
test1.title = Test 1
test1.url = http://192.168.1.13/trac/Test1
test2.label = Test2
test2.path = C:\TracLight\projects\trac\Test2
test2.title = Test 2
test2.url = http://192.168.1.13/trac/Test2

#基準計画と親、依存関係のカスタムフィールドを追加します。
[ticket-custom]
due_assign = text
due_assign.label = 開始予定日
due_assign.order = 1
due_close = text
due_close.label = 終了予定日
due_close.order = 2
complete = text
complete.label = 進捗率(%)
complete.order = 3
baseline_start = text
baseline_start.label = 基準-開始
baseline_start.order = 4
baseline_finish = text
baseline_finish.label = 基準-終わり
baseline_finish.order = 5
summary_ticket = text
summary_ticket.label = 親
summary_ticket.order = 6
dependencies = text
dependencies.label = 先行
dependencies.order = 7

後は適当にチケットを作り、親と先行のところに何か指定すればOkです。先行チケットの指定は”プロジェクト名:#チケット番号”が基本で複数指定する場合は", "カンマ+スペースで区切って指定してください。入力時にスペースの追加とかやればいいんですが今はできていません。あと先行タスクの依存形態は,チケット番号のすぐ後ろに括弧で囲んでSS,FS,SF,FFのどれかを指定してください。私 が適当に作ったチケットで親子と依存関係を見ていきます。

1. 親チケット(Test1:#1)

子チケットが二つあることを確認してください。子チケットはinterTracで設定しているすべてのプロジェクトから検索して表示しています。子チケットをクリックすればそのチケットが表示されます。

Test1001

2. 子チケット先行(Test2:#1)

親チケットにTest1:#1が設定されていることと、後続タスクにTest2:#2が設定されていることが確認できます。後続チケットをクリックすると後続チケットが表示されます。

Test2001

3. 子チケット後続(Test2:#2)

このチケットはカスタムフィールドに設定してあるものがそのまま表示されているだけですが、いちおうInterTracのすべてのプロジェクトでこのチケットへのリンクが設定していないことを確認しています。

Test2002

とりあえず。発表する内容のプラグイン周りの確認でした。

| | コメント (0) | トラックバック (0)

2009年6月17日 (水)

Trac - MS-Project連携の状況

Shibuya.trac勉強会第4回で発表する予定のMS-Project連携の状況を少しお見せします.まずは,Tracチケットの親子関係について考える で書いた内容がどうなったのかですが,結局はその記事に書いた,「親チケットは別プロジェクト」を拡張しました.

1. 依存関係

次のものを追加します.ただし,子タスクと親タスクが同じものに依存関係がある場合,子に依存は追加しません.(MS-Projectの仕様です)

  • Tracのマイルストーンとバージョン
  • TracのマイルストーンとバージョンはMS-Projectのマイルストーン(期間0日のタスク)で登録し,設定しているチケットすべてが先行タスクになり,依存関係はFF(FinishToFinish)になります.日付が入っていれば,基準計画に設定します.

  • MasterTickets
  • ブロックされるチケットを先行タスクで依存関係はFinishToFinishで追加します.

  • カスタムフィールドのdependencies
  • InterTracリンク形式のチケットをカンマ区切りで指定します.InterTracリンク形式のチケット指定の後に括弧で囲み依存関係を追加することができ,デフォルトではFSの関係になります.依存関係はMS-Projectで指定できる4種類(FF,SF,FS,FF)です.MS-Projectを知らない人のために二つだけ説明すると,"FF"はmasterticketと同じblockの関係で,"FS"は通常の先行タスクです.

    ※ここでいうInterTracリンク形式とは"プロジェクト名:#チケット番号"の様に指定する.実際は依存関係をつけて"SampleProject:#1(FF),SampleProject:#1(FS)"のようになります.

    2. 親子関係

    カスタムフィールドにsummary_ticketを作り,InterTracリンク形式で親チケットを指定する.同じプロジェクト内の場合は#+チケット番号でもいい.

    3. 日付

    親チケットはdue_assign.due_closeに日付が入っていれば基準計画に設定します.実際の日付はすべての子チケットから自動的に設定されます.子(葉の意味)チケットはdue_assign,due_closeは実際の日付になり,baseline_start,baseline_finishが設定されていれば,基準計画が設定されます.

    実際の設定や出力を少しお見せします.

    ここで確認できるのは次の5つです.

    1. 親タスクの基準計画
    2. マイルストーンに依存関係を追加
    3. バージョンに依存関係を追加
    4. チケットの依存関係を追加
    5. チケットの親子関係

    下の三つの図の中の番号のところで確認できます.

    まずは,上位のTracプロジェクトのチケットの一覧です.

    Tp01

    子チケットがあるTracプロジェクトです.

    Tp02

    MS-Projectに取り込んでガントチャートを表示したところです.

    Tp03

    とても簡単な例を見ていただきましたが,勉強会ではもっと複雑な例を見せられるかなぁと思います.この作りなら,親子を完全に別にすることもできますので,次のような問題は回避することができるようになるのではないかと思います.

    1. サマリータスクとタスクの粒度の問題
    2. タスクとサマリータスクで扱う情報の違い
    3. 障害対応と開発作業一緒にしたくない.

    | | コメント (0) | トラックバック (0)

    2009年5月27日 (水)

    一つ前の記事のクラスモジュールを使ってTicketImportPluginに代わるExcelマクロを作る

    MS-Project<->Trac連携を作っていると,テストのためのデータを登録するのもすごく大変で,TicketImportPluginを使おうとしたが,チケットタイプが文字化けする等の問題があるので,VBAで作ってみた.といっても,TicketImportPluginに文句言っている人もいないので,VBAの部分をTracXMLRPCの使用例として公開する.かなぁーり汚いコードですが,使い方のサンプルということでお許しを…下の二つのファイルを取り込んで,sheet1のVBAに下のソースを貼り付けると使える.

    「TicketEdit.cls」をダウンロード

    「MiscModule.bas」をダウンロード

    sheet1のVBA

    Sub export()
        Dim user As String, pw As String, URL As String, projectName As String
       
        Dim settingSheet As Worksheet
        Set settingSheet = Sheet1
       
        URL = settingSheet.Cells(2, 3).value 'アドレス
        user = settingSheet.Cells(6, 3).value 'アカウント
        pw = settingSheet.Cells(7, 3).value 'パスワード
        projectName = settingSheet.Cells(3, 3).value '開発プロジェクト名

        Dim te As TicketEdit
        Set te = New TicketEdit
       
        te.init URL, projectName, user, pw, "Sheet2"
        te.export
    End Sub

    Sub check()
        Dim user As String, pw As String, URL As String, projectName As String
       
        Dim settingSheet As Worksheet
        Set settingSheet = Sheet1
       
        URL = settingSheet.Cells(2, 3).value 'アドレス
        user = settingSheet.Cells(6, 3).value 'アカウント
        pw = settingSheet.Cells(7, 3).value 'パスワード
        projectName = settingSheet.Cells(3, 3).value '開発プロジェクト名

        Dim te As TicketEdit
        Set te = New TicketEdit
       
        te.init URL, projectName, user, pw, "Sheet2"
        te.check
    End Sub

    Sub update()
        Dim user As String, pw As String, URL As String, projectName As String
       
        Dim settingSheet As Worksheet
        Set settingSheet = Sheet1
       
        URL = settingSheet.Cells(2, 3).value 'アドレス
        user = settingSheet.Cells(6, 3).value 'アカウント
        pw = settingSheet.Cells(7, 3).value 'パスワード
        projectName = settingSheet.Cells(3, 3).value '開発プロジェクト名

        Dim te As TicketEdit
        Set te = New TicketEdit
       
        te.init URL, projectName, user, pw, "Sheet2"
        te.update
    End Sub

    exportして変更箇所をチェックした画面

    Ticketedit

    URL, user, pw, projectNameはsheet1から持ってきていますが面倒なら次のように直接マクロを変更して設定してください.

        URL = http://localhost/trac"
        user = "admin"
        pw = "admin"
        projectName = "SampleProject"

    (ちょっと不親切なので追加しました)

    | | コメント (0) | トラックバック (0)

    2009年5月25日 (月)

    VBAのモジュールをSVNで管理するためにマクロでエクスポートする

    ExcelとProjectでVBAのクラスモジュールを簡単に共有したりとか,VBAのプロジェクトも何とかSVNで差分が見えるように,テキストファイルで管理したい.テキストにするには,エクスポートすればいいが何かと面倒なので,マクロでできないか調べてみた.まず,マクロの記録で何とか仕様としたが,VBEditorでは何も記録されない.Webで検索すると,エクスポート方法が見つかった.後は,フォルダとファイルの存在確認なので,いつもお世話になっているOffice TANAKAのFileSystemObjectの解説を参照する.できあがったソースは

    Const svnCommonFolder = "C:\TracTools\TracTools\trunk\VBA\Common\"
    Const moduleName = "TracXMLRPC"

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim FSO
        Set FSO = CreateObject("Scripting.FileSystemObject")
        'フォルダがあるかどうか確認する
        If FSO.FolderExists(svnCommonFolder) = False Then
            MsgBox svnCommonFolder & "フォルダは存在しません.モジュールの保存は行いません."
            Exit Sub
        End If
        ActiveWorkbook.VBProject.VBComponents.Item(moduleName).Export svnCommonFolder & "TracXMLRPC.cls"
    End Sub

    Private Sub Workbook_Open()
        Dim FSO
        Set FSO = CreateObject("Scripting.FileSystemObject")
        'ファイルがあるかどうか確認する
        If FSO.FileExists(svnCommonFolder & moduleName) = False Then
            MsgBox svnCommonFolder & moduleName & "ファイルは存在しません.モジュールの取り込みは中止しました"
            Exit Sub
        End If
       
        'オープンの時に呼ばれれば,当然saveされているが,デバッグの時はsaveされていないこともある
        If ActiveWorkbook.VBProject.VBComponents.Item(moduleName).Saved = False Then
            MsgBox "ファイルが保存されていないので,TracXMLRPCのオープンを中止します"
            Exit Sub
        End If
        'まず削除する
        ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents.Item(moduleName)
        '読み込む
        ActiveWorkbook.VBProject.VBComponents.Import svnCommonFolder & moduleName & ".cls"
    End Sub

    後はフォルダをワークブックの相対にするとか,SVNコマンドを自動で発行するとかすればいいか.

    | | コメント (0) | トラックバック (0)

    2009年4月12日 (日)

    MS-Project-Trac連携で日付等の扱い

    線表を作るときにどのように作るかについて現在作業中の情報をまとめる.

    1. 親タスク
      • 基準計画のみを設定
      • 予定は子タスクの日付から自動で設定
      • 進捗率は子タスクから
    2. 子タスク
      • 基準計画は設定によって使うかどうかを決定
      • 予定はdue_assign等から設定
      • 日付が入っていないものは親タスクの開始日以後に設定する
      • 期間はtotalhoursから設定する
      • 進捗率はcompleteから設定

    これで設定した情報を元にして情報をもどすのかなぁ

    | | コメント (0) | トラックバック (0)

    Trac-MS-Projectの連携について私がどう考えているか

    なぜに私はTracに出会ったときに,チケットに親子関係を導入したのかということを,私のBTS/プロジェクト管理歴を思い出しながら考えてみる.

    最初は,MS-Project95(?)がVisual Studioに標準でついてきたときから,自分の作業の管理のために使い始めた.この時代の進捗の報告は,MS-Projectのタスクのメモに作業の状況を記述し,SQLサーバ経由でExcelに取り込み進捗報告資料を作成していた.この後はIssueTracker, BugzillaとBTSを使っていたが,MS-Projectへは手で情報を入力し,進捗報告の作成に時間がかかり始めていた.

    Tracを導入したあとは,進捗資料はTrac月のSQLiteのDBから,Excelへ取り込み資料作成することで,資料作成の時間は短くなったが,MS-Projectとの連携はできず,進捗率の入力は手作業で行っていた.ただ,今までの流れからして,計画を立てるときも,報告するときもMS-Projectを使用し,当然の流れで,Tracにも親子関係を作って導入していた.ここまでできていれば,連携すれば報告資料を作成するのが楽になることが見えているため,VBAを使用して連携させた.

    ここまでが去年までの話で,Shibuya.trac新年会で話したように,チケットの親子関係をTracに導入すると,統計やロードマップ等の集計する場所で,親チケットの分の無駄な数が数えられてしまうなどの問題が出てくる.私の場合は自前で集計用のMS-Excelを用意していたので特に問題なかったが,Tracに親子を扱う標準というものがないため,自分の作ったものが標準かどうかわからないという内容でした.かおるんさんが書いていることの”粒度の違い”というところが,私が書いている”無駄な数”と同じことなんでしょうね.

    Trac-Project連携は,私はあった方がいいと思います.WBSレベルのタスクの下にもっとちいさなタスクがぶら下がっていているガントチャートは,Tracのロードマップよりもわかりやすく,プロジェクト内の進捗では有用です.上の層に報告する場合にここまで必要でなければサマリータスクを閉じておけばいいだけだと私は思っています.

    私がどう考えているかですが,多少の問題があっても使いたいと思われるだけの機能を作ることと,親子関係の問題そのものを無くすことをやっていけばいいと思います.

    1. 機能の追加は次のようなことを考えています
      • MasterTicketsと連携しタスク間の依存関係(FFの関係)を扱う(作業中)
      • MasterTicketsを拡張しMS-Ticketレベルの依存関係(FF以外)を扱えるように
      • T&Eと連携し進捗管理,平準化など計画の見直しなどができるように
      • ロードマップの用に気楽に使ってもらうために,プラグイン作ってXMLでエクスポートし,GanttProjectでも使えるようにする.
    2. 親子関係の問題をなくす
      • ここに書いてあるように”親チケットは別プロジェクト”にも対応する(作業中)

    作業中のものについては近々見せられると思います.

    09/06/24追記:遅くなりましたが,Trac - MS-Project連携の状況で少し説明しています.詳細はShibuya.trac勉強会第4回で発表します.

    | | コメント (1) | トラックバック (0)