SmartHR Tech Blog

SmartHR 開発者ブログ

プロダクト開発中に見つけた問題を修正して初めてRuby on Railsにコントリビュートしました! 〜「OSSやっていきの集い」活動報告〜

こんにちは。今回は、SmartHRのバックエンド開発に欠かせないOSSであるRuby on Railsに初めてコントリビュートしたお話をします。

以前「OSSやっていきの集い」の立ち上げについてお伝えしましたが、それを受けて実際に行ったOSS活動の1つです。

tech.smarthr.jp

はじまり

とあるプロダクトで、RailsがPostgreSQLの float 型のカラムを正しくダンプできない不具合を発見しました。

t.float ..., limit: 24 で定義したカラムを rake db:schema:dumpdb/schema.rb に出力すると、limit のないt.float が出力されてしまいました。
limit がなくなると精度が変わるため、これでは db/schema.rb を期待通り扱うことはできません。

期待しない挙動に思えるということで、rails/railsにIssueを作成しました。

rails/railsに作成したIssueであるInconsistent type handling for real columns in PostgreSQL schema dumps and loadsの画面
rails/railsに作成したIssue

しばらくしても特に返信が付かなかったので、SmartHRのSlackのバックエンドチャンネルにゲストとして入ってくださっているRailsコアチームのkamipoさんに相談しました。

OSSやっていきの集いの題材になる

kamipoさんに相談したところ、どうやらRailsで考慮されていなかった問題のようでした。
一度はkamipoさんに修正をお願いしたのですが、比較的低難易度で対応しやすそうということから、OSSやっていきの集いの題材としてSmartHRで修正させていただくことになりました。

Slack上でkamipoさんが問題を説明し、難易度が低そうなのでパッチを書いてみないかと提案くださったのち、OSS活動の題材にしようと決まったやりとり
Slackでのkamipoさんとのやりとり

この修正に興味のある人を募集したところ、Railsへのコントリビュート経験がある1名とコントリビュート経験がない2名の合計3名が集まりました。
モブプログラミング形式で時間を取って修正することにし、事前にそれぞれ開発環境を準備して集合しました。

実際の修正とマージまで

集まったメンバーでIssueを確認し、修正に取り組みました。

実際にはこのような流れで修正を行いました。

  1. まずはIssueの再現コードを手元に持ってきてテストが失敗することを確認
  2. コード上でスキーマ情報を出力している箇所を特定し、期待する出力のベタ書きをしてテストが成功することを確認
  3. binding.irb を使ってブレークポイントを設定したうえでテストを実行して、処理内容や変数の状態を追いながら修正すべき対象を探索
  4. 最終的に、型の対応付けの初期化で対応元として定義されている float4float8 で対応先が区別されていないことが原因と分かった
  5. float4float8の対応先を区別するようにして今回のケースのテストを追加し成功することを確認

ここまでで修正が出来たので、Pull Requestを作成しました。

rails/railsに作成したPull RequestであるMake Float distinguish between `float4` and `float8` in PostgreSQLの画面
rails/railsに作成したPull Request

するとPull Request作成からわずか1時間ほど(!)でkamipoさんにマージしていただき、見事Railsコントリビュートを達成することができました!

マージ後のお話

ここまででお話した修正は、公式サイトの「This Week in Rails」でもヘッドラインで取り上げられ、この記事を書き上げている最中にRails v7.2.2に含まれてリリースされました。

This Week in Railsで今回の修正がヘッドラインで取り上げられている記事の画面
This Week in Rails

Ruby on Railsという世界中の開発者が使用し、世界中のプロダクトで利用されているOSSにコントリビュートできたことはとても嬉しく誇らしかったです。

まとめと謝辞

以上がプロダクト開発から問題を見つけたところからOSSにコントリビュートできた例でした。
これからもOSSやっていきの集いではこういった活動をしていきたいと思っています!

最後に、kamipoさんにはこの場を借りて心からの感謝をお伝えいたします。IssueのレビューからPull Requestのマージまでサポートしていただきありがとうございました!

We Are Hosting!

SmartHRでは一緒に働く仲間を絶賛募集中です!

今回紹介したように、Railsを始め様々なOSSにコントリビュートするという活動もやっています。

少しでも興味を持っていただけたら、カジュアル面談でざっくばらんにお話ししましょう!

hello-world.smarthr.co.jp