SwiftのOSSライブラリに機能を追加したときに心がけたこと

このエントリーをはてなブックマークに追加

アプリケーションエンジニアの田中です。今年6月に入社して、初めてのTech Blogへの投稿になります。最近の大きな出来事は、スプラトゥーン購入をしたこと、Housmartへのjoin、そして結婚したことです。

先日、何となく目標にしていた「お仕事でお世話になったOSSに機能追加する」を達成できました。今回は、私がReactiveSwiftに機能を追加した際の事前準備、背中を押してくれたものなどについて書いてみます。

これまでにも、OSSライブラリのAPIドキュメントを作成したり、READMEを修正したり、bug fixなど細々とやってきました。もちろんそれもそれで、とても楽しかったのですが、もう少し守備範囲を広げたいなーと思っていたタイミングでのことでした。

ひそかに今月のマイルストーンとしておいていたこともあり、感慨があります。

やったこと

お仕事でお世話になったReactiveSwiftに機能を追加しました。具体的にはfailure時に指定したintervalごとにretryするメソッドを移植しました。

Add retry(upTo:interval:on:) by tjnet · Pull Request #496 · ReactiveCocoa/ReactiveSwift

ReactiveSwiftはSwiftでFunctional Reactive Programming(FRP)を実現するライブラリです。2017/8/21現在で1,437starを獲得しています。 わかりやすく help wanted とかラベルが付いてるので、取り組むissue自体は見つけやすかったです。

余談ですが、自身がコミュニティやプロジェクトを運営する場合も、周囲の人が「ちょっと手が空いたときに貢献しやすい」スキームを作っておくのは大事なことだなーと再認識しました。

OSSプロジェクトに限らず、helpを要するissueが細かく可視化されていれば、チーム外のメンバーでも「ちょっとこれ片付けときますね」と手を貸しやすいはずです。特にプログラミングに限らない話ですし、自身がお仕事に取り組む際にも見習いたいと思います。

アプローチ

ReactiveSwift, RxSwiftといったライブラリの使用経験はあったのですが、中身のソースコードに変更を加えていくのは初めてのことでした。

そこで、心理的ハードルを下げ、必要な知識をインプットするために以下のアプローチをとりました。

1.スクラッチで小さなプロトタイプを作ってライブラリへの理解を深める

実務の上では時間の制約もあることから、車輪の再発明は良くないこととされています。一方で新しい概念を理解する上では、小さな車輪を再実装して理解を深めるのは自分に合ったアプローチだと思っています。

そこで今回は下記の記事を参考にObservableを書いてみて、Playgroundで動かしてみたりして遊びながら理解を深めました。

Reactive programming from scratch | Thomas Visser

2.先人のテストコード、Pull Request、他のリポジトリのソースコードを読む

先人のテストコードを眺めることで、仕様を誤解していた部分に気づくことができました。また既にcloseされた関係のありそうなPull Requestを読むことで、どこをどうやって変更すれば良いのか、勘所がつかめて来た気がします。また、FRPを実現するライブラリは他にもいくつか実装されているため、それらのリポジトリも参照しました。

上記は他の分野にチャレンジする際にも、割りと使いまわせるアプローチなんじゃないかと思っています。正攻法ですし当たり前といえば当たり前ですが、こういった体験を言語化しておくことで、次に一歩を踏み出す誰かのお役に立てれば幸いです。

3.作業時間の確保

ほとんどのコミットは休日、業務が始まるまでの朝の時間、lab dayを利用して行いました。

(lab dayは、housmartが技術投資を目的として1スプリントの中で明示的に確保している自由研究の時間の事です。興味を持たれた方は、Housmartのエンジニアが自由研究に時間をかける理由を参照ください。)

背中を押してくれたもの

はてなの池(id:ikesho)さんのブログを時々読み返して励みにしていました。なんか気持ちがアガるので良かったです。

オープンソース活動への取り組み方 - Hatena Developer Blog

Pull Request 440個ってすごいですねえ。。。

感動したこと

簡単そうにみえたのですが、実際には「indent修正してね」「ここテスト追加してね」と何度かやりとりしており、意外と時間がかかっていますw。

最終的にmergeされたとき、素直に嬉しく、とても感動しました。自転車に初めて乗れた時。バスケットボールの試合で初めてジャンプシュートを決めた時。そんな感覚に近い気がします。

自分にもできることがありそうだし継続的にコミットしようと思えたこと、コンプレックスが少し解消されたことが実りだったと思います。

まとめ

OSSに貢献するときに考えていたことを、簡単にまとめてみました。

お仕事でお世話になったOSSに対して、さらに貢献の範囲を広げていけるといいなーと思っています。

このエントリーをはてなブックマークに追加