Redmine パッチ会 #8 に参加しました

# この記事はなに?

[Redmineパッチ会オンライン #8](https://redmine-patch.connpass.com/event/201730/) に参加しました。どんな感じだったのか? を書いていきます。

# きっかけ

今のプロジェクトで、[Bitnami Redmine 4.1.1](https://bitnami.com/stack/redmine) の利用を始めています。運用手順書を書いているうちに、あれっ、これ不具合っぽいな? と思ったことが何度かありました。でも、RubyもRailsも全然触ったことないし、一人でソースコード読んだりパッチ書いたりなんかできそうにない、なにか足がかりがほしいな、と思っていて、えいっと参加してみました。

過去には[trac](trac.edgewall.org/)というチケット管理システムを使っていて、ちょっとした[プラグイン](https://trac-hacks.org/wiki/matobaa)を作ったりしてました。また、6年前になるのですが、[Redmine_LDRize](https://www.redmine.org/plugins/redmine_ld_rize) というプラグインを作ったりしてました。ですが、Redmine本体を見るのは始めての機会です。

# チーム編成まで

Github上の「[redmineパッチ会](https://github.com/redmine-patch-meetup/redmine-dev-mirror#redmine%E3%83%91%E3%83%83%E3%83%81%E4%BC%9A)」にある段取りですすみます。
オンライン会議ツールはDiscordでした。全体の流れは、まず自己紹介と近況を共有したあと、なにをやろうか相談で決めて、チームに分かれて作業し、最後にまた集まって状況を共有する、といった感じです。今回(第8回)は、2月13日(土)13:00に開始、14:00ごろから16:30までチーム作業、まとめは15分ほど延長して17:15に終了しました。


自己紹介のとき「不具合っぽいものを二つ見つけたんだけど、バグかどうかわからなくて」なんて話をしたところ、取り組むネタ候補に入れてもらえました。
いくつかの取り組み候補のなかから、「既存パッチをレビューする」「プロジェクト公開権限を追加する」「不具合っぽいものを掘ってバグチケ化+対応」の3テーマをすすめることになりました。

# チーム1: 既存パッチレビュー

私が参加したチームでは「本家のIssueにパッチが投稿されているにも関わらず、レビューされてなくて塩漬けになっているケースがある。本体に取り込んで問題なさそうか、それとも直すべき点があるか、レビューコメントをつける」というテーマに取り組みました。ふだんからRailsやRedmineソースと向き合っているお二人とともに、[#30121: Projects API should return only trackers, visible to the user](https://www.redmine.org/issues/30121) をとりあげました。

「APIでプロジェクト属性を取得した際、閲覧権限を持っているトラッカーのみが表示されるべし」という内容です。Webのプロジェクト設定画面では表示されないのですが、API経由だと、閲覧権限を持っていないものも含めてどんなトラッカーがあるのかが返されていました。

まず、パッチを当てていない状態で事象が再現するか確認し、Issueに貼られたパッチを当てて、事象が解決するかを確認します。問題がなければ、LGTM (Looks Good To Me; いいと思うよ) というコメントを付ける、ということをやります。
VS Code Live Share でソースコードを共有しながら議論しようとしたのですが、うまく接続できず、結局、Discordの画面を共有していただきながらの作業となりました。

パッチ適用前で事象を再現させます。最初、権限をどこで指定するのかわからずに設定画面を探し回り、ようやく「設定→ロールと権限」からロールを選択した画面の下のほうにあるのを発見しました。たしかに再現する。次に、パッチを適用して、さあ解決、を確認しようとしたのですが、解決していませんでした。あれれー。何度やってもダメです。
「非メンバー」「匿名ユーザー」の権限が効いちゃってるんじゃないか、と、このへんの権限もいろいろ変更してみたのですが、どうも意図したとおりに反映されません。どうもおかしい。でも、パッチに同梱されたテストはちゃんと動いている。テストコードも読んだけれど、問題はなさそう。なにかがおかしい。でも、なにがおかしい?
いったん休憩を挟んで頭を冷やしたあと、私が、Web経由とAPI経由で同じメソッドを使っていれば動作は同じになるはずですよね、比較してみませんか? と質問してみました。さっそくソースを読んで、ココと、ココ。ちょっと違うけど、だいたい同じになるようなパッチになってるね、ということを確認しました。
同じころ、同じチームの人がふと「これってもしかして匿名ユーザとしてテストしてない?」と指摘をしてくれまして。確かにユーザ認証通れていなかった。で、ちゃんとユーザ認証したうえでテストしたら、期待通りのテストになってました。LGTMです!
ちょっと気になったので「参照するときについてはLGTMですが、更新する場合はどうでしょうか、大丈夫ですかね?」と質問してみたら、さっそくテストコードを書いてくれて、動作確認をしたら、うーん、やっぱり直感とは異なる動作をする。ひきつづきソースを掘り返して、えーと、ここがこうなってるから、ここを通って、たしかになんか直感と異なるねぇ、ふむふむ、なるほどー。

という感じです。

VS Code の Live Share はうまくつながりませんでしたが、Discordで画面共有しながら、がっっつりとモブプログラミングを経験させてもらえました。最終的には目標としていたとおり、Redmine.org に [LGTMとコメント](https://www.redmine.org/issues/30121#note-7) することもできました。(名前まで入れてもらった。OSS活動っぽい!!)

# チーム3: 不具合のバグチケ化+対応

チーム1が30分を残して一段落したので、チーム3になだれ込みました。「活動タブのIssueの一番古い履歴のステータスが最新のそれと同じになる問題」に対応していただいていました。

途中からだったのですが、チーム1と同様、Discordで画面共有しながら、みんなでソースを読んでいました。外形的にはこのテーブルのここを表示している、それを実装しているのはコードのこの部分だ、これってどういう意味? とかいう議論をしていました。がっつりソースを読んでいる、すっっごく面白い!!

残念ながら、残り30分ではパッチを書ききることまではできなかったのですが、「もしかして、これってバグなのかな? 違うかな?」というぼんやりした認識が、みんなでソースを読むことで「たしかにヘンだ、これはissue相当だ。redmine.orgには該当するissueはなさそう。新たにissueを作成してよさそう」という認識になれたのは、個人的にはとてもうれしかったです。

# 参加してみて

13時～17時の4時間ちょっとでしたが、とても有意義な時間でした。私はRubyに慣れていないので、見て感心することと、モブプロしている人の発言をメモし続けること、ちょっとした気づきを発言するくらいしかできなかったのですが、それでも、とてもいい経験になりました。一人ではできないことも、チームで取り組めば、なんとかなるかも!! というう手応えがありました。ソースを読む、とてもいいきっかけをもらえたような気がします。

これからも少しずつですが貢献してきたいとおもいます。よろしくお願いしますm(__)m

# 学び・参照

- trunk環境のRedmineを動かす
- パッチを当てて動作を確認する
- デバッガで挙動を追いかける
- テストコードを書いて、GitHubのCI (Github Actions)で確認する

- connpassのイベントページ：https://redmine-patch.connpass.com/event/201730/
- スクラップブック：[redmine-patch/第8回](https://scrapbox.io/redmine-patch/%E7%AC%AC8%E5%9B%9E)