Redmine で Agile プラグイン( Light 版)を使う


RedmineUP が提供する Redmine プラグインを試しつつ、具体的にどう使ったら良いのか考えてみました。

Redmine を用意する

下記の Docker イメージを使い、お手軽に docker-compose で立ち上げてみます。

redmine - Docker Hub
https://hub.docker.com/_/redmine

上記ページの "Example stack.yml" を参考に
下記の docker-compose.yml を作成しました。

version: '3.1'

services:

  redmine:
    image: redmine
    restart: always
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: example
      REDMINE_SECRET_KEY_BASE: supersecretkey
    volumes:
      - ./:/mnt/host

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: redmine
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

"Example stack.yml" からの変更点は2つです。

  1. 後にプラグインのインストールで使うため docker-compose.yml の親ディレクトリを /mnt/host としてマウント(共有)している
  2. redmine で日本語が使えるよう db に文字コードの設定をしている

docker-compose.yml の親ディレクトリで docker-compose up すると http://localhost:8080 に Redmine が起動します。

※あくまでお試し環境として永続化の設定はしていませんので docker-compose down などすると db のデータもろとも削除されます。

Agile プラグイン( Light 版)をインストールする

プラグインを入手するには RedmineUP へメールアドレスを登録してダウンロードリンクを送ってもらう必要があります。ダウンロード後は次の3ステップでインストールが完了します。

  1. ダウンロードした .zip ファイルを docker-compose.yml の親ディレクトリに置く
  2. redmine コンテナ上で後述のコマンドを実行する
  3. redmine コンテナ を再起動する

ステップ2のコマンドはこちらです。

apt update &&
apt install -y unzip &&
cp /mnt/host/redmine_agile-1_5_3-light.zip plugins/ &&
cd plugins &&
unzip redmine_agile-1_5_3-light.zip &&
cd .. &&
bundle install --without development test --no-deployment &&
bundle exec rake redmine:plugins NAME=redmine_agile RAILS_ENV=production

公式サイトにある下記の手順を参考にしています。

Installing Redmine plugins on Linux | RedmineUP Help & Support | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/installing-redmine-agile-plugin-on-linux

Redmine およびプラグインを設定する

Redmine の管理メニューから次の項目を設定します

ロールと権限

Agile プラグインに関する権限は下記の4つがありますが、インストール直後は管理者ロールにしか許可されていません。管理者以外のロールにも適宜許可してください。1と2は Light 版には無関係に見えますが。

  1. Manage public agile boards
  2. Add agile boards
  3. View agile boards
  4. View agile charts

チケットのステータス

Redmine のデフォルト設定においてチケットのステータスは下記の6種類があります

English 日本語
New 新規
In Progress 進行中
Resolved 解決
Feedback フィードバック(差し戻し)
Closed 終了
Rejected 却下

Agile プラグインのカンバンを用いてスプリント(イテレーション)を回すなら、下記のように2つのステータスを追加すると良さそうです。ステータスは追加するだけでなくワークフローを適宜設定しないと使用できないのでご注意ください。ステータスの並びはカンバンにも反映されるのでそのつもりで並び替えておきましょう。

English 日本語
New 新規
ToDo
In Progress 進行中
Resolved 解決
Feedback フィードバック(差し戻し)
Done
Closed 終了
Rejected 却下

トラッカー、チケットのステータス、ワークフローの設定はスプリントを回しながらチームに最適化させるのが良いのでしょうね。

Agile( プラグイン -> Redmine Agile plugin )

管理メニュー直下に項目が追加されますがプラグイン一覧からも同じ設定画面を開くことができます。

主な設定を紹介します。

Story points

指定したトラッカーに対してカスタムフィールドのようにストーリーポイントを付与できます。
トラッカーは複数選択できます。

Exclude weekends from ideal effort

バーンダウンチャートの理想線を求める際に土日休みを考慮するか設定できます。

Auto assign on move

カンバン上でチケットをドラッグ&ドロップした人がそのチケットの担当者に自動的に設定される機能があります。

