Redmineでチケットに投票機能

Redmineでチケット投票機能

現在運用中のRedmineに投票機能が欲しいと思ったのですが、なかなかよさげなPluginがなく、カスタムフィールドを使って実現したので記事にしてみます。

ちなみに、投票するためのプラグインはあるのですが、誰が投票したかがわかるようにしたいので採用しませんでした。

  • 投票者は不明でよい
  • 投票制限かけなくてもよい

などでよければ、プラグインを入れるのが手っ取り早そうですね。

プラグインもリンクだけ紹介しておきます。

実現したいこと

投票機能を実現するにあたり、実現したいことはこんな感じです。

  1. チケットに投票機能をつける
  2. 投票者が分かるようにしたい
  3. 一覧では投票数でソート
  4. 投票されたらSlackで通知

出来れば1人1度のみの投票制限もつけたいところですが断念しました。

利用するプラグイン

実現するにあたり必要なプラグインは下記のとおりです。

作業手順

  1. プラグインをインストール
  2. カスタムフィールドを作成
  3. view customizeで投票ボタンを設置
  4. slackの通知設定

実作業

プラグインのインストールと、Slackの通知設定は省略します。

カスタムフィールドを作成

Redmineにもともと備わっているカスタム機能を利用して投票機能のベースを作ります。

必要な設定は下記の通りです。

  1. 「最短 – 最大長」の最短に0を指定
  2. 「デフォルト値」に0を指定
  3. 「必須」と「フィルタとして使用」にチェック
  4. 投票対象のトラッカーにチェック

「保存」をすれば投票データを保持するための準備が完了です。
チケットにgoodが追加されます。

下記のような条件でカスタムクエリを作っておくと便利です。

カスタムクエリを実行するとこんな感じで表示されます。

view customizeで投票ボタンを設置

このままでも投票自体はできますが、より気軽に投票してもらうためにチケットの詳細画面で下記のように一工夫します。

この投票ボタンは、view customizeを使って実現します。

この投票ボタンを実装するためには、先ほど作成したカスタムフィールドのIDが必要なので、カスタムフィールド一覧から編集画面を開き、URLからIDを取得します。

編集画面からカスタムフィールドのIDを覚えておきます。

view customize で下記のとおり設定します。

Path pattern /issues/[0-9]+
Type JavaScript
Code 下記コードを参照
*私の例ではカスタムフィールドのIDが8です。
適宜修正して使ってください。

*view customizeでは先頭にコメントで説明を入れておくと、一覧画面でなんの設定かがわかってとても便利です。

// 全プロジェクトのチケット詳細
// ・カスタムフィールドの拡張
$(function () {
    if (!$(".cf_8 div").length) {
        return;
    }

    $("#content .contextual:eq(0)").before("<div id='request_vote' style='line-height: 30px;'><a href='javascript: void 0;' style='font-size: 20px;' onclick='update_good(); return false;'>good<img src='/redmine/images/thumbsup.png' style='height: 20px; width: 20px;' ></a></div>");
});

var update_good = function () {
    setTimeout(function() {
        $("#issue_custom_field_values_8").val(parseInt($("#issue_custom_field_values_8").val()) + 1);
        $("#issue-form").submit();
    }, 300);
};

保存をすると、ワンクリックで投票できるボタンがチケットに追加されます。

ここまでの設定で一通り完了です。

Slackへの通知

Redmine Slack プラグインを導入することで、要望へのチケット登録・投票結果をSlackに通知します。

Slackに通知されることで、投票に対する認知度が上がるため活性化を図るのが目的です。
*情報隠しているためわかりづらいですがこんな感じです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする