Warning: include_once(/home/redminepower/www/product/wp-content/plugins/rich-table-of-content/include/rtoc_edit.php): failed to open stream: No such file or directory in /home/redminepower/www/product/wp-content/plugins/rich-table-of-content/functions.php on line 167

Warning: include_once(): Failed opening '/home/redminepower/www/product/wp-content/plugins/rich-table-of-content/include/rtoc_edit.php' for inclusion (include_path='.:/usr/local/php/7.4/lib/php') in /home/redminepower/www/product/wp-content/plugins/rich-table-of-content/functions.php on line 167

Warning: session_start(): Cannot start session when headers already sent in /home/redminepower/www/product/wp-content/themes/jinr/functions.php on line 971

Warning: session_regenerate_id(): Cannot regenerate session id - session is not active in /home/redminepower/www/product/wp-content/themes/jinr/functions.php on line 972

Warning: Cannot modify header information - headers already sent by (output started at /home/redminepower/www/product/wp-content/plugins/rich-table-of-content/functions.php:167) in /home/redminepower/www/product/wp-includes/feed-rss2.php on line 8
Redmine Powerが提供するプラグイン https://www.redmine-power.com Fri, 10 May 2024 07:29:27 +0000 ja hourly 1 https://wordpress.org/?v=6.8 https://www.redmine-power.com/wp-content/uploads/2022/12/cropped-TimePuncher_Icon-32x32.png Redmine Powerが提供するプラグイン https://www.redmine-power.com 32 32 redmine_reply_button プラグイン 解説 https://www.redmine-power.com/plugins/reply_button/ https://www.redmine-power.com/plugins/reply_button/#respond Mon, 17 Jan 2022 06:53:00 +0000 https://www.redmine-power.com/?p=1335 はじめに


Redmineのプラグイン「redmine_reply_button」の解説です。
このプラグインにより、最終更新者を担当者として編集を開始できる「返答」ボタンを追加することができます。これによりチケット上でのやり取りが一段とやりやすくなると思います!

ダウンロードはこちらからどうぞ。

以降では、チケット駆動開発の特徴の一つである「チケット上でのやり取り」について簡単におさらいをしてから、具体的なプラグインの設定方法の解説を行っていきます。

是非、最後までご覧ください。

やり取りはメールではなくチケットで

チケット駆動開発の特徴の一つに「チケット上でやり取りを行う」というものがあります。

例えば、コードレビューにおいて、以下のようなやり取りがあったとしましょう。

Aさん
Aさん

以下の処理は、なぜ while を使っているのですか?

