Redmineを4-5年運用している中で挙がってきた細かな要望と対応について

本記事は 私(@iwadara) が Redmine を4-5年運用している中で挙がってきた細かな要望に対して、どのような対応策を講じたかを列挙する。
対応内容自体は Web 上で紹介されているレベルの平易な内容であり、Redmine 導入をし始めた初級〜中級管理者における解決案の 1 つとして眺めてもらえれば幸いである。

# はじめに

本記事で紹介する内容に対する Redmine 運用環境は次の通り。

- [Redmineバージョン] 3.1.0
- [運用期間] 4-5年
- [利用規模] 200-300人規模
- [サーバ環境] 社内で閉じたオンプレ環境、OS:CentOS7
- [想定ブラウザ] Firefox、Chrome、**IE 11**

# ポリシー

Redmineバージョンアップに安全かつスピーディーに追従していくため、安易にプラグインを導入したり、コード変更を行うのではなく、以下の順序で対応検討を行うこととする。

(1) 運用や利用方法の工夫により対応(回避)可能か
(2) View Customize プラグインのカスタマイズで対応可能か(*1)
(3) プラグイン導入で対応可能か(*2)
(4) プラグイン導入+プラグインコード変更で対応可能か
(5) Redmineコード変更で対応可能か

課題の重要度が低い場合は (3) (4) (5) の検討に着手せず、対応を見送るケースもあった。