Agile 機能を使う

方針・前提

  • マイルストーンの達成は重要だがスプリント個別の進捗目標の達成・未達で一喜一憂しない
  • マイルストーンはバーンダウンチャートで、スプリントはカンバンで進捗を管理する
    • 「管理とは良いか悪いか判断することである」と大学の講義で習いました

プロジェクトを作成する

プロジェクトを作成しチケットの親子関係を使用してWBSを作成します。
プロジェクト毎のモジュールの有効無効の設定で Agile を有効化するとカンバンなどの機能が使えるようになります。

親子関係の例

タスク管理と要件管理を一体化させるのが好ましそうです。

パッケージ ユースケース
エピック ユーザーストーリー

マイルストーンを作成する

対外的なマイルストーン毎にバージョンを作成し、チケットをバージョンに割り当てます。
Agile プラグインがバージョン毎にバーンダウンチャートを生成してくれます。
バーンダウンチャートの縦軸の単位は下記から選択できます。

  • チケット数(デフォルト)
  • ストーリーポイント
  • 作業時間

マイルストーンに対して期日を設定し、チケットに対して期日を設定することはなるべく避けます。

バックログを作成する

プロジェクトの Agile タブを開くとカンバンを開くことができます。
バージョン(=マイルストーン)を参考にチケットを優先度順に並び替えてバックログとします。

  • はじめは全てのチケットのステータスが New のはずなので、優先度の高いチケットから順に ToDo へ移動させます。
  • New から ToDo へ移動させるにあたり、ストーリーポイントが振れる程度には実施内容を検討すると良さそうです。
  • マイルストーンがまだ先のチケットは New に置いたままでも構いませんが、最低でも1スプリント分のチケットは ToDo へ移動させます。
  • 並び順は定期的に見直すべきらしいです。

この優先度順に並び替えられるというのが Agile プラグインの強みです。プラグインがなくてもチケットに対して優先度や期日を設定できますが、同じ優先度や期日のチケットがあると都度判断しなければなりません。

スプリントを計画する

バックログ上で仕切りの役割を果たすダミーのチケットを作成して ToDo に置きます。

  • 最上位のチケットから仕切りまでのチケットがスプリントで消化したいチケットの範囲になります。
  • ダミーでなく「スプリントNリリース」のような実作業のチケットを仕切りとして運用しても良さそうです。
  • 複数の仕切りを置けば先々のスプリントまで計画できますし、仕切りをドラッグ&ドロップで動かすだけでリスケができます。
  • スプリントディバイダーとかゴールバーとかチケットセパレータとか名付けられそうです。
  • 仕切りを2つ設けてストレッチゴールを設定するテクニックも使えます。

スプリントを Redmine のバージョンで表すと言う人もいますが、そうするとバックログから優先度順にスプリントへ切り出して消化する流れを作りにくくありませんか?

ここで提案している使用法の場合、計画においてはまだ先のマイルストーンに属するチケットをフィルターで隠すためにバージョンを使います。バーンダウンチャートも1〜2週間のスプリントよりもっと長いスパンの傾向を見るために使いたいです。スプリントが1ヶ月などと長めの場合や、1〜2週間で本当にチームの外へリリースを行う場合はスプリントを Redmine のバージョンで表すのも良く思えます。

なお Light 版ではフィルターを保存できないのでWikiのリンク、ブックマーク、ブックマークレットでフィルターを保存・共有しましょう。

スプリントを実行する

チケットの進捗に合わせて ToDo の枠から Done の枠までカンバン上でチケットを動かしていきます。

滞留しているチケットがあれば何が終わっていて何が終わっていないのか明確にさせると良さそうです。カンバンのオプションで In status にチェックを入れると何日滞留しているか表示してくれます。また同じく RedmineUP の CheckLists プラグインを使うと子チケットまで作らずとも手軽にチケットをブレイクダウンでき、カンバン上でも表示できます。

