MS Project と Redmineの連携



MS Project と Redmine を連携させてみた




はじめに




プロジェクトの管理をしなければならなくなった。

これまでは一開発者だったんだけど、プロジェクトの同時進行が増えてきたために、ついにそのお役が回ってきてしまった感じ。

まぁいい機会なので頑張ってみようと思う。



で、Redmineは高機能だけど、プロジェクト管理には痒いところに手が届かない感がある。

プラグインもいろいろあるけど、なかなかうまく動いてくれなかったり、自動計算とかはあんまりやってくれないし。

ということで、MS Projectと連携させてみることにした。







前提




MS ProjectでWBSを起こし、タスクとリソースを管理する。

Redmineは作業の状況を入力してもらうだけで、開始日・終了日などは変更させない。







方法




まずMS ProjectでWBSを作った。

バージョンを工程とし、詳細設計、製造/単体試験に分けて、さらに機能毎などタスクに落としこむ。

一通りタスクが出来上がったらExcelに貼っつけてRedmineにインポートする。

CSVとかでやってもいいけど、今回はこの便利ツールを使った。



Redmineチケット★一括★の詳細情報 : Vector ソフトを探す!



で、登録されたチケットのIDをMS Project側にも書いておく。

��そういう意味でも上記ツールが楽)



MS Project側はマクロを設定し、REST API経由でチケットの情報を取得してくるように設定。

取得した情報は適宜MS Project側に貼り付けていく。

自分が取得しているのはとりあえず作業時間とトラッカーとステータスくらい。

まだ他にも必要になるかも。







運用




運用イメージはこんな感じ。








  1. MS Project側の情報をマクロで更新。

  2. 必要に応じてリソースの再割当てや開始日の調整を実施。

  3. Excelに貼り付けてツールで更新を反映。



こうすると、作業管理はRedmineでやりつつプロジェクトの状況を可視化したいときはMS Projectから素敵レポートを出力することができる。

とはいえ、MS Projectの使い方自体を勉強中なのでこれでうまくいくのかは未知数。



情報取込のマクロはこんな感じ。

拾い物を切り貼りしたやっつけです





Const API = "http://server/redmine/"
Const Key = "key=aaaaabbbbbccccc1234567890123457890"


' ###################################################################
' #
' # Redmineから情報を取得する。
' #
' # チケット番号が入力されたタスクを、Redmineの情報で更新する
' # チケット番号が入力されていないタスクは無視される
' #
' ###################################################################
Sub ImportRedmineData()

Dim prj As Project
Set prj = ThisProject
Dim tsk As Task
Dim ticket As Object

' すべてのタスクを対象に動かす
For Each tsk In prj.Tasks

' チケット番号が入力されている場合
If tsk.Text1 <> "" Then

Set ticket = GetXmlData(API + "issues/" + tsk.Text1 + ".xml?" + Key)

'説明
tsk.Text6 = ticket.getElementsByTagName("description").Item(0).text

'トラッカー
tsk.Text2 = ticket.getElementsByTagName("tracker").Item(0).getAttribute("name")

'ステータス
tsk.Text4 = ticket.getElementsByTagName("status").Item(0).getAttribute("name")

'トラッカー
tsk.ActualWork = ticket.getElementsByTagName("spent_hours").Item(0).text

If ticket.getElementsByTagName("parent").Length > 0 Then

tsk.Text5 = ticket.getElementsByTagName("parent").Item(0).getAttribute("id")

End If

End If

Next

End Sub



コメント

人気の投稿