　(*1) View Customize プラグインの基本的な説明は[こちら](https://www.slideshare.net/onozaty/view-customize-plugin)
　(*2) 現在のRedmineのメジャーバージョン(例えば、3.x)に対応しているか、今後も継続して追従対応されそうか、も判断基準となる

# 具体的課題とやったこと

(以降、次の例のように表記していく)
### [要望n-m] 例: 〇〇したい要望が挙がった

* [対応策] △△という対応を実施した
* [参考URL] http://〜 (現状 "なし" の箇所も適宜メンテして更新する可能性有)

## (2) View Customize プラグインでの対応

### [要望2-1] ある特定のカスタムフィールドを 2 項目分横幅拡張したい

* [対応策] 特定のカスタムフィールドに対して、 2 項目分横幅拡張する対応を実施した、しかし、Redmine 3.4.0 では標準対応しているため、今後 Redmine VerUP したら本対応は削除予定
* [参考URL] [Redmine カスタムフィールドの幅を大きくしたり、移動したりする](https://qiita.com/sioaji/items/e795ba158856cd84ffef)

### [要望2-2] ステータス変更と連動して進捗率変更してほしい

* [対応策] 前者の要望は以前は Issue Extension プラグインで実現していたが、View Customize で実現できる紹介があったことから、プラグイン依存を減らすために置き換えた
* [参考URL] [Redmineのプラグイン「view customize plugin」のカスタマイズ例 - ステータス変更と連動して進捗率を変更](https://qiita.com/wfigo7/items/f13a89e1d3522f4a73b6)

### [要望2-3] カスタムフィールド:責任者(ユーザー) にも選択肢 <<自分>> を使えるようにしてほしい

* [対応策] 担当者フィールドは <<自分>> が選択可能だが、ユーザーカスタムフィールドでは標準対応されていない、参考 URL により、ユーザーカスタムフィールドでも <<自分>> が使えるという紹介があったため追加対応した
* [参考URL] [Redmineのカスタムフィールド：ユーザで、自分自身を選択しやすくする(View customize plugin)](http://blog.enjoyxstudy.com/entry/2016/01/17/000000)

### [要望2-4] あるカスタムフィールド(リスト選択)は新しいチケット作成時にすべて選択されていることをデフォルトとしたい

* [対応策] 対象のカスタムフィールドに以下を追加した(Type:JavaScript)

```javascript:ViewCustomize
$('#issue_custom_field_values_xx option').prop('selected', true);
```

* [参考URL] なし

### [要望2-5] Redmine の外部リンクから Referrer 情報を削除したい(どちらかと言うと Redmine 管理者観点での要望)

* [対応策] [参考URL] の情報だと、Firefox / Chrome はうまく Referrerが削除がされたが、IE だとエラーに落ちて Referrer が削除されなかったため、別のアプローチ(external リンクに noreferer を付ける)で解決した(Type:JavaScript)

```javascript:ViewCustomize
$('a.external').attr('rel', 'noreferrer');
```

* **[2018/01/21 追記]** @crosspointst さんの環境(HTTPS)だとうまく Referrer　が削除されなかったそうで、以下の設定を行うことで対応できたそうです。情報ありがとうございました。

```javascript:ViewCustomize
$('a.external').attr('referrerpolicy', 'no-referrer');
```

* [参考URL] [Redmineの外部リンクからReferrer情報を削除する方法](https://colo-ri.jp/develop/2017/02/redmine-remove-referrer.html)

### [要望2-6] 表示しているチケットの子チケット群をガントチャート表示したい

* [対応策] 表示しているチケットの子チケット一覧セクション内から、該当チケットを親チケットとしてクエリ設定したガントチャート画面を表示できる URL を作成、リンクとして飛べるようにした(Type:JavaScript)
* [参考URL] なし

### [要望2-7] チケットにはコピーボタンがあるが、フォーラムでもコピーしたい(議事録の複製やテンプレート文言の流用に利用したい)

* [対応策] 今のところ、フォーラムのコピー機能はサポートされていないため、フォーラムでなく、チケット化してもらうよう運用で回避中
* [参考URL] なし

### [要望2-8] 担当者欄を素早く選択できるようにしてほしい

* [対応策] Redmine 4.x 系で搭載予定のインクリメンタルサーチの情報があったため試してみている、(IE だけかもしれないが) 担当者欄をクリックしても一覧表示にならず、何か 1 文字打つと一覧表示が始まるため、導入を一旦保留中(だが気になっている)
* [参考URL1] [担当者欄にインクリメンタルサーチをつける(元記事)](http://blog.enjoyxstudy.com/entry/2017/12/05/000000)
* [参考URL2] [担当者欄にインクリメンタルサーチをつける(focus、スクロールバー追加)] (https://qiita.com/yas_pers/items/3009fec8866c799920bf)
* **[2018/01/06 追記]** 本記事に目を通していただいた @yas_pers さんより、[参考URL2] の記事の紹介がありました、これでクリックした上で一覧表示(かつスクロールバー付ではみ出ない)にできそうです、ありがとうございます

### [要望2-9] チケットのウォッチャー選択画面で名前で絞り込みすると絞り込み前にチェックしたユーザーのチェックが外れてしまう点を修正してほしい

* [対応策] View Customize で解決している記事を見かけた記憶があり、再度探しているがまだ見つかっていない
* **[2018/04/18 追記]** 見つけました、以下の記事に対応方法の記載があります → [「ウォッチャーの追加」ダイアログで検索キーワードを変えるとチェックが外れるのに対処](https://qiita.com/ayweak/items/e32335423c5765c20f96)

## (3) プラグイン導入での対応

### [要望3-1] スクリーンショットから直接チケットに貼り付けたい

* [対応策] Clipboard Image Paste プラグインを導入
* [参考URL] https://github.com/peclik/clipboard_image_paste

### [要望3-2] UML図をチケットまたはWikiに表現したい

* [対応策] PlantUML プラグインの導入、Wiki に UML 記述すると履歴画面で UML の変遷が Diff 表示できるため楽に構成管理が可能
* [参考URL] [RedmineのWikiでUMLを記述する方法](https://qiita.com/mima_ita/items/fd556aef74fe9252457d)

### [要望3-3] 最近導入されたプラグインや機能拡張情報をメール以外でもアナウンスしてほしい

* [対応策] Banner プラグインの導入、アナウンスバナーにより機能拡張やメンテナンスアナウンスが伝わりやすくなった、またいつどんなアナウンスをしていたかは別途 Wiki ページに履歴として残しておく運用としている
* [参考URL] https://github.com/akiko-pusu/redmine_banner

### [要望3-4] バーンダウンチャートやチケット消化率、カテゴリ別の集計を楽にグラフ集計したい

* [対応策] Charts2 プラグインの導入、「プラグイン導入に若干手間がかかる」「新しい Redmine バージョンへの追従は若干遅い」「期待する出力にならずに崩れることもある」といった点を抱えてはいるが、Redmine でできる可能性を紹介する場合に本プラグインは有用である
* [参考URL] https://github.com/pharmazone/redmine_charts2

### [要望3-5] チケットクローズ条件をいくつかのチェック条件に分けて決めて管理したい、ただし子チケット分割はあまりしたくない

* [対応策] Checklists(Light version) プラグインの導入、メールアドレス登録が必要、当初はチェックボックスと進捗率と同期するのは心配だったが、メリットの方が大きそうなため、最近進捗率を同期するように設定変更した
* [参考URL] https://www.redmineup.com/pages/plugins/checklists

### [要望3-6] Redmine 管理者でなくとも導入されているプラグインの情報が知りたい

* [対応策] Information プラグインの導入、一部メニューはサーバーエラーに落ちるため、プラグインソース変更して一部メニューをマスクしている
* [参考URL] https://www.r-labs.org/projects/rp-admin-reports/wiki

### [要望3-7] チケット一覧画面でチケットの親子関係をツリー状に表示させたい

* [対応策] Issues Tree プラグインの導入、ただし 1 プロジェクトのチケット数が 1000 超えたあたりから利用する度に少しもたつく感じとなるため、あくまで軽い参照利用程度
* [参考URL] https://github.com/Loriowar/redmine_issues_tree

### [要望3-8] Jenkins のビルド結果を (Jenkins を見なくても) Redmine から確認したい

* [対応策] Jenkins プラグインの導入、プラグイン名称は Hudson のままとなっているが利用可能
* [参考URL] https://www.r-labs.org/projects/r-labs/wiki/Hudson

### [要望3-9] ボタン 1 つで文字色を赤色にしたり、現在日時を入力できるようにしたい

* [対応策] jsToolbar、jsToolbar buttons プラグインの導入、導入に際しては以下の @netazone さんのスライドが参考になる
* [参考URL] https://www.slideshare.net/netazone/redmine-59135954

### [要望3-10] 画像をクリックしてもページ遷移することなく、ポップアップ表示できるようにしてほしい

* [対応策] Lightbox2 プラグインの導入、プラグインページにマニュアルがあるが、Redmine 3.1.0 といった少し古いバージョンだとプラグイン側も古いバージョンにあわせる必要があるので注意
* [参考URL] https://github.com/paginagmbh/redmine_lightbox2

### [要望3-11] チケット更新者をアイコン表示できるようにするなど、視認性を上げてほしい

* [対応策] Local Avatars プラグインの導入、Gravater は社内利用向きでないため、ローカルで画像をアップロードできるように
* [参考URL] https://github.com/ncoders/redmine_local_avatars

### [要望3-12] チケット更新時の通知メールを Redmine 固定でなく、チケット更新者にしてほしい

* [対応策] Mail From プラグインの導入、**From: ピンク ピン太郎 &lt;pink.pintaro@xxx.jp&gt;** としたい場合には From 設定を以下とすることで所望の動作となった

```text
%l %f <%m>
```

* [参考URL] https://github.com/taqueci/redmine_mail_from

### [要望3-13] Wiki ページにプロジェクト固有のスタイルシートを設定したり、コメント欄やアクセスカウンタ、人気のページを追加表示したい

* [対応策] Wiki Extensions プラグインの導入
* [参考URL] https://github.com/haru/redmine_wiki_extensions

### [要望3-14] 特定のクエリ検索結果をチケット、Wiki、フォーラムに常に表示できるようにしたい(進捗確認打ち合わせ時やプロジェクトのポータルページとして状況把握をしやすくしたい)

* [対応策] Wiki Lists プラグインの導入、表示のソート順も制御したい場合、ソート順設定済みのカスタムクエリを事前に用意し、-i  オプションで指定することで所望の指定が可能
* [参考URL] https://github.com/tkusukawa/redmine_wiki_lists

### [要望3-15] プロジェクタ投影時にサイドメニューを隠して横幅を広げたい

* [対応策] Side Bar Hide プラグインの導入(redmine.tokyo 第12回勉強会で前田さんが報告されていたパッチは本家にリジェクトされたようですが、引き続き標準として盛り込まれることを期待しています)
* [参考URL] https://github.com/bdemirkir/sidebar_hide

## (4) プラグイン導入+プラグインコード変更での対応(+View Customize 含む)

### [要望4-1] 周期的な進捗確認の場で共有するため、担当者ごとに作業時間を一覧できるようにしたい

* [対応策] Work Time プラグインを導入
* [参考URL] https://bitbucket.org/tkusukawa/redmine_work_time
* [追加対応] デフォルトだと作業時間小数点1桁までしか表示されず、0.25時間などがぱっと判断付かないため、小数点2桁対応を実施(**work_time_helper.rb** を編集し、**1.1f** を **1.2f** に変更)
* [追加対応] Work Time プラグインだと工数入力した [実績] はわかるが、[予定] がわからないため、View Customize を利用し、「その担当者でフィルタをかけたガントチャート」リンクボタンをWork Time プラグイン表示画面に配置して予実確認できるようにした
* [追加対応] [予定] のガントチャートで全プロジェクトのチケットが見えるよう、すべての親となるトッププロジェクトを用意、チケット起票できないが、集計できるようにするため、モジュール:チケットトラッキング は有効だが、トラッカーはすべてチェックボックス外すことで全体俯瞰用プロジェクトして利用

### [要望4-2] ガントチャート上でも担当者・期日・関係性を編集したい

* [対応策] Easy Gantt(無料版) プラグインを導入、また、祝日を表示できるように View Customize も一部適用
* [参考URL1] https://www.easyredmine.com/redmine-gantt-plugin
* [参考URL2] [Redmineの無料版Easy Ganttへ自由に祝日を表示する方法](https://qiita.com/y_hokkey/items/2b04668c52bc9504174d)

### [要望4-3] 記入する障害報告や作業依頼について、決まったテンプレートをロードできるようにしたい

* [対応策] Issue Template プラグインの導入
* [参考URL1] https://github.com/akiko-pusu/redmine_issue_templates
* [参考URL2] [ブックマークで新しいチケット用のテンプレートを作成](https://qiita.com/MikazukiJikan/items/dbcb39c836301b14e908)
* [参考URL3] [Redmineでテンプレートごとにチケット作成リンクを表示させる](https://qiita.com/sakanashi/items/701fac4b8f3f53c767c5)
* [追加対応] [参考URL2] により URL リンク 1 クリックで担当者・ステータスを指定できるが、ブラウザによって URL に渡せるクエリの文字列長に制限がある(とくに IE の文字列長の制約が一番厳しい)
* [追加対応] [参考URL3] により Issue Template を拡張して特定のテンプレートをロードできるようにすることで、URL リンク 1 クリックでテンプレートに準じたチケット起票ができるようになる

## (5) Redmine コード変更での対応

### [要望5-1] メールで file:// リンクをそのまま貼り付けても Redmine 上でリンクとして飛べるようにしてほしい

* [対応策] Unc Link プラグインでは上記要望を満たせないため、**wiki_formatting.rb** をコード編集、http:// 以外に file:// を認識できるように正規表現部に追加、file:// ではマルチバイトコードもリンク認識させる必要があった
* [参考URL] なし

### [要望5-2] カスタムフィールド1で「要件」「内部障害」「外部障害」を設定したら、カスタムフィールド2で記載した内容をベースに対応したリンクURLで飛べるようにしてほしい

* [対応策] Redmine 2.5.0 のカスタムフィールドリンクではカスタムフィールド単体で閉じたリンク設定であり、カスタムフィールド間の関係を持たせることができなかったため、**issues_helper.rb** をコード編集して対応
* [参考URL] なし

### [要望5-3] 新規アカウント登録時に並び順が名→姓であったのを姓→名に、また、アカウント名の内部ルールを記載するように

* [対応策] **register.html.erb** をコード編集、ただ今考えると表示上だけの問題であるため、View Customize プラグインで対応するよう切り替えた方が良さそう
* [参考URL] なし

## (番外) その他の対応

### [要望 番外-1] 期日切れのチケットをメールでリマインドしてほしい

* [対応策] cron で send_reminders を週 1 で走らせるように設定
* [参考URL] http://redmine.jp/faq/issue/send_reminders/

## おわりに

整理してみるとプラグイン数が非常に多くなってしまっていたことに気が付いた。今後は VerUP 対応により解決していくか、View Customize 化するなどしてプラグイン依存を減らしていきたい。

Redmine Advent Calendar 2017、次(22日目)は @MadoWindahead さんです。