マネーフォワードのサマーインターンに参加しました!
2021/10/04から2021/10/29までマネーフォワードのマイクロサービスチームで短期インターンに参加しました!
インターンに参加した経緯・目的
- サポーターズの1on1逆求人イベントで会社を知り、何度か面談しているうちにいつの間にか参加することになっていた(え?)。
参加前に考えていた目的は二つ。
インターンのイベント・取り組んだこと
今回のインターンでは次のようなゴールが設定されていました。
- Goやマイクロサービスに関する経験を得る
- 業務としての開発を体験する
- マネーフォワードの雰囲気や大事にしていることを知る
これに加えて、タスクの完遂が優先事項でないと明記されていました。そのおかげで社内wikiを読み漁ったり、気になる社員さんのslackのtimesを見て面談を申し込むなどの組織理解に時間を割くことができ、非常によかったです。
そしてインターンで取り組んだこととしては以下の4つです。
社内wikiを乱読したのは初めてでした。リモートワークに対する知見(非言語で欠落する情報を意識するとか)や考え方(現在マネーフォワードでは緊急事態宣言下でなければ週1以上出社するルールがある、詳しくは下のリンクの記事に!)から、ゴミの捨て方やシュレッダーに紙くずがたまった時の処理方法まで読めて面白いと感じました。
とはいえメインで行っていたのはインターン生向けタスクです。
認証機能開発タスク
内容
銀行やその支店情報を管理するサービスで提供されているAPIに認証機能を追加しました。これによりグループ会社がインターネットを経由してAPIにアクセスできるようになります。このサービスはさまざまなプロダクトから利用されることが想定されています。
開発
gRPC interceptorで受け取った認証情報とデータベースで保持している認証情報を確認する機能を実装しました。今回機能を追加するプロダクトではクリーンアーキテクチャが採用されていたため、各層の役割を意識しながらコードを書きました。DBのテーブルを定義し、データモデルとドメインモデルを作成し、 DAO、repository層やusecase層を作成し…と言った具合です。またレビュワーの負担を減らせるようにプルリクエストを小さく小さく作ることを意識しました。例えばDAOなどもまずインターフェースを切り出してから、実装していました。 また上の機能とは別の認証情報を管理するAPIで利用されるような認証情報を作成・削除するようなDAOやrepository層のコードなども書きました。作成したデータモデルから利用が想定されるコードであり、新たにAPIを追加するのも容易であると考えています。
経験できたこと
- Goでクリーンアーキテクチャを意識してコードを書いたこと。
- 新しく入ったチームでのコードを読んで理解すること。
- わからないことはもちろんいつでも聞けたが(slackやdiscordで質問する機会は多くあった)、タスクの完遂は優先事項でなかったのでコードをじっくり読むことに多く時間を割いた。
- gRPC interceptorを使って認証機能を挟むこと
- gRPC interceptorを知らなかったので触れることができてよかった。
今度の課題
- テストの書き方やエラー処理についてわからないことが多いので勉強していきたい。
- 何度かクリーンアーキテクチャには触れているが、そろそろ積んでいる実戦ドメイン駆動設計の本を読んでしっかりインプットしたい。
- 出したPRのCIがlint errorでfailしていると嫌な気持ちになるので自動化などについても勉強したい。
大学の授業が始まってからのインターン参加だったため、不規則なスケジュール(朝2時間業務してから午後授業に出て夕方から3時間業務をするなど)でしたが柔軟に対応していただき助かりました。また面談で聞いた社員の方のさまざまな経験や今回機能を追加したサービスのデータの背景など、文章が長くなってしまうために書かなかったことは多いですがマネーフォワードについて多くのことを知れました。タスクを通して確実に力のついたインターンであり、楽しかったです。約一ヶ月ありがとうございました!