Rails の issue を解決するまでの手順とOSS初心者でもできること

突然ですが、あなたはRailsのissueとプルリクがいくつあるかご存知でしょうか?

2019年10月17日現在、それぞれ issue 384 / PR 803 になります。

f:id:sinsoku:20191017000221p:plain

多いですよね...。

個人的に、最近このissueを減らすのを少しでも手伝えないものかとissueにコメントしてみたり、パッチを書いたりしてるけど、 なかなか大変なので、コントリビューターの敷居を下げるためにブログ記事を書いてみました。

コントリビュータが増えれば、きっとissueも減るはず!!

Rails への貢献について

Railsガイドに丁寧な説明が記載されているので、読んだ事がない方は一読するのをオススメします。

railsguides.jp

この記事で紹介すること

Rails への貢献方法は色々なものがあります。

  • 新機能の追加
  • バグの報告
  • バグを修正するプルリク作成
  • ドキュメントの追加や修正
  • ...etc

このなかのうち バグの修正 に絞って紹介します。

バグ修正を行うときの手順

  1. 報告されたissueを読んで、問題を手元で再現させる
  2. 原因を突き止める
  3. コードを直す
  4. 動作確認をする
  5. プルリクを投げる

こんな感じでしょうか。 まぁ、仕事でバグを直すときと同じですね。

1. 問題を再現する

Rails の issue には問題を再現させるためのバグテンプレートが存在します。

  • issue に再現手順、再現スクリプトがない場合
    • バグテンプレートを使って書けないか issue の作者に依頼する
    • 例: rails/rails#36413
  • issue に再現スクリプトがある場合
    • 自分の環境でも再現するか確認してみる

2. 原因を調べる

問題が再現できたら、原因であるコードを調べます。

3. コードを直す

問題を再現させるテストコードを書いて、テストが失敗することを確認してから、コードを直します。 (例: rails/rails#37457) 他のテストコードを参考にすれば、意外とテストは書けます。

あと、Rails では minitest が使われているので、普段 RSpec を使っている人はテストの実行方法が分からないかも。

などを参考にしてみてください。

4. 動作確認

ローカルで適当にRailsアプリを作り、修正した Rails のコードを使うように Gemfile を直します。

- gem "rails", "~> 6.0.0"
+ gem "rails", path: "~/.ghq/github.com/rails/rails"

pathディレクトリを指定すると、そのディレクトリの gem を使えます。

あとは rails consolerails server などで動作確認をします。

5. プルリクを投げる

コミットログとプルリクに変更理由をちゃんと書く必要があります。

英語で変更理由を書くのはとても大変なので、いくつか英文を書くテクニックを紹介します。

  • 変更理由を日本語で書いて Google翻訳 でざっくり翻訳する
  • 簡単な英文(=自分が読める英文)になるように調整する
  • 他のバグ修正のプルリクを読んで、似たような英語で書き直せないか考える
  • git log --no-merges --author=kamipo でkamipoさんのコミットログを読んで参考にする

Rails のコミットログやプルリクには参考になる英文がたくさんあるので、うまく探してパクってください。

変更内容に自信がなかったり、不安な場合

都内に住んでいる方であれば、Asakusa.rb や永和さんのOSSパッチ会などに参加して、プルリクの内容について相談するという方法があります。

OSS初心者向け

ここまでで issue を解決する方法を紹介しましたが、「ハードルが高い」と思った人向けにいくつか初心者向けにできることを紹介します。

  1. https://github.com/rails/rails/issues の中から、興味のあるタイトルを読んでみる
    • issue を全部読むのは大変なので、例えば ActiveRecord や ActiveStorage など絞って読むと良い
  2. 自分の環境で問題を再現させてみる
    • 例えば、5.2 で起きる issue を「6.0 でも再現しました」とコメントするのも大事
    • 再現スクリプトのないissueに「この再現スクリプトで再現できました」とコメントするのも良い
  3. Close した issue とプルリクを読んで、コードの直し方を学ぶ
    • 問題と解答例みたいなものなので、読むだけでも勉強になります

最後に Rails Contributors の紹介

Railsで1回でもプルリクがマージされると Rails Contributors に名前が載ります。

contributors.rubyonrails.org

まだランキングに名前が載っていない方は、これに載ることを目標に Rails の issue を眺めてみてはどうでしょう?

意外と簡単に直せるバグが見つかるかもしれませんよ。

*1:過去のバージョンでは動いていて、最新のバージョンでバグっているケース