こんにちは、ソウゾウで Software Engineer Intern をしている@sora です。約2ヶ月半のインターンシップも終わりに差し掛かってきました。
ソウゾウでは、エンジニアインターンの受け入れは初めてということで不安もありつつ入社しましたが、メルカリ全体ではインターンを盛んに受け入れていることやソウゾウ独自の工夫もあり、楽しくプロジェクトを終えることができました。
本稿では、
- 開発した類似商品レコメンド機能の概要
- ソウゾウでのインターンシップの様子
を紹介します。ソウゾウのインターンシップや新卒入社に興味がある方の参考になれば嬉しいです。
類似商品レコメンド機能とは
ソウゾウでは、メルカリShops という個人ではなくお店として商品を販売できるサービスを作っています。メルカリアプリ内の「ショップ」タブから簡単に閲覧・購入ができます。地方の美味しい野菜を農家さんから直接買うことができたり、メルカリとは少し違ったラインナップとなっています。
今回のインターンシップでは、このメルカリShops 内の商品ページに「この商品をみている人におすすめ」としてその商品に似ている商品群を表示する機能を担当しました。この機能は2022年3月中旬にリリース済みです。
メルカリShops は、Microservice アーキテクチャを採用しており、それぞれのサービスは Cloud Run 上で動いています。フロントエンドは Web ベース、BFF として GraphQL サーバー、そして Backend は Go や Python で稼働する Microservices 群となっています。その他の詳しい技術スタックについては『メルカリShops の技術スタックと、その選定理由』をご覧ください。
類似商品レコメンド機能の大まかなシステム構成は以下の通りです。内部的にメルカリShopsに出品しているショップとその商品は、それぞれ一意のIDによって識別されます。(以下商品IDと ショップIDと表記します。)
まず similarsearch という Microservice が、Client 側から商品ID を BFF を介して受け取ります。そしてこのサービスが指定された商品に似た商品群を返し、Client はそれを表示する、という流れになっています。
similarsearch service
今回この機能開発をするにあたり、similarsearch service を新しく作成しました。類似商品を返す仕組みは類似ベクトル検索技術を用いて実現されています。
メルカリShopsに出品されている商品は、「商品名 + 商品詳細 + カテゴリー名」の文字列が Word2Vec を用いて200次元のベクトルに変換され、Bigtable に保存されています。このテーブルは Row Key としてショップID、Column Qualifier として商品IDを用いています。
そして、Bigtable から取得した商品ベクトルを用いて Vertex AI Matching Engine により類似ベクトル検索を行います。この類似商品検索APIの仕組みや実装については『Vertex AI Matching Engineをつかった類似商品検索APIの開発』で詳しく解説されています。
Matching Engine の deploy された index に対してクエリを実行するには、index と同じリージョンのGCP上の仮想マシンから gRPC API を叩く必要があります。こちらのノートブック内の protocol buffer から生成された Go のクライアントライブラリを用いて類似ベクトル検索を行いました。
インターンシップの感想
ソウゾウは新しい会社ですが、育成型組織を目指しているということで、会社全体でジュニアなエンジニアも育成していく雰囲気が醸成されていると感じました。インターンに限らず New Member 向けの Onbording Quest というものがあったり、メンター制度、頻繁な1on1など、完全オンラインの中でもかなり快適なインターン体験でした。
技術的な体験に関しては、この類似商品レコメンド機能開発を通して Microservice から client までフルスタックに担当させてもらい、職種名によって役割を絞られない「全員Software Engineer」 というカルチャーを体感できて楽しかったです。その反面触ったことのない技術が多く、詰まることもありましたが、メンターさんに限らずそれぞれの技術に詳しい方が積極的にレビューや Slack Huddles でディスカッションしてくださる機会もあってスムーズにタスクを進行できました。
毎週、ソウゾウのエンジニアのカジュアルな交流の場としてCasual chat という時間があります。開発環境構築で詰まった際にその場で質問すると、CTO をはじめとして多くのエンジニアの方々が一緒にデバッグして解決してくださったのがとても印象深かったです。解決までの時間が早かったのももちろんですが、質問しやすい雰囲気で心理的安全性が高い組織だと感じました。
開発以外の面では、新型コロナウイルスの拡大に伴い全期間オンラインでのインターンシップでしたが、オンラインコミュニケーションの基盤が出来上がっていること、チーム内の Welcome ランチや2週に1回開催されている TGIF でチームの垣根を超えたコミュニケーションもできて楽しかったです。
—–
ソウゾウではインターンシップも募集中ですので、興味のある方はぜひ応募してみてください!
- Software Engineer (Internship) – Mercari Group (※新卒採用に応募するにはまずインターンへの参加が必要です。)
また、私が一期生として参加し、メルカリグループを知るきっかけとなった Build@Mercari が今年も開催されています。女性や LGBT+コミュニティの方など IT 業界のマイノリティ向けのプログラムで、これまで実務経験のない方もエンジニアリングを学べる機会となっているので、ぜひご覧ください。