LIVESENSE ENGINEER BLOG

リブセンスエンジニアの活動や注目していることを発信しています

初めてOSSにコントリビュートした話

はじめに

インフラGの鈴木です。連休は戸田競艇のメンチカツがめちゃくちゃ美味しいのに驚きました。
ところで、先日OSSに初めてPRを送ってMergeされ、無事コントリビュートする体験をしましたので、共有したいと思います。

Contributorsに自分がいるのが嬉しい

Mergeされるまでの経緯

以前の記事でCronitorというサービスのSDKを使い、CIを構築したことを話しました。
SDKのtimeout値が10秒固定であるため、時間を超過してエラーが発生したことが問題の始まりでした。そのため、timeout値を引数で指定したいと考えるようになりました。まずGoogle翻訳を駆使してIssueを切りました。

github.com

PRを送るまで

Pythonを使用する際、恥ずかしながらライブラリの中身を見たことはほとんどありませんでした。なので概要レベルの理解を行いました。この記事が簡潔にまとまっていて非常に良かったです。
その後、タイムアウト値を引数で実行時に指定する実装を行なってPRを出しました。これでclient側でtimeout値が自由に変更できます。デフォルト値に10秒を設定したことで互換性も保ちました。
また、PRを出す具体的な手順は以下です。

  • PRを送りたいリポジトリをFork
  • Forkしたリポジトリで変更をかけてCommit & Push
  • PRを送りたいリポジトリのPull Request→New Pull Requestと遷移してcompare across forksを押す
  • 自分のリポジトリとFork元のブランチ一覧が出るので自分のcommitしたブランチとMerge先を指定する

Fork先からFork元にPRを出す

余談ですが、自分のリポジトリでPRを出したつもりでFork元に出しちゃうと恥ずかしいので気をつけましょう。
自分のリポジトリでPRを作成し、PR作成トリガーのGitHub Actionを発火させたかったのですが、間違えました。
そんなこんながありましたが、無事PRを出すことができました。 github.com

レビュー開始

PRを送ったのを忘れた頃、マッハバイトのCronitorでエラーが起きて解決不能になりました。その時のエラーが自分の送ったPRと関連していたので、サポートに連絡するついでに上記のPRをよかったら使ってくださいと添えてメールを送りました。
そうしたところ、環境変数で設定できるようにしてほしいとメンテナから連絡がありました。修正したところ、環境変数と引数両方サポートは可能かどうかとコメントがあったので、対応しました。

関連したエラーを別PRでだす

開発している際に気がついた依存ライブラリ関係のエラーや、CIの使っているActionが古くWarningが出ているといった小さいものも合わせて修正PRを出したところ、こちらは即マージされました。

Mergeされる

最終的に引数で定義するのではなく、__init__.pyで定義したtimeout値をモジュールから呼び出して定義するスマートな方法に変わりました。丁寧にレビューしていただいたaflanaganさんに感謝です。
送った3件のPRがMergeされ、バージョン4.7.0としてリリースされました。

感想

わずか数行の変更と、それに対するドキュメントの追記しかしていませんが、OSSに自分のコードが取り込まれるのは、大いに自信となりました。仕事で様々なOSS製品を使用しているので尚更でした。
また、ライブラリの理解をするために、他人のコードを読む経験も非常に有意義でした。普段使わない書き方の勉強になり、刺激になったので定期的にやっていきたいと思いました。
最後に、OSSにコントリビュートする上でのとっかかりとして、Good First Issueというサイトを紹介します。好きな言語の程よいIssueが見つかるようです。自分も次のチャレンジはこれを使ってみたいと思います。

goodfirstissue.dev

GitHubのコミュニティのSNSがこんなことをツイートしていたので、こちらをもって締めくくりたいと思います。

X(ex.Twitter)のトレンドにもなったCentOSのサポート終了や、直近ですとOpenTofuの誕生など、エンジニアであったらOSSとは無関係ではないはずなので、できる範囲でやっていきたいですね。
なお、リブセンスでは技術投資の制度を使って、OSS貢献を業務時間内にすることが可能です。本記事のOSS貢献も技術投資の一環です。ぜひ弊社に興味のある方はお話ししましょう。ありがとうございました。