
継続的なOSS活動によって新卒1年目エンジニアが得られたもの[後編]
みなさんこんにちは!
ワンキャリアでエンジニアをやっている野田(Github:https://github.com/tsugumi-sys)です!
2023年4月に新卒エンジニアとして入社し、新卒採用メディア「ONE CAREER」の開発チームに所属しています。
前編の記事では、OSS活動を継続している理由や業務にどう役立っているかについてまとめました。
まだご覧いただいていない方は、ぜひお目通しいただけると幸いです。
今回の後編は、効率的に機能拡張ができたと感じているMotoへのコントリビュートについて、工夫ポイントを深掘りして紹介します。
また、その経験を通じて得られたものについてもお話しいたします。
Motoの紹介
MotoはPythonのライブラリです。
AWSサービスをモックしてテストするためのライブラリであり、AWS SDK for Python (Boto3)をモックしています。クラウドサービスエミュレータのLocalStackの一部でMotoが使われています。業務では、主にAWS Lambdaのユニットテストに使用しています。
コントリビュート内容
AWS Key Management Service (KMS)の公開鍵暗号方式に用いられる署名アルゴリズムのサポートを追加しました。Motoの既存実装では使用できる署名アルゴリズムがひとつだけ(RSA暗号・キーサイズ1024)に限定されており、実際にサポートされているアルゴリズムとの乖離が生じていました。今回の私のコントリビュートによって、約9種類のアルゴリズムのサポートが追加されました。
工夫した点
複数種類の署名アルゴリズムを実装するにあたり、抽象化クラスを利用して依存性逆転の原則に則った実装を行いました。具体的には、以下の流れに沿って実装を進めました。
公開鍵暗号方式について再学習を行い、署名や検証などの必要な共通処理を洗い出す。
既存実装と照らし合わせながら、必要なインターフェースを整理する。
新しく追加する署名アルゴリズムのクラスと呼び出し部分(モックされたKMSサービス)が、抽象化されたインターフェースに依存するようにする。
これらによって、既存のコードを大幅に変更することなく拡張を進めることができました。メンテナーの方にも褒めていただき、非常に嬉しかったです。

PR:
PR comment:
Motoへのコントリビュートを通じて得られたこと
今回のコントリビュートを通じて得られたものが3つあります。
1つ目は、エンジニアとしての自信です。
このコントリビュートのきっかけとなったイシューを見つけた当初、どのようにアプローチすれば良いか全くわかりませんでした。しかし、コードを読み進めながら、リファクタリングや細々とした修正PRを出していくことで次第にアプローチ方法が見えてきました。その結果、最後までやり遂げることができたため、大きな自信に繋がりました。
2つ目は、OSSでインプットした知識の応用経験です。
コードアーキテクチャで学んだ「依存性の逆転」を実際に自分の判断で応用したことにより、インプットとアウトプットが結びつき、学びが自分のものになったと感じましたまた、公開鍵暗号方式と関連する署名アルゴリズムについての知識も深まりました。
3つ目は、今回の一連のコントリビュートの対価としてMotoから報酬をいただいたことです。
添付画像のメッセージを見た時は、思わず二度見してしまいました。自分の貢献が認められ、エンジニアとして少し誇らしい気持ちとなりました。まさにお金をいただきながら勉強できる、最高のOSS活動体験となりました。

PR comment:
おわりに
自分にとってやや難易度が高めのコントリビュートを完遂できたことを嬉しく思っています。エンジニアとしてひとつステップアップできたと感じています。
報酬をいただくことができたのも非常に貴重な経験となりました(いただいた報酬は飲み代に使います)。
これからもエンジニアとしての技術力アップ(飲み代も稼げたら嬉しい!)のために、OSS活動に励みたいと思います。
この記事をきっかけに、OSSコントリビュートしてくれるエンジニアが増えると嬉しいです。
▼ワンキャリアのエンジニア組織のことを知りたい方はまずこちら
▼カジュアル面談を希望の方はこちら
▼エンジニア求人票