while (true)
{
    var item = items[i] as AppointmentItem;
開催者
開催者

ホントは foreach を使っていたのですが、OutOfMemory が発生して処理に失敗することがあったので、やむなく while を使用しました。

Aさん
Aさん

そうだったのですね、了解です。
では、コードにその旨をコメントしておいてもらってもいいですか?

開催者
開催者

承知しました。
以下のように追記しておいたのでご確認ください。

Aさん
Aさん

確認しました。
対応ありがとうございます。

チケット駆動開発においては、このようなやり取りをメールやチャットで行うのではなく、以下のようにチケット上で担当者を切り替えながら実施します。

最初の指摘は、このように指摘チケットとして作成されます。その後、以下のように担当者を切り替えながら、やり取りを進めていきます。(チケット上でのやり取りを使った『チケット駆動』のレビュー作業についてはこちらをご覧ください。)

このようにチケット上で担当者を切り替えながら、やり取りを行うと以下のような利点があります。

  • 誰がボールを持っているか明確
    • チケットの担当者やステータスを確認すれば、そのやり取りが現在「誰で止まっているのか?」ということが一目でわかります。自分の未完了のチケットとなるのでユーザにとっても意識しやすいですし、朝会などで別途ピックアップすることも可能です。またチケットなのでやり取り全体の期限や、相手に回答してほしい期日を設けることも可能です。
  • 表現能力が高い
    • 一つ一つのやり取りをチケットのコメントで行うことで、テキストだけでなく、表や画像、Gifアニメ、外部サイトへのリンクなどを使用でき、非常に自由度が高く柔軟な表現が可能です。また、Redmineのコメント特有の利点としては、他のチケットへのリンクやバージョン管理システムと連動による成果物との紐づけが容易である点も挙げられるでしょう。
  • 情報がすべてチケットに記録される
    • 議論に参加した人や発言の内容を含め、結論に至るまでのすべてのやり取りの過程がチケットに記録されます。これによりメールやチャットで行った場合に比べて、やり取りが埋もれてしまうということがありません。また、これらの情報はチケットを参照できるメンバーであれば、誰でも確認することができます。そのため、共有や振り返りもスムーズに行うことができるでしょう。

プラグイン「redmine_reply_button」の強み

このように「チケット上でやり取りを行う」ことで大きな利点が得られるのですが、反面、若干の煩雑さもあります。それの相手に返答する際に、毎回、相手をチケットの担当者に設定しないといけないという点です。小さなプロジェクトではさほど気にならないかもしれませんが、プロジェクトが大きくなり、関係者が何十人といる中から毎回相手を選択するのはかなり面倒でしょう。

そこで、「redmine_reply_button」の出番というわけです。
これを使えば、担当者を相手に変更した状態でチケットの編集を開始できる「返答」ボタンが追加されるようになります。これにより一覧から相手を選ぶ必要はなくなり、手間を減らせるというわけです。

以降ではその具体的な設定方法を見ていきましょう。

やりかた

プラグインのインストール

Redmineのプラグインのフォルダにredmine_reply_buttonを配置して、Redmineを再起動してください。以下のようなコマンドで実行することができます。

$ cd /var/lib/redmine/plugins
$ git clone https://github.com/RedminePower/redmine_reply_button.git
$ httpd -k restart

設定の方法

インストールが成功するとプロジェクトの設定画面の [プロジェクト]-[モジュール] の項目に「Reply button」のチェックが表示されるようになります。「返答」ボタンを有効にしたい場合、チェックを入れてください。

これによりチケットのページに「返答」ボタンが表示されるようになります。「返答」ボタンからチケットの編集を開始すると、「最終更新者」が「担当者」に設定された状態で編集を開始することができます。

最後に更新したのがAさんなので「担当者」がAさんに変更された状態で編集を開始します

さいごに

以上でプラグイン「redmine_reply_button」の解説は終了です。

いかがでしたでしょうか?

ちょっと言葉だけだとイメージが付きにくいかもしれないので、導入の手順も簡単ですし、是非お試しください。

また、この「チケット上でのやり取り」を基本とした Redmine Studio と連携することで実施する『チケット駆動』のレビュー作業についても解説を行っています。 Redmine Studio を使うことでレビュー用のチケットの作成がとても簡単に行えるので、是非お試しください!

]]>
https://www.redmine-power.com/plugins/reply_button/feed/ 0
redmine_date_independent プラグイン 解説 https://www.redmine-power.com/plugins/date_independent/ https://www.redmine-power.com/plugins/date_independent/#respond Sat, 08 Jan 2022 23:09:00 +0000 https://www.redmine-power.com/?p=1289 はじめに


Redmineのプラグイン「redmine_date_independent」の解説です。
このプラグインにより「親チケットの値の算出方法」の期日に関する連動設定をプロジェクトやステータスごとに設定することが可能になります。

ダウンロードはこちらからどうぞ。

以降では、期日の連動設定を使い分ける必要性について説明した上で、具体的なプラグインの設定方法を解説していきます。

是非、最後までお付き合いください。

チケットの親子関係の役割の違い

親チケットと子チケットの関係性に注目して整理していきたいと思います。通常、作業を親チケットと子チケットに分けて表現した場合、そこには包含関係があると思いますが、厳密には以下の2種類の分け方ができるでしょう。

  • WBS方式(Work Breakdown Structure)
    • WBSとは「一つの作業(Work)を複数の詳細なタスクに分割(Breakdown)し、構造化(Structure)する」という意味です。
    • WBS方式では、全体の作業を表す親チケットに対して、作業を詳細に分割し子チケットとして追加していきます。この時、親チケットの作業を子チケットが過不足なく分割していることが重要です。
    • この場合、子チケットと親チケットは連動します。例えば、子チケットは親チケットの作業を分割したものなので、子チケットがすべて終了すれば、親チケットも自動的に終了ですし、子チケットの期限が変化したら、自動的に親チケットの期限も変化することになります。
  • ToDo方式
    • ToDo方式では、WBSの場合と違い、もっとラフに子チケットの追加を行います。例えば、特定の作業をやり忘れないために子チケットを作ったり、慎重に議論が必要そうなトピックがあったため子チケットとして抜き出す、といった感じです。
    • この場合、子チケットの作業は親チケットの作業の一部ではありますが、子チケットは親チケットの作業内容を過不足なく分割したものではないため、子チケットと親チケットは連動しません。例えば、失念防止のため子チケットにしていたものが完了したからと言って、親チケットは終了できませんし、その子チケットの期限と親チケットの期限は別個に扱う必要があります。

WBS方式とToDo方式の違いを具体例で見てみましょう。

たとえば、新規の開発は「機能仕様」「設計」「実装」「テスト」という4つの工程を踏まなければならないと定められているとします。ここで「Basic認証対応」という新規の案件があったとすると、以下のようなチケットが作られることになるでしょう。

ここで「#1347 Basic認証対応」とそれぞれの「機能仕様」「設計」「実装」「テスト」のチケットの関係はWBS方式になっています。つまり、「テスト」まで終了すれば「Basic認証対応」は完了ですし、「テスト」の期日が伸びてしまうと、「Basic認証対応」の期日も自動的に伸びてしまいます。

