メルカリShops インターン生の日常

こんにちは!ソウゾウの Software Engineer としてインターンに参加している @nanri です。メルカリShops [フライング] アドベントカレンダー2022 の14日目を担当します。
現在私は関西の大学に通う大学4年生で、2023年4月からは大学院に進学します。
今回はメルカリShopsの開発に参加している長期インターン生の日常についてお伝えしたいと思います。インターンの成果をまとめた記事と違って、本記事ではメルカリグループでのインターンシップの日々に焦点を当てておりますので、メルカリグループでのインターンシップや新卒応募を検討している学生の方の参考になればと期待しています。

以下では

  • インターンと大学の両立について

  • インターンでの仕事の進め方

    • 学業に集中する週のスケジュール
    • インターンに集中する週のスケジュール
  • インターンの仕事内容

    • タイムセール開始失敗時の通知送付機能

の章立てでお伝えします。

インターンと大学の両立について

私は今年の7月にソウゾウでのインターンに参加しました。ソウゾウには12月末まで在籍する予定になっています。
インターン期間中には大学院試の受験や、卒論に向けた研究など、大学での学業上重要な時期も重なっていました。

そんな中で、ソウゾウのプロダクト開発チームのメンバーやメンターに学業の予定に合わせたサポートを受けながら、長期インターンと大学を両立させることができています。
7月は大学院試に向けた勉強に時間を割くため、オンボーディング用の数日で実装できるタスクをいくつか与えてもらい、勉強に集中できるように配慮いただきました。
また、夏休みは時間に余裕があったので、サーバサイドやクライアントサイドで学びの多いタスクに取り組むだけでなく、プロダクトマネージャーのサポートを受けながらプロダクト改善の施策提案にも挑戦させてもらいました(現在実装中です)。
ちなみに、本記事を執筆している期間は、卒論に向けた研究に時間を割かねばならないことを了承いただきながら、稼働している状況です。

インターンでの仕事の進め方

メルカリグループでのインターンシップでは、インターン生が新卒入社した時にチームに馴染んで仕事を進めていくことができるかどうか確認することも目的に含まれているので、インターン生もチームのスクラム開発のスプリントに他のエンジニアとともに参加し、機能開発に取り組んでいきます。

学業の予定に合わせてスケジュールは変動しますが、以下でインターン1週間のスケジュールを紹介します。私は京都在住なので普段はリモート働き、オフィスで予定があるときは六本木オフィスに出社しています。

学業に集中する週のスケジュール

学業に集中している時期は大学の研究室に行く日が多いのでフルリモートでの稼働です。この週の稼働時間は約20時間になります。
チーム内でのミーティングが午前中に集中していたので午前から出勤して、午後は早めに退勤し大学で夜まで研究をしています。

インターンに集中する週のスケジュール

インターンに集中している週はリモートとオフィス出社のハイブリットワークです。この週の稼働時間は約35時間です。
金曜日が出社推奨日になっていることもあり、チーム内外のメンバーと対面で関わる機会を得たり、オフラインでのミーティングに参加するために、週の後半は六本木のオフィスに出社します。オフラインで参加するAll Hands MeetingはソウゾウのCEOとも同じテーブルで参加できることもあり、社内の風通しも良さを体感しています。


インターンでの仕事内容

タスクは基本的にチームの開発スプリントに含まれるものの中から取りに行きますが、その中でもチームのメンバーの方からおすすめされたタスクをもらうことが多いです。
例として以下で最近取り組んだタスクを紹介します。

タイムセール開始失敗時の通知送付機能

メルカリShopsでは先日、タイムセール機能において「セール中に商品の元値と値下げ価格が同時に表示される」ことをはじめとするアップデートがリリースされました。
このアップデートにより今後は、セール直前に元値を吊り上げて割引率を大きく見せるなどの不正が行われないことを目的として、値下げ価格の設定には一定の条件を設けることになります。そして、設定条件を満たさないタイムセールは開始できなくなります。
そこで私は、セール開始時において設定した値下げ価格が設定条件に抵触していた場合に、ショップに対してタイムセール開始失敗の通知を送る機能を実装しました。

開発にあたってまずは最も単純なアーキテクチャでの実装を考えました。
メルカリShopsのマイクロサービスアーキテクチャにおけるサービス群のうち、タイムセールを管理しているのはdualpriceサービスで、通知機能管理しているのはnotificationサービスです。これらのサービスで最も単純に実装する方法は、dualpriceサービスで、タイムセール開始時に値下げ価格をバリデーションするメソッドにより価格の正当性が認められなかった時、notificationサービスのメール送信やプッシュ通知を実行するAPIを呼び出すことです。

しかし、この実装では「notificationサービス側に一時的は問題が起こった時には、dualpriceサービス側での機能が正常でも全体としてエラーと扱われる」という問題があります。タイムセール開始失敗の情報がタイムセール記録の管理上重要なため、できればnotificationサービスの通知が失敗していてもdualpriceサービス側での開始失敗に関するデータ更新は完了していて、通知は後で再試行できる状態が望ましいです。

そこで、以前公開されたテックブログの記事 を参考にしてCloud Pub/Sub を利用してサービス間を疎結合にしたデザインで実装することにしました。
以下にデザイン図を示しています。

上図に示してあるように、まずdualpriceサービス内でのバリデーションで値下げ価格の条件に抵触する設定が見つかった場合は、タイムセール失敗開始イベントをPub/Subに対し発行します。Pub/Subは、発行されたイベントの情報が受け取られてその確認を得るまで情報を保持します。情報を受け取るのは、Pub/Subから様々なイベントの情報を受け取って通知を作成するeventnotificationサービスです。このサービスが、タイムセール開始失敗イベントを受け取りnotificationサービスを呼び出すことで通知を送ります。

こうしてPub/Subを介した情報の受け渡しにより、タイムセール開始失敗時には記録の更新管理が確実に行うことができ、通知のための情報も保持され、非同期的に通知を送ることできるという望ましい状態が実現できます。

おわりに

今回の記事ではメルカリShopsの開発に携わるインターン生の日常についてお伝えしました。
ソウゾウのインターンは学業に配慮していただきながらも、できる限り新卒入社後に近い環境で会社や仕事への適性を見ることができます。また、メルカリグループの誇る優秀なエンジニアやプロダクトマネージャーからプロの豊富な知見や技術を得ることができ、過去に経験したことの無い速さでの成長を実感することができています。忖度抜きで他の学生におすすめしたいインターンです。

株式会社ソウゾウではメンバーを大募集中です。メルカリShopsの開発やソウゾウに興味を持った方がいればぜひご応募お待ちしています。詳しくは以下のページをご覧ください。
Software Engineer
Software Engineer, Site Reliability
Software Engineer (Internship) – Mercari Group (※新卒採用に応募するにはまずインターンへの参加をお願いしています。)
またカジュアルに話だけ聞いてみたい、といった方も大歓迎です。こちら の申し込みフォームよりぜひご連絡ください!

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