久しぶりに印象に残ったRedmineの改善


My Redmine

原田です。

先日加湿器を購入しました。在宅中は加湿器を使用していますが、会社に出勤している間は除湿機を使用して部屋の湿気を減らすようにしています。
加湿器と除湿機を使用するのは、(加湿と除湿で部屋の水分量がプラス・マイナス0になるんじゃないかと思ってしまい)無駄なことをしている気がします。

今回は最近実施したRedmine改善の中で強く印象に残ったものについて書きます。

My Redmineのお客様からお問い合わせをいただきました

弊社の提供するRedmineのクラウドサービス My Redmine のお客様からwebサポート窓口に「プロジェクトの作業時間一覧で作業分類フィルターを使用したところ、サブプロジェクトに同じ作業分類名の作業時間は存在するが一覧に表示されない」というお問い合わせをいただきました。

再現手順を見つけ出して、私の開発環境のRedmineでもお客様の仰る事象を再現することができました。


作業時間一覧(作業分類フィルターを使用しなければ表示される)

作業分類フィルターを使用すると、あるべき作業時間が表示されない

いろいろ調べたところRedmineの不具合でした

事象は再現できましたが原因がよく分かりませんでした。そこで作業分類の管理方法と作業時間一覧機能のソースコードを確認したところ、Redmineの不具合であることが判明しました。

作業分類の管理方法

作業分類は以下の2箇所で管理されています。

  1. 管理 > 選択肢の値 > 作業分類(時間管理)
  2. 各プロジェクト > 設定 > 時間管理

上記2でシステム作業分類列にチェックがある作業分類は、上記1の作業分類(時間管理) で登録された作業分類をそのまま利用しています。チェックのない作業分類は各プロジェクトでカスタムフィールド(例では「Billable」)の値を変更したり、有効/無効を切り替えた作業分類です。

作業分類名は同じですがデータ上は別の作業分類(レコードIDの異なる作業分類)として登録されます。そのためプロジェクトごとに作業分類の設定値を変更すると、各プロジェクト用の作業分類が個別に作成されます。

実際の作業分類データ(一部)
# select id, name, position, is_default, active, project_id, parent_id
from enumerations where type='TimeEntryActivity' order by position asc, id asc;
 id |    name     | position | is_default | active | project_id | parent_id
----+-------------+----------+------------+--------+------------+-----------
  9 | Design      |        1 | f          | t      |            |
 17 | Design      |        1 | f          | t      |          1 |         9
 10 | Development |        2 | t          | t      |            |
 18 | Development |        2 | f          | t      |          1 |        10

ソースコードの確認

上記作業分類のデータ構造(同じ作業名であってもレコードIDが違う点)が個人的にとても気になりました。そこで作業時間の一覧表示で使用している作業分類フィルターに関する処理(ソースコード)を確認したところ、原因と思われる作業分類フィルターの選択肢を作り出している箇所を見つけました。

これを以下のように修正したところ、サブプロジェクトの作業分類も一覧画面に表示されました。

diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb
index 11128cfcd6..5fd4790893 100644
--- a/app/models/time_entry_query.rb
+++ b/app/models/time_entry_query.rb
@@ -88,7 +88,7 @@ class TimeEntryQuery < Query
     activities = (project ? project.activities : TimeEntryActivity.shared)
     add_available_filter(
       "activity_id",
-      :type => :list, :values => activities.map {|a| [a.name, a.id.to_s]}
+      :type => :list, :values => activities.map {|a| [a.name, (a.parent_id || a.id).to_s]}
     )
     add_available_filter(
       "project.status",

お客様のご指摘はとても参考になります

私自身、作業時間機能をあまり使用しないため不具合があることを気付いていませんでした。今回のお客様からのご指摘はとても参考になりました。

今回印象に残った点は、作業分類のデータ構造が一般的なデータ構造と異なっていたことです。たぶん作業分類フィルターを使用しない限りこの不具合には遭遇しないだろうと思いました。今回の事案はRedmine公式サイトにチケット登録し、上記の修正パッチを投稿しました。

余談ですがRedmine公式サイトの未対応チケットの一覧を見ていると、今回の事案とは直接関係しない作業分類に関する不具合と思われる報告(チケット)がいくつか存在していました。今回実施したRedmine改善の内容を参考にして、これらのチケットも改善していきたいと思います。

こちらの記事もオススメです!
Redmine公式に投稿しているチケットやパッチの傾向を調べてみました
Redmine公式サイトへの投稿履歴から取り組みやすいカテゴリやチケットが分かりました。
解析素人がRとMeCabを使って形態素解析を始めてみました
統計分析の学びとしてR言語を使い始めました。R言語は利用までのコストが低く、情報も多いのでお勧めです。
私の中国語学習を支える無料アプリ
趣味の中国語学習のために無料のアプリの中から頻繁に使っているものを紹介します。
シンプルなUIでRedmineのチケットを作成・更新できる「RedMica Bridge」ベータ版をリリース
「RedMica Bridge」はシンプルなUIで簡単にチケットに入力でき、複数のRedmineのチケットを表示することができます。
サービス障害対応訓練を行いました
障害が発生したものとして擬似的に対応を進めるサービス障害対応訓練を行いました。
ファーエンドテクノロジーからのお知らせ(2024/04/17更新)
入門Redmine 第6版 出版記念セミナー「Redmine 8年分の新機能ふりかえり」【2024/4/18開催】
入門Redmine 第6版(2024年3月23日発売)に掲載された新機能に関する内容を執筆者・監修者が紹介します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】
2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け