(この記事は、高専OBOG Advent Calendar 2019の12/5に送った記事です。)
要約
普段使っているgemに、Pull Requestを送って、マージされました。
LazyHighChartsというgemの動きが気に入らなくてモンキーパッチを当てて使っていました。
自分のアプリケーション以外でも役に立つ、gem本体に取り込まれるべき修正だと考えたので、gemのリポジトリにプルリクを送ることにしました。
流れはこんな感じです。
- 不具合を見つける
- 手元でgemの修正を試す
- githubのリポジトリに修正を送る
- マージされる
PRがマージされるまで
1. 不具合を見つける
LazyHighChartsは、Highcharts JSというチャートを描画するJavaScriptライブラリを、RailsやSinatraなどのフレームワーク内で簡単に使えるようにするgemです。
詳しい紹介は本家をご覧ください。https://github.com/michelson/lazy_high_charts
RailsでJavaScriptの読み込みにdefer属性を付与した場合、チャートが描画されない、という不具合に遭遇しました。
viewに書き出されたjsを見てみると、どうやらLazyHighChartsがこしらえたjsに問題があるようでした。
2. 手元でgemの修正を試す
手元でgemの修正をためします。
問題になっている箇所を書き出しているModuleを探して、モンキーパッチを当てます。
IntelliJ IDEAだとコードジャンプで該当箇所に飛べるので、すぐにModuleやClassの名前がわかって便利ですね!
モンキーパッチを当てると、問題なくチャートが描画されました。
(しばらくこの状態で本番で使っていました)
次はgemのリポジトリをforkして、gemに修正を加えます。
Gemfileのlazy_high_chartsの取得先をこんな感じにforkしたリポジトリ&ブランチに書き換えて、手元で修正版のgemを試します。
gem 'lazy_high_charts', git: 'git@github.com:kosappi/lazy_high_charts.git', branch: 'use_event_listener'
この修正版も、モンキーパッチのときと同じように、問題なくチャートを描画してくれました。
3. githubのリポジトリに修正を送る
手元で動作確認ができたので、本家にも同じ修正を送ります。
まずはREADME.mdを読んで、どのような流れで修正を提案するのか見てみます。README.md
Contributingを読んでみると、このように書いてあります。
- Fork the project
- Do your changes and commit them to your repository
- Test your changes. We won't accept any untested contributions (except if they're not testable).
- Create an issue with a link to your commits.
まずは動作確認して、それからissueを作って欲しい、とのことでした。
動作確認は済んでいるので、issueを作ります。
英語は得意ではないので、すでにマージされたPRや、closeされたissueを参考にしつつ、時間をかけて書くことになりました。
作ったissue
1日経つと、メンテナからPRを作って欲しいという旨の返事がありました。
PRを作ります。
作ったPR
PRを作ってしばらくするとCIがコケて赤くなっていました。
specを少し修正するだけで解決したんですが、事前にforkしたリポジトリでもCIを回しておくと、ベターかも知れません。
あとはマージされるのを待ちます。
4. マージされる
PRを出してから1日後、マージされました。
やったね!
感想
RubyやRailsを仕事で触りだして数年になりますが、めちゃくちゃgemを使うわりには、contributeする機会はまったくありませんでした。
タダで使ってばっかりでなんかスマン、という気持ちがありました。
今回、はじめてcontributeすることができて、とてもうれしいです。