では、ここで「機能仕様」の検討中に「実装方法について〇〇部署に確認する必要がある」という意見が上がったため、忘れないよう「#1349 設計」の子チケットとして「#1352 〇〇部署への確認」というチケットを作ったとします。

この場合、「#1349 設計」と「#1352 〇〇部署への確認」の関係はToDo方式となっています。なので、「設計」を完了するまでに「〇〇部署への確認」を行う必要はありますが、「〇〇部署への確認」が完了しても「設計」が完了するわけではありませんし、期日も別のものとなるでしょう。

プラグイン「redmine_date_independent」の強み

このように一つの案件の中でも親チケットと子チケットを「連動させたい(=WBS方式)」場合と「連動させたくない(=ToDo方式)」場合が混在することがよくあると思います。しかし、Redmineの設定では「子チケットの値から算出(=連動させたい)」か「子チケットから独立(=連動させたくない)」のどちらか一方を選択する必要があり、この設定はプロジェクトやトラッカーに関わらず、すべてのチケットに一律に適用されます。

管理画面を開いて [設定]-[チケットトラッキング] で確認可能

つまり、設定で「子チケットの値から算出(=連動させたい)」となっていると、先ほどの「〇〇部署への確認」のような子チケットの追加はできません。逆に、「子チケットから独立(=連動させたくない)」が選択されていると、子チケットの期日の変化に対して、手作業でそれを親チケットに反映する必要が出てきて、煩わしく感じる場面もあるでしょう。

そこで、「redmine_date_independent」の出番というわけです。
これを使えば「親チケットの値の算出方法」をプロジェクトやステータスに応じて柔軟に設定することができるようになります。

以降ではその具体的な設定方法を見ていきましょう。

やりかた

プラグインのインストール

Redmineのプラグインのフォルダにredmine_date_independentを配置して、DBのマイグレーションを行った後、Redmineを再起動してください。以下のようなコマンドで実行することができます。

$ cd /var/lib/redmine/plugins
$ git clone https://github.com/RedminePower/redmine_date_independent.git
$ bundle exec rake redmine:plugins:migrate NAME=redmine_date_independent RAILS_ENV=production
$ httpd -k restart

設定の方法

インストールが成功すると管理画面に「開始日/期日の独立」という項目が表示されます。ここから「親チケットの値の算出方法」を細かく設定するための設定を追加してください。

「新しい開始日/期日の独立」をクリックすると「開始日/期日の独立」の追加画面を開くことができます。本プラグインでは、全体の設定として「開始日/期日」が「子チケットの値から算出(=連動させたい)」が設定されていることを想定しています。そして、そこに個別に「子チケットから独立(=連動させたくない)」のプロジェクトを追加していく、という形で設定を行っていきます。

各項目の設定が完了したら「作成」をクリックして「開始日/期日の独立」の設定を追加してください。

  • 有効
    • チェックを外すと本設定が動作しなくなります。設定は削除したくないが一旦無効にしたい、といった場合にお使いください。
  • 対象プロジェクト
    • 対象とするプロジェクトの識別子を指定して下さい。指定されたプロジェクトでは、「開始日/期日」が「子チケットから独立」に設定されます。また、正規表現で使って指定することができます。同じ設定を複数のプロジェクトで使いたい場合などにご活用ください。
  • 適用しないステータス
    • 対象外とするステータスを設定してください。設定されたステータスを持つチケットは、上記のプロジェクトのチケットであったとしても、「開始日/期日」が「子チケットの値から算出」に設定され、子チケットに連動するようになります。
    • 「子チケット連動」のような“個別の期日を持たず子チケットの期日に連動する”ことを表すステータスを追加しておくと便利です。
  • プロジェクトの識別子
    • プロジェクトの設定ページで確認できる「識別子」です。プロジェクトの名称とは異なるのでご注意ください。

さいごに

以上でプラグイン「redmine_date_independent」の解説は終了です。

いかがでしたでしょうか?
機能としてはそこまで複雑ではないのですが、文章で説明するとなると少し長くなってしまいましたね。

チケット駆動開発においては、親チケットと連動させたい場面、させたくない画面、その両方が必ず出てくると思います。しかし、設定がすべてのチケットに一律に適用されるため、安易に変更はできないと断られる。その言い分も十分理解できますが、やっぱりもどかしいですよね。

このプラグインがそんな悩みを抱えた人の一助になれば幸いです!

今回は期日についてのお話でしたが、Redmine Powerでは『子チケットがすべて終了したら、親チケットを終了する』プラグイン(redmine_auto_close)も提供しています。
是非そちらもお試しください!

]]>
https://www.redmine-power.com/plugins/date_independent/feed/ 0