天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

「Souzoh Tech Talk vol.2 メルカリShopsの技術スタック、その後」に参加してきた

mercari.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていきます。

会の概要

以下、イベントの概要欄から引用です。

Souzoh Tech Talk は各回テーマを設定し、様々な知見を共有しあうことを目的とした勉強会です。昨年8,9月の開催から約半年、vol.2として帰ってきました!半年の間でのアップデートや変遷をご紹介します。 第1回のテーマは「メルカリShops の技術スタック、その後」です。 先日公開したEngineer Blogでもご紹介しましたが、 monorepoをはじめとしたメルカリShopsの技術スタックを、リリース後半年間を通してどのようにアップデートしてきたかについて、CTOの@suguruが更に詳しくお話しします。

イベントで印象的だったこと

monorepo

一つのサービスに必要なソースコードを集約するmonorepoを運用していて、良いことしかないという話が印象的でした。

サービス全体の見通しがよくなるため、全体を通した観点での品質担保や管理コスト削減*1などが具体的な例ということです。
CI/CDも充実しており、全体に対して行われるチェック(コードフォーマットなど)や各パッケージごとに対して行われるチェックの切り替えが自動でできるようにしているなどといったお話がありました。

Bazel

ビルドシステムとしてBazelを採用されているということですが、相性が結構言語によってはっきりと分かれるということでした。
具体的に言うとGoは使いやすい*2ですがJavaPythonは何ともいえない*3し、TypeScriptはyarn workspaceとの相性の悪さがあるため絶対おすすめしないということでした。*4

また、ネット上での情報が少なくベストプラクティスがないのはなかなかしんどいということでした。

Cloud runを用いたServerless Architecture

SREのエンジニアがそこまでいないというコンテキストもあり、K8sの複雑なマニュフェストと格闘しなくて良いCloud runは非常に使いやすいという話がありました。
ただサイドカーが存在しないのは複雑なデプロイを行う時に困りそうなので、今後システムが成長していくにつれて問題は顕在化していくかもしれないというお話がありました。

Feature Toggles

メルカリではUnleashを用いてTogglesの管理を行っているということでした。
Unleashは変な癖がないのでPMの方も使いやすいサービスで、採用して正解だったと考えているということです。

VPN経由のみでONになるフラグを用意することが出来るなど、様々なユースケースに対応できているようですが、複雑なTogglesの管理はUnleashだけで管理すると難しい(コンテキストが非常に複雑になる)ということでした。

全体を通した感想

様々な技術スタックについて、実際に運用した事例を聴くことができて非常に面白かったです。
多数の技術スタックを使用されていますが、使う時にそこまで深く検討せず10-20分くらいで採用することを決めて、運用しながら柔軟に判断をしていくことができる仕組みを考えているという話は、すごく共感できました。

メルカリさんは、凄い数のイベントを高頻度で公開されている上にCXOクラスの方がどんどん露出をされていて、改めてすごいなと感じました。

*1:言語を跨いだ統一的なワークフローを構築することも可能

*2:必要な部分だけをビルドし直してきたりといったことが起きてくるので、その時にキャッシュシステムの効果が発揮される

*3:ビルドをBazelで完結できる点は良いしDockerのコンテナをつくるなどは便利だがBazelの制約に縛られる場面もあるためGradleで良いと言われればそれまで

*4:Turborepoをその代わりに導入しているということです