Redmineを業務システム化するアイデア~メトリクス集計の本質は集計バッチ処理
IPAの定量的プロジェクト管理ツール概要やさかばさんの記事を読みながら考えたことをメモ。
ラフなメモ書き。
間違っていたら後で直す。
【元ネタ】
Jenkinsの特長 - メトリクス収集サーバの視点から -: ソフトウェアさかば
マネージャから以前、ベースライン単位にタスクの進捗や課題の状況を履歴表示できないか、という問合せを受けた。
彼の意図としては、ベースライン(プロジェクトのマイルストーン)単位に集計して、予定と実績の差を見たいということだった。
僕は、現状のRedmineでは力不足です、と答えた。
その理由は、Redmineのチケット集計機能はユーザが画面表示した時点のチケットの状態を集計表示する機能だけであり、集計結果を履歴表示する機能はないからだ。
バーンダウンチャート、チケットの登録・完了の累積数、ロードマップスなどのプラグインはあるが、マネージャが欲しい機能はもっと複雑な集計結果の履歴が欲しいのだ。
しかも、その集計結果の履歴をExcelで出力できるようにしたい、とのことだった。
Redmineによるチケット駆動開発を単なるAgile開発ではなく、ソフトウェア開発の業務システムへ拡張しようとすると、もっと複雑な集計処理が必要になる。
IPAは定量的メトリクス収集ツールをRedmineの一機能として作ろうとしているが、その背後にはそういう動機があるのだろうと思う。
だが、集計結果の履歴を保持する機能を実装するのはとても難しいのが現状だろう。
その理由は、業務システムのバッチ処理のように、日次・月次などのようなタイミング(マイルストーン)でフロントで入力されたデータをバッチ処理で集計する処理が必要だからだと思う。
Jenkinsの特長 - メトリクス収集サーバの視点から -: ソフトウェアさかばにもその理由が一部書かれている。
業務システム開発で最も難しいのは、Webフロント側よりもバッチ処理の設計と開発だ。
バッチ処理はアーキテクチャ設計がほぼ全てなので、設計がまずいといくら開発しても無意味。
しかも大量データを集計するから、処理の負荷やシステム運用も考慮しなければ、使い物にならない。
Redmineをソフトウェア開発の業務システムにするには、最終的には集計処理をバッチ化する機能が必要だろうと思う。
そのイメージは下記の通り。
チケット入力などのように集計の元ネタとなるデータは、PGがWeb画面から入力する。
その入力データを定期的(日次・月次)に集計バッチ処理が一括処理して、集計用データを作る。
その集計用データをPLがWeb画面から一覧表示して見れるようにするイメージ。
この時のポイントは、幾つかある。
バッチ処理をキックする処理はCIツールで代用した方がいいこと。
バッチ処理そのものはストアドでもいいし、Perl/Rubyなどのスクリプト言語で作ってもいいが、CIツールでキックできるようにしておけば、いろんな操作が可能だし、拡張もしやすい。
また、集計バッチ処理もJenkinsのプラグイン、そして一覧表示処理はRedmineのプラグインにしてしまった方がいい。
変にカスタマイズしたフレームワークを作るよりも、JenkinsやRedmineのプラグインにした方がインストールも簡単だし、別の開発者にも流用しやすい。
特にRedmineはRailsで作られているから、Redmine本体のテーブルはそのまま変更せず、集計バッチ用のテーブルを新規に追加する設計にすればいいだろう。
そうすれば、Redmine本体がバージョンアップしても、集計バッチとRedmineのインターフェイス部分だけ修正すればいいので保守コストは大きくないはず。
【元ネタ2】
「リポジトリ」を開くまでSubversion等のリポジトリへのコミットが「活動」に表示されません | Redmine.JP
小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog
Subversion Plugin - Jenkins - Jenkins Wiki
post-commit-hookはチケット駆動開発の発端となった機能だけにとても重要だが、post-commit-hook後にチケットとリビジョン連携の実装方法はいくつかある。
最も簡単な方法は、SCMコミット後に、ユーザがRedmineのリポジトリ画面をリフレッシュするタイミングで、SCM連携すること。
この方法では、開発者が逐一画面を開かないといけないので、運用が面倒な弱点がある。
もう一つの方法は、RedmineのWebサービス機能を使って、SCMコミットをトリガーとしてHTTP経由でSCM連携させること。
この方法なら、開発者がリポジトリ画面をリフレッシュする動作は不要になる。
しかし、SCMコミットの量が大きすぎたりすると、Redmine本体がダウンしてしまう可能性もある。
三つ目の方法は、JenkinsのSVNプラグインのように、CIツールでpost-commit-hookの機能を実施すること。
CIツールを使う利点は、SCM連携させるタイミング(トリガー)をイベントフックにしたり、定期的なタイミング(例えば5分おき)に変えたりできること。
また、バッチ処理化することで、大量データの処理も可能になること。
今後実現して欲しい機能は、RedmineにあるSCM関連のテーブルへデータ移行させるバッチ処理を作って、CIツールでキックするようにしたいこと。
そうすれば、例えば、プロジェクトの途中からRedmineと既存SCMリポジトリを組み合わせて運用したい場合、CIツールでSCMデータをRedmineへあらかじめデータ移行すれば、問題なく運用を開始できる。
また、もしSCMコミットの量が多い場合でも、例えば夜間にCIツールでSCMデータ移行のバッチ処理を実施すればいいだろう。
Redmineでソフトウェア開発のプロジェクト管理を運用していくと、運用対象が大規模組織になるほど、多分、集計バッチ処理のような機能が必要になってくると思う。
集計バッチ処理はとても複雑だが、我々SIが受託開発でやっているバッチ設計と所詮同じだ。
プロジェクト管理の問題をどこまでソフトウェアで解決できるのか、試してみたい。
【追記】
CIツールでSCM連携する場合、トリガーはpost-commit-hookのようなユーザのイベントだけでなく、ポーリングのようにCIツールがイベントを探して検知する方法もある。
CIツールをCron(定期的なタイマー(例:日次・月次))のように扱うだけでなく、ポーリングのように賢いツールが自動検知してくれる方が運用は楽。
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- 管理職に求められる能力はPM理論そのものではなかったのか(2021.01.14)
- カンバンはステータス名が大事(2021.01.02)
- 因果ループ図を再考する~問題の症状をシステム構造として捉えて解決策を見つける(2020.12.25)
- プロジェクトマネージャーの資質として重要なものの一つに『曖昧さへの耐性』がある(2020.12.11)
- ツールで定義したプロセスが組織文化を作り出すのではないか、という仮説(2020.12.05)
「Redmine」カテゴリの記事
- 変更管理プロセスが弱いとトラブルが多い(2021.01.04)
- カンバンはステータス名が大事(2021.01.02)
- RedmineをPJ管理ツールと呼ぶのは嫌いだ、Redmineはチケット管理ツールと呼ぶべきだ(2021.01.02)
- PMO観点でRedmineの使い方とは何か(2020.12.20)
- 若手プロジェクトリーダー向けのRedmine教育資料の構想(2020.12.24)
「ソフトウェア工学」カテゴリの記事
- 因果ループ図を再考する~問題の症状をシステム構造として捉えて解決策を見つける(2020.12.25)
- 第73回 SEA関西プロセス分科会「モデルベースシステムズエンジニアリングの活用」の感想~モデルの検証を形式手法で自動テスト化する(2020.12.13)
- 相殺フィードバックを再考(2020.06.17)
- SaaSのビジネスモデルがアジャイル開発を促進したという仮説(2020.06.14)
- なぜなぜ分析、FMEA、FTAの違い(2020.06.09)
「Git・構成管理」カテゴリの記事
- YoutubeのCCNA講座が秀逸だった(2021.01.04)
- 変更管理プロセスが弱いとトラブルが多い(2021.01.04)
- RedmineでGitのbareリポジトリにアクセスする方法(2020.10.22)
- 第16回東京Redmine勉強会の感想 #redmineT(2019.05.19)
- 第19回Redmine大阪の見所 #redmineosaka(2019.01.26)
「チケット駆動開発」カテゴリの記事
- 変更管理プロセスが弱いとトラブルが多い(2021.01.04)
- カンバンはステータス名が大事(2021.01.02)
- GTDは箱の使い分けが鍵を握る(2020.12.09)
- ツールで定義したプロセスが組織文化を作り出すのではないか、という仮説(2020.12.05)
- チケット管理ツールの用途が変わってきている(2020.10.28)
コメント