Redmineを改善するパッチを書いて、OSSへの貢献もする仕事

こんにちは、今週のブログ担当の石川です。「夏は日向を行け 冬は日陰を行け」ということわざをご存知でしょうか?意味の一つに「夏にあえて暑い日向を、冬にあえて寒い日陰を行くように、進んで辛い道を求めて身体を鍛錬せよ」とあるのですが、いくら鍛錬と言っても最近の暑さだと日向は歩きたくないです。皆さんも熱中症にはお気をつけください。

さて、最近は業務の中でオープンソースソフトウェアのRedmineの開発に参加して機能改善を行っているので、今回のブログではその活動について書こうと思います。

Redmineの改善

オープンソースのプロジェクト管理ソフトウェア「Redmine」は、その開発自体も公式サイトのRedmineで管理されています。

公式のRedmineでは誰でもチケットを作ったりコメントをすることができるので、世界中の人々が作った「こんな機能があったらいいな」「これはバグじゃない?」というようなチケットが今日(2017.8.2)の時点で17000件近く作られています。そのうちおよそ4600件が未完了です。

そして、欲しいといっただけで機能は増えないので、実際にその機能を実装したりバグを修正するためのコードを書く人がいます。

パッチの投稿

当社のRedmine上には、「Redmine改善」という名前のプロジェクトがあり、そのプロジェクト上には公式サイトのチケットの中からピックアップしたチケットや、「My Redmine」のサポートや相談会でいただいたご要望などを元にチケットが作られています。基本的にその中から取り組むものを選んでパッチを書いています。最近はRedmine本体の開発ではRails5対応のための作業が続いていたので、あまりバージョンの変化に影響されなさそうなガントチャート関連(画面関連)を中心に進めていました。

パッチを書く上で、Redmineがどのように動いているのか理解するためにコードをたくさん読むのですが、今までたくさんの人がパッチを書いて作られてきたシステムなので、コードを見ているだけでも「こんな書き方があるんだ」ととても勉強になります。書いたコードは投稿する前に社内でレビューしてもらっています。

そして、パッチを書くときと同じくらいに悩むのが、コメントする際の文言です。当然ながらRedmineの開発は英語なので、パッチを投稿する際のコメントも英語で書く必要があります。ただ、未だに英語で書くコメントには悩むので、時折こうして添削してもらっています。一人で考えて書けるように、英語の勉強を頑張らねばと毎回思います。

そして、パッチを公式のRedmineに投稿します。一番最初にパッチを投稿した時は、何人かに見守られながらsubmitボタンをクリックしたことを覚えています。

全体のアクティビティ(活動の履歴)に自分のアイコンが流れたのを見るのはなんだか不思議な感覚ですね。

パッチのアピール

パッチを投稿した後は、Redmineのユーザーのコミュニティサイト「toot.Redmine」で「こんなパッチを書きました」と書き込んでいます。


https://toot.redmine.jp/@ishikawa/94662

これまで投稿したパッチ

6月中旬からRedmine本体の改善活動を始めて、これまで6個のパッチを投稿しました。

Patch #5957: 全ユーザーの情報をCSV形式でエクスポート

初めて送ったパッチです。実はユーザーに対するカスタムフィールドに対応できてないので釈然としていない部分がありますが、まずは出すことを優先しました。

CSVエクスポート用リンク:

出力されたCSVファイル:

Feature #22978: リンク先のチケットの注記をハイライト

チケットの注記(コメント)へのリンクをクリックしてその注記に移動したとき、どの注記へのリンクか分かりやすいようリンク先をハイライトします。7月8日にほぼそのままの形でいったんはRedmine本体に取り込まれたのですが、7月29日に変更が加えられ、今は私が書いたコードは残っていません。

Feature #26279: CSV出力時、 general_csv_encoding で設定されたエンコーディングに加えUTF-8の選択肢も表示

チケットをCSV形式に出力するとき、日本語表示で使っているときはエンコーディングがCP932固定ですが、UTF-8も選択できるようにします。My Redmineのお客様から要望があった機能です。

Feature #20481: ガントチャートの表示領域の幅をドラッグでリサイズ

ガントチャートのチケットのタイトル部分の幅がドラッグして変更できるようになります。My Redmineのお客様向けの相談会で要望がありました。改善効果が分かりやすいので作っていて楽しかったです。

Feature #10485: ガントチャートでコンテキストメニューを表示

ガントチャートに右クリックメニューを追加し、チケットの情報の更新が簡単に行えるようになります。標準のガントチャートでもついつい右クリックしたくなることがよくあるので、ぜひ本体に取り込んで欲しいです。

Feature #26409: ガントチャートに担当者を表示

ガントチャートに担当者名も表示できるようにします。ビューのコードとHTMLの構造が複雑で苦労しました。パッチを送るまでに自分のコードを何回も書き直したりよりよい書き方を話し合うなどして勉強になりました。

Redmineのパッチを書くようになって

コードを書く上では、今まではメソッドの名前を変えたり引数を増やすことに対してあまり慎重でなかったのですが、Redmineのパッチを書く上ではできるだけ他に影響を与えないようになんとかできないかを考えるようになりました。

そして、今まではRedmineなどのオープンソースの開発に関わっている人は漠然と「すごい人」で、そんな「すごい人」でないとオープンソースへの貢献はできない、と思っていました。今もRedmineに関わる人々が「すごい人」だという考えは変わらないのですが、すごい人じゃない自分でも、ちょっとしたところからできることがあるということに気づけました。

みんなでRedmineをより良くしよう −Redmineプロジェクトへの貢献の仕方− from Go Maeda

とりあえず、今までパッチを投稿する時以外に公式サイトのRedmineにコメントすることがなかったので、今度気になるチケットがあったら賛成を意味する「+1」のコメントをしてみようと思います。今後もパッチを書いたりとRedmineに対する貢献ができるよう頑張ります。