チケットを ToDo から進行中へ動かすのを担当者に任せるプル型のチームとするのが良さそうです↓

こんなスクラムには気をつけろ!? – Ryuzee.com
https://www.ryuzee.com/contents/blog/7073

「スクラムマスターがタスクをアサインする」
「スクラムマスターが忙しすぎる」

  • チケットの割り振りで時間使っちゃいますもんね。。。
  • バックログを優先度順に保つことへのプレッシャーになる
  • メンバーの自律を促せそう
  • チケットを動かすと担当者が切り替わるプラグインの機能を活かせる

スプリントを振り返る

Done の枠にあるチケットの量(=生産性、出来高)などを参考に振り返りを行ったら Done の枠にあるチケットのステータスを Closed にします。次のスプリントを計画してから Closed にしても良さそうです。消化できたチケットの実績と照らし合わせながら次はどこまで消化できるか計画できますね。

Pro 版の固有機能

Agile backlog モジュール(Version planning)

バージョンとは別にスプリントでチケットをグループ化できるようになります。バージョンにもスプリントにもドラッグ&ドロップでスプリントに割り当てられるようになります。バージョンとスプリントは独立しており、システム上の親子関係などはありません。スプリントに未割り当てのチケット群がバックログとなり、バックログ内でもスプリント内でも優先度順にドラッグ&ドロップでソートできます。でもせっかくバックログ内でソートしたのに1つ1つドラッグ&ドロップでスプリントに移していくの面倒じゃないですか?

Pro 版ではカンバンがスプリントで必ずフィルターされるようになるようで、スプリントに未割り当ての(=バックログの)チケットはカンバンに表示されません。仕切りチケットを使う緩めの運用はできなくなります。

チャートの種類が増える

下記のようなチャートが使えます。

  • バーンアップチャートが使える
  • チケットのトラッカーやステータスで層別できる
  • ベロシティやリードタイムのスコアをグラフ化できる

Light 版でこのようなグラフが見たい場合は Metabase などで頑張りましょう。

Agile Charts | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/agile-charts

カンバンのフルスクリーン表示

カンバンを大きく表示できます。
サイドバーを隠せるように設定してあれば Light 版でも大きく表示できます。

Fullscreen mode | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/fullscreen-mode

カンバン上でのチケット編集

通常のチケット一覧と同様にカンバン上のチケットを右クリックすると編集メニューが現れます。
カンバン上でチケットの追加もできますが、タイトルしか入力はできません。そして Agile backlog モジュールによるスプリントフィルターが働いてしまうので追加したチケットは即非表示になってしまいます。。。

On board editing | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/on-board-editing

カンバンの保存

チケット一覧でクエリを保存する要領で、カンバンで設定したフィルターを保存できます。

Saving boards | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/saving-boards

カンバン上でステータスを階層化する

ステータスの名前を 親状態: 子状態 のようにするとカンバン上では階層表示されます。

Subcolumns | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/subcolumns

カンバンを上下に分割する

チケット一覧でのオプションのグループ条件に近い機能です。
下記のいずれかの要素でカンバンを分割表示できます。
これは使いたくなりそう。

  • プロジェクト
  • トラッカー
  • 優先度
  • 作成者
  • カテゴリ
  • 対象バージョン
  • 親チケット
  • 担当者

Swimlanes | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/swimlanes

各ステータスに存在するチケットの数に上限を設ける

進行中の(着手したけど完了していない)チケットが増加するのは不健全な状態として、システムとして制限することができます。

Work in progress limits | RedmineUP Help | Agile plugin documentation
https://www.redmineup.com/pages/help/agile/work-in-progress

チケットの色分け

トラッカーなどで色分けができます。

Pro 版まとめ

スプリントのあり方がシステムとして固定されてしまうのでそれが気にいるなら Pro 版が良さそうです。それが気に入らず、カンバンの上下分割やチケットの色分けといったちょっと気の利いた機能は欲しいけど運用は自分で工夫したい場合は Light 版で充分に幸せかもしれません。