[ Redmine index ]

Redmine運用メモ

Redmineを、単なるバグ管理システムとしてではなく、開発作業(いわゆるチケット駆動開発)に使った経験から思うところをメモに残すページ。

前提

運用メモ

チケット管理に関する運用

チーム管理者(作業場所には常駐してない)がチーム各員から進捗状況を逐一ヒアリングすることなく、作業状況をRedmineを見れば調べられる仕組みを作りたい

背景

やったこと

検討・考察

いつまでも完了しないチケットでゴミ溜めにならないようにしたい

背景

やったこと

できなかったこと

チケットに成果を書いてしまわないようにしたい

背景

やったこと

できなかったこと

不具合管理に関する運用

不具合一覧をExcelで見たい

背景

やったこと

できなかったこと

不具合のステータス

基本フローの運用

Redmineのデフォルトのステータスは、トラッカー「バグ」については、基本フローは「新規」→「進行中」→「解決」→「終了」となる。

一般的な運用は次のようになるだろう。

承認制度があるならステータスを追加

古くから、不具合(バグ)チケットのステータスについてはいろいろな考え方がある。多くは、レビュー(承認)制度に影響されるので、組織のルール(実体)によって決めることになる。

組織のルールがRedmineのデフォルトのワークフローと合わない場合、ワークフローを新たに定義する。例えば、バグの解決は開発リーダーの承認が必須、という組織では、「新規」→「進行中」→「承認待ち」→「解決」→「終了」とするなど。

開発リーダーに加え、品質リーダーの承認も必要となれば、「新規」→「進行中」→「開発承認待ち」→「解決」→「品質承認待ち」→「終了」とするなど。

意見

ワークフローを考えるとき、「しっかり作らないと」と意気込んで、凝った厳格なワークフローを作ってしまいがちである。しかし、実際現場で運用すると、ワークフローを考えたときには想定していないいろいろな事情による逸脱が必要になる。これに対してルール厳守の原則主義で臨み、それら事情を排除してしまっては本来の目的である円滑な不具合処置の運用から外れてしまう。承認ルーチンも、承認権限を持つリーダーが忙し過ぎれば不具合処置が承認で滞り、プロジェクトの最適な状態である不具合が速やかに処置される状態と反対の状況を招いてしまう。

ワークフローを考案する場合、「あったほうがよいだろう」というステータスは大抵なくても問題ない。「なくては困る」というものをワークフローに取り入れるのがよい。

構成管理に関する運用

仕様書(機能定義文書)をバージョン管理下におきチケットで作業管理

背景

ソフトウェア開発対象機能がなかなか明確に定まらなく、また定めたことが後で違ったことが判明するなどの手戻りが多かった。また、開発が進んで不明点が出て仕様を確認すると、曖昧だった/考えてなかった、といったこともあった。

やったこと

仕様書の位置づけとして機能定義を文書化し、バージョン管理ツールに置いた。そして、機能定義について不明点、指摘事項を開発者からチケットとして挙げてもらった。それに対して順次機能定義文書を修正してコミットしチケットをクローズすることで残量がチケット件数で把握できるようにした。ただし、チケットは時間とともに発生し続け、いわゆるバーンダウンチャートのような右下がりにはならなかった。

この運用によって機能定義が連日修正され続けることになり、ソフトウェア開発側で追従しきれず悲鳴が上がった。そこで、Redmineのバージョン機能とSubversionのブランチを使って、機能定義をブランチし、既存機能の明確化/微修正は現行バージョンで、新機能や既存機能の大幅修正はブランチに反映した。

Redmineのバージョンアップ(データ移行)

Redmineはオープンソース製品であり、ユーザーニーズを受けて日々開発が行われ、新しいバージョンが時折登場する。新機能はぜひ使いたいところだけれど、トラブルなくバージョンをあげられるか不安ではある。

そこで、バージョンアップを容易にすること、阻害することを整理して蓄積しておきたい。

プラグインを伴うバージョンアップ

経験的に、バージョンアップで起きたトラブルの過半数が、プラグインに伴うものであった。Redmine本体のバージョンアップと、プラグイン側の対応には当然タイムラグがある。また、Redmine側のバージョンアップがプラグインの動作を阻害するかどうかということもある。現状は各プラグイン開発側で確認よろしく、というものである。

プラグインによるバージョンアップトラブルの一例は、あるプラグインがデータベースを変更(既存テーブルにカラムを追加)し、そのプラグインが新しいRedmineバージョンに対応してないため入れなかったが、プラグインの正式な削除手順を踏んでいないためデータベースの変更が残ったままとなり、それが原因でエラーになる(例えば、追加カラムがNOT NULL制約で、プラグインがない場合そのカラムにデータをインサートすることはないためNOT NULL制約違反画発生した)。

