Redmineにこんなパッチを投稿しています


原田です。2月に入りやっと雪が降りました。積雪があったのは一日だけでしたけどスノータイヤの有り難みを感じました。

今回は私が日々投稿しているRedmineのパッチをご紹介したいと思います。

Redmineをより良くするためにパッチを投稿しましょう

Redmine公式サイトには、新機能の要望・提案(Feature)や不具合の報告(Defect)等のチケットが日々登録されています。当社ではRedmineへの貢献活動の一つとして(Redmineをより良くするために)これらのチケットに対するパッチを作成し投稿しております。


Redmine公式のチケット一覧

当社に入社し一年半ほど経ちましたが、それなりの数のパッチ(具体的な数は把握できておりません)を投稿していると思います。例えば、昨年12月にリリースされたRedmine 4.1では、私が開発したパッチのうち40件が採用されました。

最近投稿したパッチをご紹介します

最近投稿したパッチのひとつをご紹介したいと思います。実際のパッチはRedmine公式サイトのチケットに添付されていますのでよろしければご覧ください。

Feature #4511: Allow adding user groups as watchers for issues

ウォッチャーにグループも追加できる機能を作成しました(2020年2月6日、Redmine公式のtrunkリポジトリにコミット済)。このチケットは2010年1月に登録されており多くの方の賛同を得ていますが、実装には至っておりませんでした。当社提供サービス「My Redmine」のご利用者様からも同様のご要望を寄せられておりました。


Redmine公式サイトでパッチを添付

今回の作業に関して以下の2点を明確にしておく必要がありました。

  1. そもそもウォッチャーにグループが追加できるような造り(コード)なのか
  2. ウォッチャーにグループを追加することで影響が出る既存機能(処理)はどの程度存在するか

1.に関しては調査した結果以下のことが分かりましたので対応(追加)可能と結論付けました。

2.に関しては以下のコマンドを実行し該当する箇所を抽出後、地道な作業ですけど一つひとつ確認しました。

$ grep -rin "watch" * --exclude-dir={vendor,public,tmp,doc,log,test,config/locales,files,plugins,coverage}
app/models/mailer.rb:95:    users = issue.notified_users | issue.notified_watchers
app/models/mailer.rb:130:    users  = journal.notified_users | journal.notified_watchers
...
(snip)
...
app/models/watcher.rb:20:class Watcher < ActiveRecord::Base
app/models/watcher.rb:21:  belongs_to :watchable, :polymorphic => true
app/models/watcher.rb:25:  validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id]
app/models/watcher.rb:28:  # Returns true if at least one object among objects is watched by user
app/models/watcher.rb:29:  def self.any_watched?(objects, user)
app/models/watcher.rb:33:        if Watcher.where(:watchable_type => base_class.name, :watchable_id => objects.map(&:id), :user_id => user.id).exists?
...
(snip)
...
ウォッチャーに関する処理を抽出(一部)

これらに加えグループ追加に伴う処理やテストを見直したパッチをRedmine公式に投稿しました。実際にはレビュアー(社内・公式サイトのそれぞれ)からいくつか指摘を受けましたが、自分の知らなかったことや新たな気付きを得られました。

このパッチを適用すると以下のようにウォッチャーにグループを追加することができます。


ウォッチャーの追加 ウィンドウ

ウォッチャー一覧(チケット画面のサイドバー)

Redmineをより良くするためには皆様の協力が必要です

当社はRedmineのクラウドサービス「My Redmine」を提供していることもあり、Redmineに関すること(運用・サポート)には精通していると思っております。しかしながらRedmine公式サイトをご覧いただくとお分かりになるかと思いますが、パッチ投稿者・レビュアー・コミッター等のメンバーがある程度決まった人員になっており、Redmineをより良くするための改善という面から見るとマンパワーが足らないと個人的には思います。

私はチケットを英文で書くことが苦手で、日本人の方の投稿が少ないのも同じこと(英語が苦手)が原因なのかなと思います。ちなみに私の場合はGoogle翻訳で伝えたいことを何度か翻訳させることで(日本語→英語→日本語→英語、この時点で英文がおかしくなることが多いけど)それなりに伝わる文章を作成しています。

もし可能であればRedmineをより良くするために公式サイトにチケットやコメントを投稿してみませんか。


My Redmine

こちらの記事もオススメです!
Redmineのパッチを書くときに気をつけていること
Redmineのパッチを書く活動の中で個人的に気をつけていることをまとめました。
換気してますか?二酸化炭素濃度計をオフィスに設置しました
二酸化炭素濃度計を導入して、オフィスの換気を行うようになりました。体調が良くなるなどの効果があるようです。
AWSの学習でAWSome Day(オンライン)参加とハンズオンをしました
AWSome DayというAWSに関する基礎知識を学べるイベントにオンラインで参加しました。
イベントのブースでGoogle フォームを使ったクイズを企画しました
ブース出展時の企画でGoogle フォームを使ったクイズを実施。ブースにお立ち寄り頂いたお客様とコミュニケーションがとれました。
AWS Amplify のログイン認証機能を試してみた
「AWS Amplify」を利用して、ログイン画面の実装について手順を紹介します。
ファーエンドテクノロジーからのお知らせ(2020/02/05更新)
2020年2月 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催)
ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。
Redmine 4.1.0でファーエンドテクノロジーが開発したパッチ137件(全250件の約55%)が採用
Redmine 4.1.0でファーエンドテクノロジーによるパッチが137件採用されました。
東京デジタルイノベーション2020(2/18・19開催)でRedmineのブースを初出展
2月18日(火)〜19日(水)に、ザ・プリンスパークタワー東京で開催される「東京デジタルイノベーション2020」出展のお知らせです。
「FAREND NEWS」2020年新春号 発行
広報紙「FAREND NEWS」2020年新春号を発行しました。弊社サービスの運用・サポートに携わっているスタッフや弊社の取り組みをご紹介します。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け