🔰

PHPの業務経験6ヶ月で初めてOSSにContributeした話

2021/09/19に公開

注) これはポエムです。

背景

エンジニアとして働き始めてから、OSSへのContributionに強いあこがれがあったが

  • ヨワヨワエンジニアの自分がOSSのコードなんていじれるのだろうか
  • そもそもOSSのコードに自分が介入する余地なんてないんじゃないか

なんて考えていた。
しかしやってみたら心配は杞憂だった。
OSSにContributionしたいと思っている人の参考になればと、自分がやったことをメモ。

筆者のスペック (当時)

  • エンジニア歴 1年半
  • PHP, Laravelの業務経験 半年

Contributeまでの軌跡

業務でとあるOSSを使う

LaravelにはExcelファイルをインポート、エクスポートできるLaravel Excelというライブラリがある。
業務で開発中のプロジェクトでこれを使う機会があったのだが、これが結構よくできたライブラリで[1]、とても簡単にExcelエクスポート機能等を実装できる。[2]

キャッチアップを兼ねてサンプルアプリを作成する

よくできたライブラリなので使いまくったら学びがあると思い、Qiitaの記事等に使用方法をまとめた。

https://qiita.com/yasuaki640/items/df406b6470126e066287

記事を書く際は、サンプルプロジェクトを作ってGithubにコードをアップし、手を動かすことを心がけた。

https://github.com/yasuaki640/laravel-excel-sample

おや?バグか?

ドキュメントに従って実装しテストコードを書いていると、仕様を満たしているのにエラーになるアサーションメソッドを発見

該当のアサーション
        // 何故か正しくアサーションしてくれない
        Excel::assertQueuedWithChain([
            new NotifyUserOfCompletedImport($user, $file->getClientOriginalName())
        ]);

Maintainerに質問する

いくらコードを見直しても正しくアサーションしてくれないので、GithubのdiscussionでOSSのメンテナに質問。

https://github.com/Maatwebsite/Laravel-Excel/discussions/3333

4〜5時間程度で回答がありました。
え? その方法ではアサーションしてくれないんすか???

image.png

誰も直さないので直す。

簡単にいうとテスト用アサーションメソッドの実装漏れで、誰が気にすんねん的な機能だった[3]が、
**もしかして今がOSSにContributionする絶好のチャンスなのでは?**と感じて直す。
ちなみに修正自体は決して難しいものではなく20行程度のもの。

より細かい手順はこんなかんじ。

  1. 対象のリポジトリをforkしてclone
  2. Contributingガイドラインの確認
  3. テストが動くように環境構築
  4. テストコードの追加
  5. 修正
  6. phpunitで確認
  7. 念の為、手動でも確認

テスト用DBの用意や古い依存関係の解決など、テストコードを動かすための環境構築が結構大変だった。
またContributingガイドラインではContributionのルール等が細かく書かれており

  • コミュニケーションを取る上でのエチケット
  • 機能追加時には本当にその機能が必要とされているか
  • バグ報告のやり方

など非常に勉強になることが多く書かれていた。

PRの作成

PRの要件を確認すると

  • テストコード必須
  • ドキュメントへの追記
  • クリーンなコードへの配慮
  • PRの粒度

などに言及があるので、それぞれの要件を確認。
また過去に出されたPRの中で丁寧に書かれているものをベースにし、PRを作成する。

PRを出す

いよいよ修正のPRを送る。(めっちゃ緊張しました。

https://github.com/Maatwebsite/Laravel-Excel/pull/3337#issuecomment-909247015

1時間程度であっけなくマージ完了。

image.png

感想

修正自体は意外にあっさりしていて、プロジェクトの作法的なところをキャッチアップするのに時間がかかりました。
でも無事にマージされたときは自分でも驚くほど嬉しかったです。
もちろん修正内容は大したことないしライブラリの根幹となる機能でもないですが、やはり自分のコードが世界中に配布されるという事実は自分でも驚くほどの高揚感をもたらしました。
あとドキュメントを読み込むので必然的にtypoに気づきやすくなります。
(ドキュメントの修正PRも出せる)

結言

よわよわエンジニアでもそこそこ規模のあるOSSにContributeできたので、同じようにContributeしたいと思っている方の参考になれば幸いです。

脚注
  1. 自分比 ↩︎

  2. 実装例 ↩︎

  3. 詳しくはdiscussionを参照いただきたく。 ↩︎

GitHubで編集を提案

Discussion