こんにちは。 マネーフォワードのIDサービス開発部のダンです。
今日は、OSSを利用し貢献する過程における考え方の変化について共有します。
OSSとは?
OSSはOpen Source Softwareの略で、利用者の目的を問わずソースコードを使用、調査、再利用、修正、拡張、再配布が自由なソフトウェアの総称です。 OSSはオープンで、コミュニティなどで共同開発されます。
OSSは、「オープン」「共同開発」「自由」などのキーワードがあります。 このキーワードは意味として理解していましたが、私はその中身を充分に認識していませんでした。
Money Forwardは、OSSコミュニティを支える活動を行っております。 マネーフォワードとオープンソース・ソフトウェア | Engineers' Blog 私たちはOSSのお陰で仕事ができており、自分もOSSに貢献する気持ちがだんだん大きくなりました。
OSS貢献前の私の考え方
プロジェクトにJoinして機能を開発する際、その機能のライブラリー(OSS)を探して、見つけたら導入します。
その時点での考え方は、、、
- OSSプロジェクトは有用なblack-boxである
- 先人が難しい課題に取り組み、解決してもらったので、我々はその課題に取り組まなくてよい
- ただ、コードが難しくことも多く、コードを読むのは辛いなぁ
- OSSは出来上がった食事である (Readme & using)
- 問題解決のため、どのようにOSSを導入するか? → Readmeを読んで、事例を見てOSSを導入して、動作を確認 → 完了!
- すぐに使えて、それにより自分のタスク(開発時間)を減らせます
- OSSはalmost error-freeである (ほとんどエラーフリー)
- 沢山の人がそのOSSを使っているため、実績もあり、安定しているため、安心してすぐ使えます。良かった!
つまり、私は完全にOSS依存していて、何もやりたくなかったのです!
問題が発生したことで、変わり始めた考え方
導入したOSSのおかげで、担当したシステムはうまく稼働しました。
ところが、システムが徐々に大きくなり、機能が沢山追加され、以前は正常動作していたOSSに問題が発生しました。
私が遭遇したのは、トークンイントロスペクション(token introspection)という問題です。
それにより、考え方が少し変わってきました、、、
- OSSはblack-boxではないよ
- OSSのOはOpenですから、問題が発生したらソースコードを直接で調べられます
- 自分でソースコードだけではなく、OSSでのディスカッションが見えるから、そのOSSの実装やデザインをある程度把握できます
- 出来上がった食事ではないよ
- トークンイントロスペクションの原因は、利用しているOSSが未サポートだったためです
- 新しく機能を追加開発し、改善する必要がります → contributeのチャンス到来!
- Error-free?? No. A "ton" of errors out there
- OSSがあることは、とてもありがたいことだと思います
- しかし、既存機能に不具合がないというわけではなく、導入するOSSを慎重に調べて、理解した上で導入するべきです
じゃ、OSS貢献していきましょう!
「問題に遭遇する」→「解決しよう」 この段階で、私の考え方が変わりました。
- OSSはオープンで豊富のリソースです
- トークンイントロスペクションはOauth2周りの問題です。問題を解決するためにRFCドキュメントを読むことはもちろん、他のOauthのOSSはどのように実装されているかを参照します
- 私が使っている言語はRubyですが、Rubyだけじゃなく他の言語(Java、PHP)のプロジェクトの類似問題について解決方法を調べます
- 色々なところが見え、何が解決方法が見えるようになります。少なくとも、他の人のコーディングと問題解決方法は勉強になります
- トークンイントロスペクションはOauth2周りの問題です。問題を解決するためにRFCドキュメントを読むことはもちろん、他のOauthのOSSはどのように実装されているかを参照します
- OSS活動は一緒に食事を作ることです
- 「美味しい食事」を作るため、一緒に相談して開発でき、誰でもその料理に自分の料理を追加できます
- なので、コメントやアイデアがあったら、遠慮なくプッシュすることがOSSに価値になると思います
- トークンイントロスペクションの問題解決ため、色々調査し実装しました。「自分のソリューションは正しいかな?アイデアはこれでいいのかなぁ?このコードを充分で理解したか?」など考えましたが、私は遠慮なくプッシュしました。 初めてのコミットの結果としては、、、「OSSのアーキテクチャに合わない」との指摘をいただき、より良いアイデアを教えていただきました。 そのコメントのおかげで、私はそのOSSについて理解が深まりました。知らない人と相談でき、色々な観点を指摘を受け、本当に勉強しました。
その後も相談が続き、新しいソリューションになりました。そしてやっとLGTMをいただけました。 で、当初思った「自分のソリューションは正しいかな?アイデアはこれでいいのかなぁ?このコードを充分で理解したか?」 とウジウジしてプッシュを躊躇ってしまっては、勉強するチャンスを失ってしまい、それはとても惜しいことです。
- 出来るだけ多くの人が使えるようにします
- OSSは共同開発ですので、目的の1つとしては多くの人に使えるようになることだと思います。そのためには、問題解決のためだけではなく、他の人にどうのように影響を与えるのかを意識しないといけません。コミュニティーのフィードバックをフォローし、みんなと相談して進めることで沢山勉強になります。
- ソースコードを深く読み進め、その後も色々な不具合が見つけました。そしてドンドン二つ目・三つ目・・・のPRとissueを作っていきます。仕事だけではなく、他の人のために手伝うのが嬉しい!
僕がまだ辿り着いていないステージ
これまで、OSSについて私の考え方と体験はこういうステージを辿ってきました。
考え方を変えて色々なことを勉強できて嬉しいです。
さあ、OSSに貢献していこう!
--
マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。
【採用サイトのご案内】 ■マネーフォワード採用サイト ■Wantedly
【プロダクトのご紹介】 ■お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android
■ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』
■だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』