そこで、現実的なプラクティスは、

のどちらかとなるでしょう。

前者は、バージョンアップをしばらく見合わせることになるので不満が残る。結局、後者の手段をとることになる。

以下、大まかな手順を示す。

ということで、Redmine本体のバージョンアップに追従したいなら、プラグインは極力少なくするのが良策。

Redmine所感

Wiki機能

ページの階層化は便利

RedmineのWikiページは、PukiWikiやTrac Wikiのようにページ名にスラッシュ'/'を含めることで階層化を表現するのではなく、関連付け(親ページを指定)で階層化する。Wikiは思いついたらページを作成し、あとで構造を整理するやり方がWikiのメリットだ。そのため、あとで整理するときにページ階層を移動させることが頻繁にある。RedmineのWikiでは、該当ページの設定で親を変更する。ページ名に階層が含まれていないので他のページのWikiリンクが切れる心配などもない。パンくずリストも親ページを指定すれば自動で変更される。

改行が改行になる

RedmineのWiki記法では、改行がそのまま改行で扱われる。他のWikiは、HTMLの段落やTeXのパラグラフのように、ソーステキスト上の改行は表示上の改行にはならない。この振る舞いについては賛否両論だろうが、日本語を入力する場合はうれしい振る舞いである。Wikiの記法を知らなくても、ほぼ入力した形で表示される。

構成管理(変更管理)したいドキュメント(仕様書)はWikiに書かない

Wikiは、随時変更が可能なので、徐々に発展させていくドキュメントには向いている。ということは、その逆に仕様書のように正式な資料(変更する場合、変更内容をきちっと周知が必要)はWikiには向かない。かってに変更した、いつの間にか変わっていた、などの問題に波及する。構成管理したい文書はリポジトリに置き、変更理由が生じたらチケットを作成し、修正/レビュー/完了が分かるようにする。

フォーラム機能

フォーラム機能の使用アイデア

今一つ使い方に悩むフォーラム機能であるが、いくつか使用例をメモ。

日誌

個人日誌用にフォーラムを作成し、各個人ごとにメッセージを作成。各日の日誌は、返答で作成、その際題名を年月日にしておくと後から参照しやすい。

普通三日坊主になるので9割方不要な心配だが、長くなってきたら、メッセージを新しく作ってもいいかと思う。

息の長い作業

チケットは、長くても1週間くらいで完結する1つの作業を切り出し、完了したチケットは後から見ることは稀なので、アクセス性はそれほどよくない。そこで、半年以上のスパンで継続する作業があれば、Wikiでもいいがフォーラムを使うのもよい。特に経緯を残したい作業は、Wikiよりフォーラムがよい。

物品管理

息の長い作業の例として、物品の貸借管理が挙げられる。経緯が残るので、フォーラムが向いているかと。

アドミニストレータ管理

インフラとなるマシン、ユーザーアカウントなどの作業を記録するのに、チケットが億劫であればフォーラムでも代替えできるかもしれない。ただ、こちらは管理プロジェクトを作ってチケット管理した方がよい気がする。

技術調査

技術調査は最終報告はWikiに上げるが、調査作業が進行している間の記録をフォーラムに残すとよい。技術調査は結果以上に過程が大事だったりする。チケットの場合、結果が出れば過程は捨ててもよいものに適する。

メールの経緯

ある議題で何回もメールのやり取りをするとき、そのメールをフォーラムに残しておくとよい。

Q&A

掲示板に近い運用なので、Q&Aとして使うとよい。

定例な会議実施

会議の開催、議題、議事進行、会議後のアクションなどをフォーラムで行う。会議形態(会議体)の名称でフォーラムを1つ作成し、各会議毎にメッセージを1つ作成、そのメッセージにおいて開催連絡、議題の事前記載、議事録、議事後のアクションを返答で随時追記していく。

統合性

Redmineが、他のBTS(Bug Tracking System)と違う一つの特色が、「情報共有サイト」としての機能を統合している点。

チケット/ワークフロー機能でバグ管理・タスク管理を行い、Wiki/フォーラム/ニュース機能で情報共有を行い、文書/ファイル機能でファイル共有を行うほか、バージョン管理ツールとの連携、ビルドツール(jenkins)との連携などがある。また、REST APIによる外部からRedmine機能を利用するインタフェースも提供しているので、他のツールとの連携もしやすい。

プロジェクトインフラを整える立場として、この統合性は高く評価したい。