Rettyのサマーインターンで最高の夏を過ごした話

自己紹介

2022年Rettyサマーインターン(バックエンド)に参加した、からあげおふとんチームです。
メンバーを紹介します。

今回は、インターンの様子や開発したサービスについて紹介します。

課題とその背景

Rettyと契約いただいているお店の紹介ページでは、電話予約のための専用電話番号(以下、050番号)を発行しています。 サマーインターンの実施以前、050番号を管理する処理は、作業方法やプロトコルの差異などが理由で3つのサービスに散らばっていました。 そのため、実装が点在することによる変更漏れの可能性や、データの不整合などの問題が出てきています。

PHPモノリスとして実装されていた050番号を管理する機能をGo言語で書き直し、1つのマイクロサービスに切り出すのが今回の課題です。

技術スタック/開発形式

主な技術スタックは以下のとおりです。

開発は全体を通してLiveShareを使ったモブプログラミング/ペアプログラミング形式で行い、Clean Architectureに沿った設計/開発を行いました。

全体のスケジュール

合計3週間と、少し長めのスケジュールになっています。

1週目はアイスブレイクや設計がメインになりました。 事前にチームでデリゲーションポーカー(メンターがどこまで意思決定に関わるのか、など)を行い、メンバー間の認識を合わせました。 メンターの社員さんを交えながらClean Architectureについて学び、サービスの設計を行いました。

2,3週目は、インターン生が主体となってひたすら設計/開発/検証を行いました。 また、3週目はTech Blog(本記事)の執筆や社内での成果発表なども行いました。

基本的にはリモートでの勤務となりますが、希望すれば東京オフィスへの出社も可能です。からあげおふとんチームは計3日間の出社を行いました。

出社の様子

一日のスケジュール

10:30~ 始業、朝会
10:45~ 作業開始(モブ/ペアプロ)
12:30~ 昼休憩
13:30~ 作業再開
15:00~ 休憩
15:30~ 作業再開
17:00~ 休憩
17:30~ 作業再開
19:00~ 夕会

朝会の内容

朝会では、今日やることの確認や、連絡事項の確認を行います。 やることは、オンラインホワイトボードツールのmiro上にKanbanの形で管理していました。

夕会の内容

miroに付箋を貼る形で、今日一日やったことと、感想を振り返ります。

とある1日の振り返り

やったこと

3つのサービスに分散している処理を1つのマイクロサービスに集約しました。
1度にすべてのサービスの処理を移行するのではなく、1サービスずつ移行してリリースすることを繰り返す形で取り組みました。

1. 050番号の発行と更新をするワーカーの処理移行

  • 必要な処理をGo言語で実装
  • テストの追加
  • リクエストを貯めているSQSにメッセージを取得しに行くポーラーの実装
  • 動作確認

などを行い、移行が完了しました。チームメンバー全員がGo言語やソフトウェアアーキテクチャに詳しい状態ではなかったのと、土台からの作成であったため、この部分の設計/実装に一番時間がかかりました。
移行元となったワーカーは、マイクロサービスへの処理の移行に伴って役目を終えることとなりました。

2. 社員向け管理画面の処理移行

  • 必要な処理をGo言語で実装
  • テストの追加
  • Echoを使用してREST APIのエンドポイントを作成
  • 動作確認

などを行い、移行が完了しました。

3. お店会員さん関連のモノリスサービスの処理移行

  • 必要な処理をGo言語で実装
  • テストの追加
  • 動作確認

などを行い、移行が完了しました。

結果

050番号の管理という責務を、1つのマイクロサービスに集約することができました。

インターン前のサービス構成

マイクロサービス切り出し後のサービス構成

学び

ソフトウェアアーキテクチャに関する実践的な経験をすることができました。
実際にプロダクトに投入されるコードのため、入念に設計を行った上で実装に入ります。 最初はメンターの社員さんにリードしてもらう形で進みますが、徐々にチームメンバー間で良い議論ができるようになり、非常に楽しい経験になりました。
モブプログラミング/ペアプログラミングで作業を進めたので、自分では気づかなかった点や新しい視点を知ることができ、細かい部分でも学びや刺激が多かったです。 たくさんの意見がある中でチームとして意思決定をしていかなければならなかったり、個々人に認識のズレが生じたりして議論が停滞してしまうこともありましたが、「今何をしたいのか」の認識を合わせていくことの重要性を学びました。

感想

全体を通して、同世代の学生エンジニアと議論をし続けるので、非常に楽しく学びの多い時間でした。
インターン後半では、既存の実装を利用できる部分が多いことやメンバーの技術の向上により、速いスピードで作業を進めることができ、成長を感じました。

実際の出社やオンラインランチなど、現場の開発チームと話す場も多く設けられ、社内の雰囲気を知るという面でも非常に充実した内容だと感じました。
また、実際に本番環境で動くサービスを作るため、緊張感や大きな達成感がある点も大変面白かったです。

3週間のサマーインターンを経験して、様々な面で大きく成長することができました。メンターを担当してくださった鈴木さん、そしてRettyの皆様、本当にありがとうございました!

オフィスでの集合写真