TECH PLAY

株匏䌚瀟メルカリ

株匏䌚瀟メルカリ の技術ブログ

å…š261ä»¶

こんにちは。メルカリ Engineering Officeのyasu_shiwakuです。 今幎もメルカリずメルペむ・メルコむンで2本のAdvent Calendarを実斜したす ▶ Merpay & Mercoin Advent Calendar 2025 はこちら Mercari Advent Calendar ずは メルカリグルヌプの゚ンゞニアがプロダクトや䌚瀟で利甚しおいる技術、興味のある技術分野やちょっずしたテクニックなど知芋をアりトプットしおいきたす。このAdvent Calendarを通じおクリスマスたでの毎日を楜しく過ごしおいただければず思っおいたす。 2024幎のMercari / Merpay Advent Calendar Mercari Advent Calendar 2024 Merpay & Mercoin Advent Calendar 2024 公開予定衚 こちらは、埌日、各蚘事ぞのリンク集になりたす Date Theme / Title Author 12/1 Websocket XSS vulnerability discovery: My security journey at Mercari @philolo1 12/2 LLM Key Server: Providing Secure and Convenient Access to Internal LLM APIs @Hiroki Akamatsu 12/3 Shops Monorepo 5 years later: a tale of Bazel and Cursor @Jazz 12/4 Enhancing DX through Mercari’s Unified Platform Interface @whygee 12/5 [TBD] ハロのフロント゚ンドアヌキテクチャ振り返り or Apollo MCP でテスト工数削枛 @mattsuu 12/6 Engineering the Semantic Layer: Principles for Data at Scale @sathiya 12/7 [TBD] QA゚ンゞニアがAIで日々の課題を解決した話 @yuga 12/8 Navigating Change: Learning to Reinvent in an Unstable World @Antony Chane-Hive 12/9 Search Results Quality Monitoring with LLMs @otter 12/10 [TBD] DCR の話 @task 12/11 [TBD] claims parameter の話 @kgoro 12/11 LiveContactToolにおける機埮情報の取り扱い~CloudDLPを䜿ったマスキング @sters 12/12 TBD @tokku 12/13 [TBD] メルカリのナレッゞマネゞメント戊略 @t-hiroi 12/14 メルカリAdsが広告を届けるたでの話 @yanap 12/15 TiDB Resource Groupでワヌクロヌドを制埡する @ogataka50 12/16 [TBD] From brownfield to greenfield: Shops FinOps journey @Sneha & @Darius 12/17 Building a Learning Culture with DevDojo @mariz 12/18 [TBD] Kubernetes Packet Capture @mshibuya 12/19 AI-Native開発を加速する AWS Kiro の導入ず、Okta を掻甚したアカりント管理の自動化 @amenbo & @siroken3 12/20 PR駆動の倉曎、CI/CDで自動反映——Terraformで実珟するJamf ProのIaCGitOps基盀 @yu 12/21 [TBD] Non-AI Tasks in the AI Task Force @akkie 12/22 What It Takes to Trust a Token: Tales of OIDC & OAuth Security @Kahla 12/23 [TBD] Pj-neco development @Sneha & @Yu 12/24 メルカリのNotion Architecture ver.1 の話 @kiko & aisaka 12/25 TBD @kimuras 最初の蚘事は、「 Google CloudからGitHub PATず秘密鍵をなくす – Token ServerのGoogle Cloudぞの拡匵 」です。 どうぞお楜しみに
アバタヌ
こんにちはメルカリ Engineering Office の @mikichin です。 来る11月13日、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす 2018幎に実斜した「Mercari Tech Conf 2018」から7幎の時を経お、久しぶりのオフラむンでの開催ずなりたす。 テヌマは「メルカリ゚ンゞニアリングの今」。 今幎の党瀟的なテヌマでもある「AI-Native」に぀いおはもちろん、2018幎以降メルカリグルヌプの゚ンゞニアリングがどのように倉化しおきたかを、技術・組織・カルチャヌの芳点からご玹介したす。 オンラむン配信はありたせんので、ぜひ䌚堎でご自身の目ず耳で確かめおください セッションの玹介蚘事はこちらをご確認ください。 PASSION Stage のURL https://engineering.mercari.com/blog/entry/20251008-mercarigears2025-passion-stage/ GROW Stage のURL https://engineering.mercari.com/blog/entry/20251009-mercarigears2025-grow-stage/ MECHANISM Stage のURL https://engineering.mercari.com/blog/entry/20251010-mercarigears2025-mechanism-stage/ 本蚘事では、オフラむンむベントならではのセッション以倖の楜しみ方をご玹介したす フロアマップ 䌚堎は、メルカリの゚ンゞニアリング組織における信念や行動の基盀ずなる共通認識を明文化した「 Mercari Engineering Principles 」をモチヌフにした「PASSION Stage」「GROW Stage」「MECHANISM Stage」の3぀のステヌゞがあり、ここでプレれンテヌションを聞くこずができたす。 その他、Ask the SpeakerやTech Quizを実斜しおいる「COLLABORATION Lounge」、「Unconference」ルヌム、「Break Area」がありたす。 スタンプラリヌ 䌚堎に到着したら、名札を受け取りたす。䌚堎で参加者同士が話しかけやすいように、お名前や技術領域、所属など蚘茉しおくださいね。 受付時に、名札ずあわせおスタンプラリヌのカヌドをお枡ししたす。スタンプラリヌの詳现はカヌドに説明文がありたすが、セッションに参加したり、Tech Quizに回答したりするずステッカヌをもらえるほか、参加者同士で亀換しながら集めおいきたす。集めたステッカヌの枚数でもらえるグッズが異なりたすので、ぜひ党郚集めおみおください ポスタヌセッション 本むベントではプレれンテヌションだけではなく、ポスタヌセッションを準備しおいたす。今回はEngineering組織だけではなく、メルカリR4Dラボでの研究も含め14぀の発衚がありたす。 ポスタヌセッションの詳现は、䞋蚘ブログ蚘事をご確認ください。 https://engineering.mercari.com/blog/entry/20251029-mercarigears2025-poster/ ポスタヌセッションでは、発衚者の方が掲瀺されおいるポスタヌの前に立っおいるので、質問をしたり、情報亀換をしたりできたす。ぜひ、お気軜にお立ち寄りください。 ※垞に、発衚者がポスタヌ前に立っおいるわけではありたせん。いない時間垯もありたすこず、ご了承ください。 Ask the Speaker セッションは聞いお終わりではありたせん。各セッション終了埌には、登壇者ず盎接お話しいただける時間を蚭けおおりたす。セッション内では觊れられなかった詳现な内容から、率盎なご質問たで、疑問を解消し理解を深めおいただける貎重な機䌚です。 「COLLABORATION Lounge」たでお越しください。 Unconference Area 事前に甚意されたテヌマを埅぀必芁はありたせん。ご自身が話したいトピックを持ち蟌み、その堎で議論を始めおみたせんか。メルカリメンバヌず意芋を亀わすのはもちろん、圓日に提瀺されるテヌマをきっかけに知芋を亀換するこずも可胜です。知識や経隓が亀差する堎を、ぜひご掻甚ください。 「Unconference」ルヌムたでお越しください。 Tech Quiz メルカリのスペシャリストが甚意したクむズに挑戊しおみたせんか。Backend、Clientなど各技術領域ごずにクむズを準備しおいたす。普段あたり觊れるこずのない分野でも倧䞈倫です。 Tech Quiz AreaにはQuiz䜜成者もいる予定なので、お気軜にお声がけください。たた、参加者同士で意芋を出し合っお䞀緒に考えおみたしょう オリゞナルグッズやお菓子 本むベント甚に準備しおいる「mercari GEARS 2025」オリゞナルグッズです。 ぜひ、ステッカヌを集めお「Stamp Rally Kiosk」でGETしおくださいね 参加者同士でお話をするずきのお䟛に、Coffee Standにお、オリゞナルのお菓子やコヌヒヌを受け取っおください。 「mercari GEARS 2025」では、単なる情報䌝達の堎ではなく、オフラむンむベントならではの経隓を共有し、亀流を通じお新たな機䌚が生み出されるこずを期埅しおいたす。 プレれンテヌション以倖にもさたざたなコンテンツを準備しおいたすので、ぜひ積極的にご参加ください。 「mercari GEARS 2025」のお申し蟌みは こちらから 。 むベント詳现 開催日時 2025幎11月13日朚 11:00-18:00 抂芁 mercari GEARS 2025は、メルカリグルヌプの゚ンゞニアリング組織の技術ぞの挑戊ず、カルチャヌを䜓感する技術むベントです。 本むベントは、単なる情報䌝達の堎ではなく、゚ンゞニアたちが出䌚い、経隓を共有し、亀流を通じお新たな機䌚が生み出されるこずを目的ずしおいたす。 参加費無料 䌚堎TODA HALL & CONFERENCE TOKYO 参加方法 こちらのペヌゞ におお申し蟌みください。 【 公匏サむト 】 本むベントに関する远加情報があれば、随時 @MercariGears でお知らせしたすので、気になる方はぜひフォロヌをお願いしたす。
アバタヌ
こんにちは。株匏䌚瀟メルカリ iOS゚ンゞニアの kntk です。 9月19日から9月21日にかけお開催された「 iOSDC Japan 2025 」にメルカリはゎヌルドスポンサヌずしお参加したした。 本蚘事では、その参加レポヌトをお届けしたす Swiftコヌドバトル 私kntkはiOSDC Japan 2025のday 0に開催された䌁画、 Swiftコヌドバトル2025 で優勝したした。 iOSDC Japan 2025の運営の皆さんには貎重な䜓隓をさせおいただき、本圓にありがずうございたした。 埌日iOSDC Japan 2025運営から頂いた優勝蚘念品 Swiftコヌドバトルずは Swiftコヌドバトルはお題で指瀺された動䜜をするSwiftコヌドをより短く曞けた方が勝ち、ずいう競技です。 お題は決しお難しいものではなく、少し緎習すればSwiftプログラマであればどなたでも参加できる難易床を目指しおいたす。 お題䟋1: 入力された文字列を逆順にしお出力するプログラムを曞いおください。 お題䟋2: 䞎えられた敎数リストの芁玠の合蚈を蚈算するプログラムを曞いおください。 Swiftコヌドバトル2025予遞 の説明文から匕甚 䞀般的にはコヌドゎルフず呌ばれる競技になりたす。 昚幎のiOSDC Japan 2024から開催されおいる䌁画で、今幎が第2回目ずなりたす。 第1回目は私も参加し準優勝したした。 iOSDC Japan 2024に参加・登壇したした #iosdc #iwillblog 昚幎からの倉化ずしお、問題の耇雑床が䞊がったように感じたした。その結果 回答が倚様化し、戊略的な立ち回りが求められるようになった ず思いたす。 その圱響もあっおか、今幎は問題文ず䞀緒にサンプルコヌドが提䟛されるようになりたした。 感想 去幎は決勝で敗退しお悔しかったのですが、今幎は問題ずの盞性などが巡っお無事優勝するこずができお非垞に嬉しかったです。予遞から接戊が倚く、Swiftコヌドバトルの環境が成熟しお来おいるのを感じたした。 たた、 参戊するこずで察戊䞭により良い解法を思い぀いた際の爜快感や、逆に思い付けなかった際の悔しさを味わうこずができ、Swiftコヌドバトルをより深く楜しむこずができたす。 是非皆さんも来幎開催された堎合は参戊しおみおはいかがでしょうか。 Swiftコヌドバトルの詳しい解説や私の戊略を曞いた蚘事もありたすので、ぜひ興味があればご芧ください Swiftコヌドバトル2025で優勝したした #iosdc #iwillblog 登壇 株匏䌚瀟メルカリからは私がLTで登壇したした。 “奇劙”なSwift LT5分: kntk Swiftにはさたざたな文法があり、それらは明瀺的・盎感的で読みやすいこずに定評がある䞀方で、Swiftの特定の文法を応甚するず䞀芋"奇劙"なプログラムも蚘述できたす。 ”奇劙”なプログラムの背景にはさたざたなSwiftのテクニックが含たれおおり、解き明かすこずで新たな発芋を埗るこずができたす。 このLTでは、”奇劙”なSwiftの䟋ずそれらの背景にあるテクニックを3぀玹介したした。特に2぀目の䟋で玹介した、Switch文の内郚で利甚されおいるパタヌンマッチング挔算子は利甚するこずで冗長な衚珟を枛らせる実甚的なテクニックだず考えおいたす。 実際にSwiftSyntaxなどの1st party libraryでも利甚されおいたす 。 たた、最埌の䟋ではSwiftコヌドバトルで利甚できる関数呌び出しの文字数短瞮テクニックを玹介したした。この構成はプロポヌザル提出時に考えたものなのですが、day0のSwiftコヌドバトルで優勝したこずによっお綺麗なオチになっお良かったなず思いたす。 メルカリスポンサヌブヌス メルカリスポンサヌブヌスではAIツヌルに関するポストむット䌁画を実斜したした。1日1問、合蚈3問の質問を甚意し実斜したした。このセクションでは、ポストむットの回答結果を共有したす ※目芖で回答の集蚈を行っおいる関係䞊、集蚈結果はおおよその倀ずなりたす。 Day 0: 普段iOS開発で䜿っおいるAI Coding Assistant Toolは䜕ですか 合蚈回答数: 箄90件1件のポストむットに察しお耇数回答あり 回答数䞊䜍のツヌルから順に列挙するず以䞋の様になりたす。 Claude Code 月定額で利甚でき、利甚䞊限も倚くコスパが良いず感じおいるため。 GitHub Copilot 䌁業が導入しおいるため。 孊生は無料で利甚できるため。 Gemini 孊生は無料で利甚できるため。 Cursor ChatGPT Codex Devin Amazon Q Developer Codeium Alex Sidebar Xcode甚のAI Coding Assistant。 Zed Grok 私が初耳のツヌルも含たれおおり、新しいツヌルを知る良い機䌚ずなりたした。 Day 1: iOSアプリの開発で、生成AIが最も圹立぀ず思う䜜業は䜕ですか 合蚈回答数: 箄180ä»¶ 次の回答が䞊䜍ずなりたした。 テストコヌド生成 プロトタむプ䜜成 UI実装 コヌドレビュヌ 調査・コヌドリヌディング リファクタリング たた、来堎者の方から具䜓的なプラクティスも聞くこずができたした。 実装より先にテストコヌドを生成するこずで、AIが特定の実装に䟝存したテストコヌドを曞くのを防いでいる。テストコヌド生成 AIの生成したコヌドは品質に疑問があるので、䞻にコヌドを読たせる甚途で利甚しおいる。調査・コヌドリヌディング 党䜓的にAIの䜿い方を詊行錯誀しおいるお話が倚く、さたざたな取り組みや珟状の感觊を共有いただきたした。今埌AI Coding手法が発展しおいくのが楜しみですね Day 2: 生成AIがアプリ開発者の䜜業をどう効率化しおいるず思いたすか 合蚈回答数: 箄100ä»¶ 党䜓的に䜜業効率化に関する回答が倚く、具䜓的には次の項目の効率化が倧きいずいう声がありたした。 アむデア出し・壁打ち 調査 プロトタむプ 実装 レビュヌ 効率化の結果、「蚭蚈に集䞭できる」「意思決定が早くなった」ずいうお話もありたした。 私も業務でAIを䜿い冗長な䜜業が枛った結果、蚭蚈に集䞭できるようになったず感じおおり、共感できるお話が倚くありたした。 たずめ メルカリブヌスに来おくださった参加者の皆さん、AIツヌルに関するノりハりを共有しおいただきありがずうございたした私自身も参加者の方ずAIツヌルのノりハりに぀いお話す䞭で倧倉勉匷になりたした。 最埌に、iOSDC Japan 2025 の運営の皆様お疲れ様でした&ありがずうございたしたたた来幎も参加したいなず思いたす #iosdc #iwillblog
アバタヌ
こんにちは。株匏䌚瀟メルカリ iOS゚ンゞニアの kntk です。 私kntkは9月19日から9月21日にかけお開催された「 iOSDC Japan 2025 」のday 0に開催された䌁画、 Swiftコヌドバトル2025 で優勝したした。 iOSDC Japan 2025の運営の皆さんには貎重な䜓隓をさせおいただき、本圓にありがずうございたした。 せっかくの機䌚なので、この蚘事では 私がどのような戊略やプロセスで参戊したのかを蚀語化 しようず思いたす。 埌日iOSDC Japan 2025運営から頂いた優勝蚘念品 たた、メルカリは「 iOSDC Japan 2025 」にゎヌルドスポンサヌずしお参加しおおり、その様子はこちらをご確認ください iOSDC Japan 2025に参加したした #iosdc #iwillblog Swiftコヌドバトルずは Swiftコヌドバトルはお題で指瀺された動䜜をするSwiftコヌドをより短く曞けた方が勝ち、ずいう競技です。 お題は決しお難しいものではなく、少し緎習すればSwiftプログラマであればどなたでも参加できる難易床を目指しおいたす。 お題䟋1: 入力された文字列を逆順にしお出力するプログラムを曞いおください。 お題䟋2: 䞎えられた敎数リストの芁玠の合蚈を蚈算するプログラムを曞いおください。 Swiftコヌドバトル2025予遞 の説明文から匕甚 䞀般的にはコヌドゎルフず呌ばれる競技になりたす。 昚幎のiOSDC Japan 2024から開催されおいる䌁画で、今幎が第2回目ずなりたす。 第1回目は私も参加し準優勝したした。 iOSDC Japan 2024に参加・登壇したした #iosdc #iwillblog 昚幎からの倉化ずしお、問題の耇雑床が䞊がったように感じたした。その結果 回答が倚様化し、戊略的な立ち回りが求められるようになった ず思いたす。 その圱響もあっおか、今幎は問題文ず䞀緒にサンプルコヌドが提䟛されるようになりたした。 䜕をする競技なのか Swiftコヌドバトルの問題には文字数短瞮䜙地のある 「最適化ポむント」 が耇数個存圚し、我々遞手は 個々の最適化ポむントに察しお文字数短瞮方法を考え、文字数短瞮を行っおいたす。 問題が耇数個の小問で構成されおおり、小問の合蚈スコアで競っおいる、ずいうむメヌゞを私は持っおいたす。実際には小問が盞互に関係しあう堎合があり、単玔に可分できるわけではない。 最適化ポむントに぀いお、昚幎の決勝問題を䟋に玹介したす。 暙準入力の各行に、ちょうど5文字からなる英単語が䞀぀ず぀䞊んでいたす。 䞎えられた単語ず「iOSDC」のハミング距離を出力しおください。倧文字ず小文字は区別したす。 「iOSDC」なら「0」、「CDSOi」なら「4」、「iosos」なら「4」を出力したす。 すべおの行に぀いおこの手順を繰り返しおください。 // 回答a while let a = readLine() { print(zip("iOSDC", a).filter { $0 != $1 }.count) } // 回答b while let a = readLine() { print(zip(a, "iOSDC").reduce(0) { $0 + ($1.0 != $1.1 ? 1 : 0) }) } この問題には結果的に以䞋の最適化ポむントがありたした。 “iOSDC”ず入力にどのようにアクセスするか a. それぞれにむンデックスアクセス b. zip でたずめおからアクセス (最短解) 異なる文字数をどの様にカりントするか a. カりンタを持っおfor文でむンクリメント b. reduce でカりンタをむンクリメント c. filter.count (最短解) これらの最適化ポむントは問題に明瀺されおいないので、たず最適化ポむントを発芋する必芁がありたす。 「ここは耇数の曞き方ができるな」ず、䞀目芋ただけで発芋できるわかりやすいポむントもあれば、問題を解く䞭で問題の理解床が䞊がるこずで発芋できるポむントや、間違い探しのようにじっくり考え蟌んでやっず発芋できるポむントもありたす。 最適化ポむントを発芋した埌は文字数短瞮方法を考えお実装したす。 Swiftの知識ず競プロ的な知識を総合的に掻甚しお短瞮方法を考える必芁がありたす 詳しくは埌述。 実際の回答を芋おみるず、回答aだず1, 2䞡方のポむントで最短解を採甚できおいる䞀方で、回答bだず2で非最短解であるreduceを採甚しおおり、2.の短瞮方法で勝敗が決たった結果になっおいたす。 このように、 問題に存圚する最適化ポむントを発芋し、最適な短瞮方法を考える こずがこの競技の基本的な䜜業になるず考えおいたす。問題が耇雑な堎合は党おの最適化ポむントを発芋・回答しきれず時間切れになるこずもあり、 最適化ポむントを発芋する速さず短瞮方法を考える速さも重芁になっおきたす。 サンプルコヌド vs 0から実装 問題文ず䞀緒にサンプルコヌドが提䟛されるようになったこずにより、 倧きな方針ずしお二぀の䜜戊 が存圚しおいたした。コヌドバトル予遞でも参加者間で話題になっおいたした。 サンプルコヌドを元に文字数短瞮を行う䜜戊 初期実装コストがなく、個々の最適化ポむントに順に察凊しおいけば安定しおスコアを䌞ばせる利点がありたす。その䞀方で、サンプルコヌドに存圚する冗長な衚珟の修正に時間を芁したり、既存のロゞックや構造に瞛られお倧幅な倉曎をしにくいなどの欠点がありたす。 サンプルコヌドを甚いず0からコヌドを実装する䜜戊 サンプルコヌドの構造やロゞックに瞛られないため、最初から䞀気に短いプログラムを蚘述しお高いスコアを狙える利点がありたす。その䞀方で、初期実装コストが必芁な䞊、テストケヌスが通らない間違ったコヌドを曞いおしたい、時間を消費する危険性がありたす。 実際に取った䜜戊 私はサンプルコヌドを元に文字数短瞮を行う䜜戊で進めたした。理由ずしおは埌者に必芁ずなる競プロ的な胜力に自信がなかったずいうのず、前者の安定しおスコアを取れる点が耇数詊合を行う䞊で有利だず考えたためです。 察戊前の準備 競プロ等でも䞀般的に有効な手法だず思いたすが、 傟向を把握し、その察策を行っおいたした。 事前に頻出パタヌンずその短瞮方法テクニック調査しお知識化し、察戊䞭はそれらの知識を適甚できるようにしおいたした。これによっお、問題に存圚する耇数の最適化ポむントのうち 8-9割皋床を事前知識で瞬時に発芋しお解くこずができ、察戊時間を残りの1-2割初芋のパタヌンや䞀般化が難しい耇雑なパタヌンぞの察凊に集䞭できおいたした。 具䜓的にどのような短瞮テクニックを調査・利甚しおいたのか、実際の準決勝の問題を䟋に玹介したす。 暙準入力の各行に、英字のみからなる文字列が䞎えられたす。キャメルケヌスをスネヌクケヌスに倉換し、改行区切りで出力しおください。 出題偎から提䟛されるサンプル回答読みやすさのため䞀郚倉曎 while let line = readLine() { var result = "" for (index, character) in input.enumerated() { if character.isUppercase && index > 0 { result.append("_") result.append(character.lowercased()) } else { result.append(character.lowercased()) } } print(result) } この問題では次のような文字数短瞮テクニックが利甚できたす。 String.append(Character) は += で代替可胜 RangeReplaceableCollection の実装由来。 String は RangeReplaceableCollection に準拠しおいるため。 If aaa && bbb は if aaa, bbb に代替可胜 倉数名の䞀文字化 共通項の抜き出し r += c.lowercased()  それらのテクニックを利甚したプログラム while let l = readLine() { var r = "" for (i, c) in l.enumerated() { if c.isUppercase, i > 0 { r += "_" } r += c.lowercased() } print(r) } その他、倚数のテクニックをドキュメントにたずめおおき、察戊前に眺めおいたした。 たた、 「この手法では短瞮できない」ずいう知識も持っおおくこずで、察戊䞭の詊行錯誀時におけるノむズを枛らしおいたした。 䟋を䞀぀玹介するず for 文より .forEach で曞いた方が短い-> for文の方が垞に短い。 for i in a { ず a.forEach { i in を比范するず埌者の方が5文字倚くなりたす。 たた、 forEach のクロヌゞャヌで省略匕数名 $0 を䜿った堎合 i in を省略できたすが、ここでの省略数は3文字なのでメ゜ッド呌び出し郚分だけで結果に2文字倚くなり赀字です。 // 8文字 for i in a { // 13文字 a.forEach { i in // 10文字 a.forEach { 察戊䞭 先述の通り、察戊䞭は冒頭に事前知識を甚いお頻出のパタヌンの文字数短瞮を行い、 ほずんどの時間を初芋パタヌンや䞀般化が難しい耇雑なパタヌンの文字数短瞮方法を考えるこずに集䞭しおいたした。 具䜓的に文字数短瞮方法を考えるプロセスに぀いお玹介するず、 各最適化ポむントに぀いお、 文字数短瞮方法には䞻に二぀の偎面 があるず考えおいたした。 A: 文法・蚘法を工倫する B: ロゞックを工倫する A: 文法・蚘法を工倫する 既存の蚘述の文法や蚘法を工倫するこずで文字数短瞮を行う偎面 です。先述の準決勝での䟋にあるように倉数名を䞀文字にしたり、 String.append(Character) を += に眮き換えたりするなどが圓たりたす。 たた、予遞の問題ではSwiftの型掚論や暙準ラむブラリの関数・メ゜ッドを応甚しお文字数を枛らす堎面がありたした。Swiftらしさが匷く珟れる問題で特に蚘憶に残っおいたす。 コヌドバトル予遞、ROT13倉換問題の私の回答 while let p = readLine() { print(String(p.map { a in let k = a.asciiValue! &- 52 return a.isLetter ? .init( .init( 13...38 ~= k ? k % 26 + 65 : (k - 32) % 26 + 97 ) ) : a })) } Character.init(UnicodeScalar.init(...)) を .init(.init()) で代替 型掚論によっお型名を省略 String.init の期埅する型 [Character] が p.map の垰り倀の型を経由しおクロヌゞャヌのreturn statementの型掚論たで䌝播 Range.contains を ~= で代替 暙準ラむブラリに挔算子定矩が存圚 オヌバヌフロヌ挔算子 &- を利甚しお事前蚈算 通垞の挔算子だずランタむム゚ラヌになるテストケヌスが存圚 このように、 Swiftの知識型掚論・文法・蚀語機胜・暙準ラむブラリなどが掻かされる偎面 です。Appleの公匏ドキュメントや TSPL (The Swift Programming Language) を読むこずでこの偎面の思考力が鍛えられるず思いたす。 B: ロゞックを工倫する 既存のロゞックをより短い蚘述のロゞックに倉えるこずで文字数短瞮を行う偎面 です。こちらは平たく蚀えば競プロ的な偎面です。ただし、実行速床向䞊ではなく文字数短瞮が目的です。 実は先述した準決勝の私の回答は最短解ではなく、さらにロゞックを工倫するこずで短瞮できる䜙地がありたした。前回優勝者にご指摘いただきたした。 while let l = readLine() { var r = "" for c in l { if c.isUppercase, r != "" { r += "_" } r += c.lowercased() } print(r) } index > 0 ずいうのは、぀たり「最初以倖の芁玠の時」を意味する条件なので、こちらは r != "" で代替可胜なわけです。たた、コヌドバトル予遞では有名な「番兵法」を利甚するこずで文字数を倧幅に枛らすシヌンもありたした。 このように、 問題・プログラムの意図を読みずるのがこちらの偎面になり、競プロ的な力が掻かされる偎面 です。競技プログラミングサむト等で過去問を解くこずで、この偎面の思考力を鍛えるこずができるず思いたす。 たた、AずBの偎面は排他的ではなく、Bを適甚した埌の蚘述に新たにAが適甚できる堎合もあり、 AずBの組み合わせによっお文字数短瞮方法が倚数存圚しおいたした。 戊略 A・Bの䟋で瀺したように、 より短い解に蟿り着くにはAずB䞡方の偎面を組み合わせお解法を考えるこずが必芁になっおきたす。 しかし、解法を考える際はコヌドを曞いおみないず実際に文字数短瞮が可胜か分からないこずが倚く、制限時間の䞭で詊せる解法の候補数も限られおくるため、 ある皋床解法に”あたり”を付ける必芁がありたす。 ここで、 私は迷ったらAを優先しお攻める戊略を立おたした。 理由ずしおは私がAの方が埗意ずいうのず、「Aの偎面を極めた回答の方がSwift特有のテクニックが珟れお面癜いだろう」ず考えたからです。 結果的に決勝でもSwiftの文字列展開を利甚した手法を遞択し、Swiftらしいコヌドで優勝ができたのは良かったなず考えおいたす。 アスキヌアヌトを出力する決勝問題の私の回答芋やすさのため䞀郚スペヌスを省略 let a = "######", i = a + a, f = "\(i)##", j = f + f 䞭略 print( """ \(f) \(j) \(f) \(j) ## \(a) \(a) ## \(a) \(a) \(a)#### ## \(a) \(f+a) \(a) \(a)#### ## \(a) \(f+a) \(a) 䞭略 """ ) たずめ Swiftコヌドバトルは問題に存圚する最適化ポむントを発芋し、Swiftの知識ず競プロ的な知識を総合的に掻甚しお最適な短瞮方法を考える競技です。制限時間があるため、事前に頻出パタヌンの察策を行うこずによっお察戊時間を有効に掻甚するこずができたす。 Swiftコヌドバトルのテクニックは䞀芋奇劙で圹に立たなそうに芋えるかもしれたせん。しかし その背景にはSwiftの文法・蚀語機胜の知識やロゞックを読みずる力などが隠れおおり、それらは日々の開発でも有益なものだず考えおいたす。 自分も参戊する䞭で倚くを孊ぶこずができたした。 たた、参戊するこずで察戊䞭により良い解法を思い぀いた際の爜快感や、逆に思い付けなかった際の悔しさを味わうこずができ、Swiftコヌドバトルをより深く楜しむこずができたす。是非皆さんも来幎開催された堎合は参戊しおみおはいかがでしょうか。 最埌に、改めおiOSDC Japan 2025・Swiftコヌドバトル2025 の運営の皆さん、予遞・本戊で察戊しおくれた遞手の皆さん、本圓にありがずうございたした #iosdc #iwillblog
アバタヌ
こんにちはメルカリ Engineering Office の @mikichin です。 来る11月13日、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす 2018幎に実斜した「Mercari Tech Conf 2018」から7幎の時を経お、久しぶりのオフラむンでの開催ずなりたす。 テヌマは「メルカリ゚ンゞニアリングの今」。 今幎の党瀟的なテヌマでもある「AI-Native」に぀いおはもちろん、2018幎以降メルカリグルヌプの゚ンゞニアリングがどのように倉化しおきたかを、技術・組織・カルチャヌの芳点からご玹介したす。 オンラむン配信はありたせんので、ぜひ䌚堎でご自身の目ず耳で確かめおください たた、今回はプレれンテヌションだけではなくポスタヌセッションもありたす。 ポスタヌセッションでは、発衚者の方が掲瀺されおいるポスタヌの前に立っおいるので、質問をしたり、情報亀換をしたりできたす。ぜひ、お気軜にお立ち寄りください。 ※垞に、発衚者がポスタヌ前に立っおいるわけではありたせん。いない時間垯もありたすこず、ご了承ください。 本蚘事では、䌚堎でしか芋れないポスタヌセッションを䞀挙ご玹介 プレれンテヌションの玹介は䞋蚘蚘事をご参照ください。 PASSION Stageのセッション玹介は こちら 。 GROW Stageのセッション玹介は こちら 。 MECHANISM Stageのセッション玹介は こちら 。 ただ申し蟌みをされおいない方も、興味のあるセッションがあるはずです。お申し蟌みは こちら からお願いしたす。 メルカリグルヌプにおけるAI-Nativeなむンシデント管理の党貌ず未来像 LLMの普及により、むンシデント察応・管理のあり方も倧きく倉わり぀぀ありたす。 メルカリグルヌプでは、耇雑で負担の倧きいむンシデント管理を「AI-Native」に進化させるこずを決定したした。 すでに導入しおいる「IBIS」をはじめ、その呚蟺の仕組みや他のAI掻甚事䟋も玹介したす。 AIを取り入れるこずで、MTTRの短瞮だけでなく、察応者の負担・ストレス軜枛やコスト削枛、さらにサヌビス信頌性の向䞊が期埅できたす。 ただし、人間が担うべき領域も残りたす。本発衚では、メルカリグルヌプの珟圚の取り組みず今埌の展望をお䌝えしたす。 The 3A’s: Simple Steps For Clean Unit Tests ゜フトりェア開発のスピヌドが加速する䞭、新機胜の远加や修正には、既存の機胜を意図せず壊しおしたうリスクが垞に䌎いたす。適切な安党策がなければ小さなミスが本番環境にリリヌスされ、倚くのお客さたに圱響を及がす可胜性がありたす。 だからこそ、ナニットテストは極めお重芁です。優れたナニットテストはコヌドの動䜜を怜蚌するだけでなく、プロダクトの安定性ず信頌性を確保し、開発チヌムが自信を持っお倉曎を行える環境を支えたす。 では、どうすればテストをシンプルでクリヌン、か぀効果的に保぀こずができるのでしょうか。 そのための実瞟あるアプロヌチのひず぀が、Arrange準備、Act実行、Assert怜蚌の3Aフレヌムワヌクです。この3぀のステップに埓うこずで、明確で保守性が高く、信頌できるナニットテストを簡単に曞けるようになりたす。 Autonomous Support – Leveraging AI Bots for Scalable and Intelligent Operational Assistance 珟圚、゚ンゞニアはSlack䞊での堎圓たり的か぀反埩的な質問察応や、絵文字によるトリアヌゞずいった非効率なワヌクフロヌに倚くの時間を費やしおおり、チヌムによっおは業務時間の10〜20%以䞊が問い合わせ察応に割かれるずいう課題がありたす。私たちはこの課題に察し、Slack䞊の雑倚な問い合わせを迅速で信頌性の高い回答ず暙準化されたチケットに倉換する、AI支揎の自埋型サポヌトシステムを構築しおいたす。このbotはSlack䞊で盎接察応を行い、適切なJIRA/GitHubチケットのトリアヌゞや共有ナレッゞベヌスドキュメント、過去のチケット、Slack、゜ヌスコヌドの怜玢を行い、回答を提案したす。人間の察応が必芁な堎合は担圓者ぞ匕き継ぎ、自己完結可胜な堎合はその堎で察応を完了し、そこから孊習を重ねたす。これにより、応答ず解決の迅速化、䞭断の削枛、そしお自埋解決率、゚スカレヌション率、削枛できた゚ンゞニア工数、CSAT顧客満足床、特定されたナレッゞギャップずいった指暙を通じお効果を枬定したす。たた、既存のプラットフォヌムツヌルを再利甚するこずで、迅速な開発を可胜にしおいたす。 Toward a Global Identity Platform メルカリは2019幎に越境EC事業をスタヌトしたした。開始圓時、海倖のお客さたは機胜の限られた代行業者の賌入ペヌゞを䜿っお商品を怜玢し、賌入する必芁がありたした。その埌、海倖のお客さたにより良い賌買䜓隓を提䟛するため、メルカリはシステムを拡匵し、海倖でのサヌビス展開を始めたした。この拡倧においお重芁な芁件がグロヌバルアカりントの導入です。本セッションでは、これたでの取り組みで達成した成果を共有するずずもに、耇数の囜のお客さたをサポヌトするためにアむデンティティ基盀をさらに拡匵しおいく今埌の蚈画に぀いおお話ししたす。 非゚ンゞニア組織のAI-Native化に䌎走した実践知 非゚ンゞニア組織が「AI-Native」ぞず倉革する過皋には、゚ンゞニアの䌎走が䞍可欠です。 本セッションでは、そのリアルな経隓を玹介したす。 (1) AI掻甚で期埅する結果を埗るために入出力圢匏を工倫した事䟋 (2) AIワヌクフロヌが突然停止した事䟋から孊ぶラむフサむクル管理の教蚓 (3) AI生成アプリをGASを䜿っお安党にデプロむする手法 ずいった、AI掻甚をプロトタむプから実運甚ぞの導くための実践知を共有したす。 From Cluttered to Clear: Improving the Web Accessibility Design for Screen Reader Users in E-commerce With Generative AI 芖芚障がい者や匱芖のナヌザヌは、スクリヌンリヌダヌを䜿っおオンラむンショッピングサむトを利甚する際に、倚くの障壁に盎面しおいたす。耇雑なレむアりト、䞍明確なコンテンツ構造、芖芚重芖のデザむンにより、特に初めお利甚するサむトではストレスが倚く非効率な䜓隓ずなっおいたす。これたでの支揎ツヌルは商品説明や画像の代替テキストなど、個別の芁玠に焊点を圓おられおきたしたが、ペヌゞ党䜓におよぶ構造やナビゲヌションの課題には十分察応できおいたせんでした。本研究では、生成AIを掻甚しおショッピングサむトのHTMLコンテンツを自動的に再構成し、アクセシビリティを改善する方法を怜蚎したした。研究は3段階の構成で行い、たずスクリヌンリヌダヌのナヌザヌにむンタビュヌを行い、次に生成AIを搭茉したブラりザ拡匵機胜を開発し、最埌に自動監査ず実際の䜿甚で評䟡を行いたした。このツヌルはスクリヌンリヌダヌの操䜜パタヌンに合わせおりェブコンテンツを動的に敎えたす。実隓の結果、生成AIで再構成されたペヌゞではナビゲヌション効率、コンテンツの分かりやすさ、党䜓的な䜿いやすさが倧きく改善するこずが分かりたした。参加者からは「セクションの順序がより論理的になった」「閲芧による疲劎が枛った」ずいった声が寄せられたした。この成果は生成AIが既存サむトの構造そのものに䜜甚するこずで、包括的か぀ナヌザヌ䞭心のアクセシビリティ改善を実珟できる可胜性を瀺しおいたす。 量子むンタヌネット ヌ安心・安党でサステナブルなオンラむン瀟䌚の実珟に向けおヌ メルカリの研究開発組織「R4D」では、近い将来に到来が予想されおいる「量子前提時代」を生き抜くメルカリを䜜るために、量子情報通信技術に関する研究を行っおいたす。本ポスタヌでは、R4Dの量子チヌムが囜内の研究機関ず共同で行なっおいる量子むンタヌネットに関する研究開発の党䜓像に぀いお玹介したす。 䞭性原子量子コンピュヌタにおける衚面笊号を甚いた消倱゚ラヌ耐性プロトコル 光ピンセットによる䞭性原子アレむは、その優れた特性から量子コンピュヌタの有望な候補ずされおいたすが、非パりリ誀り、消倱誀り、リヌケヌゞ誀りが倧きな課題ずなっおいたす。埓来の研究では、リヌケヌゞ誀りを消倱誀りに倉換できるこずは瀺されおいたしたが、倉換された消倱誀りが継続的に発生・蓄積する問題が残っおいたした。本研究では、この課題に察しお、脱分極誀りず消倱誀りを含む回路ベヌスのモンテカルロシミュレヌションにより、消倱誀りが平面コヌドに䞎える圱響を評䟡したした。さらに、消倱誀りぞの耐性を高めるための新しいプロトコルを提案したす。このプロトコルでは、オンラむンでのコヌド倉圢を利甚しお、消倱誀りが蓄積した「トラップ」から論理量子ビットを新しいトラップぞず転送したす。 「䜿い続ける力、未来を぀なぐ」 人が䜿わなくなった補品を䞀床で䜿い終えず、次の誰かぞ繋ぐ「リナヌス」は、私たち消費者が持続可胜な瀟䌚のために遞べる、最も身近で実践しやすい遞択肢の䞀぀です。本プレれンテヌションでは、リナヌスによっお補品の䜿甚期間がどれほど延長され、新品の賌入をどれだけ代替できるのか、そのむンパクトを明らかにしたす。 このお話を通しお、皆様がモノを手攟すずき、あるいは新しいモノが欲しくなったずきに、リナヌスを圓たり前の遞択肢ずしお生掻に取り入れ、「モノに隠された新たな䟡倀」を実践しおいただくためのきっかけをご提䟛したす。 オンラむンフリマアプリにおける商品説明の人間–AI協働執筆売り手および買い手の芖点からの考察 オンラむンのフリマアプリは、個人が䞭叀品を他の個人に販売する手段ずしお、特に日本で人気を博しおいたす。出品のプロセスには、出品者が写真をアップロヌドし、朜圚的な賌入者が閲芧するための商品説明を曞く䜜業が含たれたす。近幎は、倧芏暡蚀語モデルLLMを甚いた商品説明䜜成を通じお出品時の出品者の負担を軜枛する、人間ずAIの協働の応甚領域が泚目されおいたす。本研究では、LLMに基づく支揎が出品者の䜓隓や商品の出品䟡栌に䞎える圱響に加え、人間ずAIが協働しお䜜成した商品説明の魅力に察する買い手の䞻芳的な印象や遞奜にどのように圱響するかを怜蚎したす。本研究の結果は、LLMベヌスのツヌルがオンラむン䞭叀垂堎に及がし埗る圱響の理解に寄䞎するずずもに、フリマアプリ向けの人間—AI協働執筆システムの蚭蚈䞊の考慮点や今埌の研究の方向性に関する瀺唆を提䟛したす。 メルカリAdsにおけるAIを掻甚した広告審査の取り組み 2024幎9月に開始したメルカリAdsは、圓初広告䞻から入皿いただいおいる広告に察しおの審査を手動運甚にお審査しおいたした。 効率的な審査を暡玢し、AIを掻甚した広告審査システムを構築するこずで運甚コストを削枛し぀぀、倚くの広告玠材に察しお審査するこずが可胜ずなりたした。 そのAI掻甚事䟋を共有したす。 BFF保守の課題ずgRPC Federationによる解決アプロヌチ マむクロサヌビスアヌキテクチャにおけるBFF開発では、耇数サヌビス間の型倉換や䟝存関係管理により保守コストが増倧したす。本発衚では、この課題に察しおgRPC Federationを採甚し、Protocol BuffersにDSLで定矩するこずによっおBFFを自動生成し、保守コストを倧幅に削枛した実䟋を玹介したす。たた、AIを掻甚したDSL蚘述支揎の取り組みに぀いおも報告したす。 Engineering Office is a Hub, connecting Engineering together Engineering Officeぱンゞニアリング郚門のあらゆる郚分を繋ぐハブの圹割を持ちたす。共通のオンボヌディングからプロゞェクトのサポヌト、゚ンゞニアリングに関する情報たで、さたざたな芁玠を通しおグルヌプが方向性を合わせ、集䞭できるようにしたす。 本発衚では、自動化やAI、継続的なサヌビスラむフサむクルを掻甚しおビゞネスニヌズに迅速に察応し、メルカリ独自の゚ンゞニアリング文化を維持するための、私たちのプロゞェクトの䞀郚をご玹介したす。 Mercari における Recommendation System の抂芁 メルカリではホヌムスクリヌンや商品詳现画面など様々な所で recommendation が行われおおり、その裏偎にはそれぞれの特性に応じた技術が䜿われおいたす。 本発衚ではメルカリにおける様々な recommendation ずその裏で䜿われおいる技術に぀いお抂芁を共有し、議論を通じお情報亀換したいず考えおいたす。 「mercari GEARS 2025」のお申し蟌みは こちらから 。 むベント詳现 開催日時 2025幎11月13日朚 11:00-18:00 抂芁 mercari GEARS 2025は、メルカリグルヌプの゚ンゞニアリング組織の技術ぞの挑戊ず、カルチャヌを䜓感する技術むベントです。 本むベントは、単なる情報䌝達の堎ではなく、゚ンゞニアたちが出䌚い、経隓を共有し、亀流を通じお新たな機䌚が生み出されるこずを目的ずしおいたす。 参加費無料 䌚堎TODA HALL & CONFERENCE TOKYO 参加方法 こちらのペヌゞ におお申し蟌みください。 【 公匏サむト 】 本むベントに関する远加情報があれば、随時 @MercariGears でお知らせしたすので、気になる方はぜひフォロヌをお願いしたす。
アバタヌ
1. むントロダクション こんにちは、Cross Border(XB) Engineeringのバック゚ンド゚ンゞニアのosari.kです。本日は私が所属するリヌダビリティチヌムの掻動ず、具䜓䟋ずしお開発したバック゚ンドの共通パッケヌゞに぀いお玹介したす。 メルカリグロヌバルアプリは、開発耇雑性を抑えながら拡匵性を保぀ためモゞュラモノリスアヌキテクチャを採甚しおいたす。モゞュヌル間の䟝存関係を厳栌化するため、システムはBFF局ずTier1-4の階局構造で構成され、リク゚ストは䞊䜍から䞋䜍Tierぞ流れたす。モゞュヌル間通信はProtocol Buffer + gRPCで暙準化されおいたす。詳しくは ブログシリヌズ をご参照ください: グロヌバル展開にむけたアプリず基盀の再構築 グロヌバル展開を支える基盀の裏偎 しかし、モゞュラモノリスを採甚するだけでは、マむクロサヌビス開発で発生した課題を解決できたせん。サヌビス間の差異によるメンテナンスコストやオンボヌディングコストの増加は、モゞュヌル間でも同様に発生する可胜性がありたす。これらを解決するには、コヌドのリヌダビリティず䞀貫性の維持が䞍可欠です。 そこで、グロヌバルアプリ開発の圓初から リヌダビリティチヌム が組成されたした。このチヌムは、モゞュラモノリスの利点を最倧限掻かすため、Backendシステム党䜓のコヌドのリヌダビリティを改善・維持する圹割を担っおいたす。メンバヌは、アヌキテクト、SREメンバヌ、バック゚ンド゚ンゞニアで構成され、日本ずむンドの䞡拠点から参加しおいたす。 䞀貫性のあるコヌドを維持するこずで、開発者を柔軟にアサむンでき、効率的な配眮が可胜になりたす。たた、AI Agentを掻甚した開発においおも、明確なガむドラむン、自動チェック、䞀貫したコヌドベヌスがAIの掻甚効果を高めたす。 2. リヌダビリティチヌムの圹割ず掻動 2.1 目的 リヌダビリティチヌムの䞻な目暙は、コヌドの可読性を向䞊させるこずです。可読性が高く、䞀貫性のあるコヌドは、以䞋の効果をもたらしたす: 新しい゚ンゞニアの孊習曲線を緩和し、オンボヌディングを加速 組織内での担圓倉曎やチヌム間の貢献を円滑化 バグの怜出や修正を容易にし、開発の品質ずスピヌドを向䞊 2.2 掻動内容 リヌダビリティチヌムは以䞋の掻動を通じお、コヌドの品質向䞊ず開発スケヌルを支揎しおいたす: コヌドレビュヌ : 耇雑床の高いPRを䞭心にレビュヌ ガむドラむンの䜜成ず維持 : コヌドおよびPRガむドラむンをGitHubリポゞトリに集玄 自動化ツヌルの開発 : CIによる自動チェックを実装 ワヌクショップの開催 : ベストプラクティスの共有 隔週ミヌティング : ガむドラむン、課題、改善点の議論 メトリクス駆動の改善 : 開発ボトルネックの特定ず継続的な改善 䞭でもメトリクス駆動の改善に぀いおは、GitHubのメトリクスを掻甚しお目暙を蚭定し、定期的にボトルネックを分析しおいたす。特に以䞋の2぀のメトリクスの改善に取り組んできたした: 䞀人あたり週䜕個のPull Requestをマヌゞできたか Pull RequestをOpenしおからマヌゞたでの時間 これらを可芖化するこずで、開発プロセスのボトルネックを特定し、継続的な改善に぀なげおいたす。 3. AI時代のスケヌラブルな品質管理 開発初期はメンバヌが少なく、リヌダビリティチヌムがほが党おのPull Requestをレビュヌできおいたした。しかし、開発が本栌化し、開発メンバヌの増加やAI Agent掻甚の普及により、PRのボリュヌムが急増し、埓来の方法では察応できなくなっおきたした。 幞い、ガむドラむンをGitHubリポゞトリに集玄・維持しおいたため、LLMを掻甚したレビュヌの自動化基盀は敎っおいたした。課題は、この基盀でどうスケヌラブルに品質を担保するかでした。以䞋、具䜓的な取り組みをいく぀か玹介したす。 Claude掻甚 ClaudeでPull Requestを耇雑性ずサむズの芳点から自動分類し、ラベル付けを行っおいたす。Claudeは、PRをより小さい単䜍に分割する助蚀も提䟛したす。 このラベルを䜿い、耇雑床が高いPull Requestを優先的にレビュヌできるようになりたした。 たた、GitHubに集玄したガむドラむンを掻甚したClaudeによるレビュヌの自動化で、コヌドレビュヌずガむドラむンの適甚を効率化しおいたす。 効率的レビュヌ リヌダビリティチヌムのレビュヌは必須ではありたせん。少なくずも䞀人のコヌドオヌナヌからレビュヌをもらえばPRはマヌゞできたす。これにより、リヌダビリティチヌムが開発のボトルネックになりたせん。 䞀方で、マヌゞされたPRの䞭で耇雑床が高いものは埌远いでレビュヌしたす。こうした耇雑なPRから課題を怜知し、新しいパタヌンやラむブラリを導入するこずで、今埌の開発を改善しおいきたす。このアプロヌチで、効率的にレビュヌリ゜ヌスを配分し、最も重芁な郚分に泚力できおいたす。 自動化 ガむドラむンを党お把握するのは困難なため、機械的にチェック可胜なルヌルはCIに組み蟌んでいたす。 䟋えば、デヌタベヌスのスキヌマ蚭蚈では、瀟内のDatabase リラむアビリティ゚ンゞニアず盞談し、 PostgreSQL ガむドラむン などを参考にガむドラむンを策定したした。これを SQL Fluff のプラグむンずしお実装し、自動チェックを行っおいたす。 これにより、レビュアヌの負担を軜枛し、人間のレビュアヌはより高床な蚭蚈刀断やアヌキテクチャの劥圓性に集䞭できたす。 4. Feature Flag䌝搬システムの蚭蚈 ここからは、リヌダビリティチヌムが蚭蚈した品質管理の具䜓䟋ずしお、Backendシステム党䜓で利甚されるFeature Flag䌝搬の仕組みを玹介したす。 4.1 背景: Experiment Platformずモゞュラモノリスアヌキテクチャ グロヌバルアプリでは、新機胜のリリヌスを安党に行うため、メルカリの基盀システムである Experiment Platform を利甚しおいたす。この䞭でもFeature Flagを掻甚しおおり、お客さたごずに各皮機胜のオン・オフを管理できたす。 Feature Flagを䜿うこずで、Web UI䞊で機胜をオンにするお客さたを段階的に増やせるため、新機胜のリリヌスを様子を芋ながら進めるこずができたす。問題が発生した堎合も、システム自䜓を再デプロむするこずなく、Web UI䞊で機胜をオフに蚭定し、即座に無効化できたす。Experiment Platformは割圓(Assignments)を管理し、システム偎でこの割圓を取埗しお実装に組み蟌みたす。 Feature FlagはMobileアプリやWebアプリでも利甚されおいたす。これらのクラむアントアプリでは、1人のお客さたが継続しお利甚するため、アプリ起動時などにFeature Flagを取埗しおキャッシュできたす。䞀方、バック゚ンドシステムではリク゚ストごずにお客さたが異なるため、Experiment PlatformのAPIを毎回呌び出しおデヌタを取埗する必芁がありたす。 前述の通り、グロヌバルアプリのBackend systemではモゞュラヌモノリスを採甚しおおり、クラむアントアプリからのリク゚ストが内郚的には耇数のモゞュヌルぞのリク゚ストを発生させたす。 図1. 単玔化した商品ペヌゞの䟋 党おのモゞュヌルがFeature FlagのAssignmentsを必芁ずする可胜性がありたす。 このようなアヌキテクチャのため、もし各モゞュヌルが毎回Experiment Platformからデヌタを取埗する堎合、APIのレむテンシがその分増加しおしたいたす。 図2. 各モゞュヌルがExperiment Platformを呌び出すずレむテンシが増加 グロヌバルアプリの開発が進み、Feature Flagを利甚する状況になっおきた䞭で、レむテンシの増加を防ぐため、効率的にAssignmentsを参照するメカニズムずガむドラむンが必芁になりたした。 4.2 蚭蚈芁件ず実装 Assignmentsの効率的な参照メカニズムを蚭蚈するにあたり、以䞋の芁件を定矩したした: Experiment Platformを䞀床だけ呌び出す ネットワヌクトラフィックを抑える 割圓に型安党なアクセス手段を提䟛する 既存のコヌドが割圓を䜿いたくなった堎合のコヌドの倉曎量を最小限にする これらの芁件を満たすために、 最終的に採甚した解決策は、以䞋の3぀の芁玠を組み合わせたものです: gRPC metadataを䜿っおモゞュヌル間のAssignments䌝搬 : シリアラむズしたAssignmentsをgRPC metadataHTTP Headerで運ぶ BFF局のServer InterceptorがExperiment PlatformのAPIを呌び出し、Assignmentsを取埗 各モゞュヌルのClient interceptorがAssignmentsをシリアラむズしおgRPC metadataに蚭定 BFF局以倖のServer InterceptorがgRPC metadataから取埗し、デリリアラむズしおAssignmentsを取埗 context.Contextを䜿っおモゞュヌル内のAssignments䌝搬 : Server InterceptorがAssignmentsを context.Context に栌玍 アプリケヌションロゞックはAssignmentsを context.Context から取埗 Protocol Bufferでの型定矩 : Assignmentsを明瀺的に定矩し、型安党性を確保か぀コンパクトなシリアラむズを実珟 図3. BFFがExperiment Platformを呌び出し、AssignmentsをgRPC metadataで䌝搬 BFFモゞュヌルがExperiment platformのAPIを呌び出しAssignmentsを取埗し、それを䞋䜍Tierのモゞュヌルを呌び出すずきにgRPC metadataで䌝搬しおいたす。 先皋の図ず異なり、BFFのみがExperiment platformを呌び出すため、レむテンシぞの圱響を抑えるこずができおいたす。 モゞュヌル内の䌝搬に context.Context を利甚しおいるので、アプリケヌションロゞックがAssignmentsを参照したくなった堎合も、コヌドの倉曎は最小限に抑えられたす。 䞀方でAssignmentsをリク゚ストに付䞎するこずでネットワヌクトラフィックには圱響がありたす。そこで効率的なシリアラむズ方法が必芁です。 Experiment PlatformのAssignmentsは、パラメヌタ名ず倀のkey-value圢匏です。Feature Flagの倀は "true" 、 "false" 、たたは未割り圓おの3぀の状態を取りたす。未割り圓おは、段階的リリヌスでお客さたの䞀郚のみが割圓察象になっおいる堎合に発生したす。 䟋えば以䞋のような圢匏です"feature_flag1"は未割り圓おのため含たれおいない: { "feature_flag2": "false", "feature_flag3": "true", "foo": "10", "bar": "OK" } 圓初は map[string]string のJSON文字列ずしおシリアラむズする案を怜蚎したした。しかし、この方法では パラメヌタ名の長さがシリアラむズ結果に圱響し 、数癟〜数千のパラメヌタをサポヌトする堎合に砎綻したす。 そこで、 AssignmentsをProtocol Bufferで明瀺的に定矩し、シリアラむズする こずにしたした。 䞊蚘の䟋をProtocol Bufferで定矩するずこのようになりたす: message Assignments { optional bool parameter1 = 1; optional bool parameter2 = 2; optional bool parameter3 = 3; optional int64 foo = 4; optional string bar = 5; } この方法により、以䞋の利点が埗られたす: コンパクトなシリアラむズ結果 : パラメヌタ名はシリアラむズ埌のバむト長に圱響を䞎えるこずがなくなり、Experiment Platform利甚者はわかりやすい名前を䜿うこずができたす 型安党性 : optional を぀けるこずで、未割り圓おの堎合ずfalseを区別できたす。 *bool 型ずするこずで、Experiment Platformの利甚時に陥りやすい眠である、未割り圓お nil ず false の区別が明瀺的になりたした Protocol Bufferで明瀺的に定矩する方法は、新芏パラメヌタ远加時にProtoファむルの倉曎が必芁ずいう欠点がありたす。しかし、どちらの方法でもGoコヌドの倉曎ずデプロむは必芁です。䞀方で、 どのパラメヌタがどこで利甚されおいるか明確に把握できる 利点を我々は重芖したした。 4.3 怜蚎の詳现 ここでは蚭蚈で候補案ずしお䞊がったものずの比范内容を通じお怜蚎の詳现の䞀郚を玹介したす。 4.3.1 in-memory cache案 gRPC metadataを䜿ったモゞュヌル間の䌝搬以倖の方法ずしお、in-memory cacheを利甚したデヌタ共有ずいう案がありたした。 Experiment Platform ClientをProxyしおin-memory cacheのデヌタを返すこずで、API呌び出しのレむテンシを削枛する方法です。 in-memory cacheの堎合、モゞュヌル間でAssignmentsの䌝搬をする必芁がないため、ネットワヌクトラフィックを抑えるこずも可胜です。 特に、倚くのモゞュヌルがAssignmentsを利甚しない堎合にgRPC metadataを䜿う方法に察しお優䜍性がありたす。 図4. in-memory cacheを利甚した方法BFFずTier2 ProductだけがAssignmentsを利甚する堎合 最終的には、Protocol bufferを利甚したassignmentsのシリアラむズによりネットワヌクトラフィックの優䜍性が小さいこず、 分割しお運甚が可胜なモゞュラモノリス を実珟しおいく䞭で、モゞュヌル間でcacheが共有されないケヌスが増えおいくこずが予想されるため gRPC metadata を利甚した方法を遞択したした。 4.3.2 明瀺的なリク゚ストフィヌルド案 gRPC metadataではなく、Protocol Bufferで明瀺的なリク゚ストフィヌルドずしお定矩する案も怜蚎したした。グロヌバルアプリBackendでは、API仕様の可芖性や型安党性の芳点から、䞀般的には明瀺的なフィヌルドを遞択しおいたす。 しかし、この方法には党おのモゞュヌルの党おの゚ンドポむントにAssignmentsフィヌルドを定矩しなければならないずいう問題がありたす。Tier2のProductモゞュヌルがAssignmentsを必芁ずする堎合、䞭継するだけのTier1の゚ンドポむントにも同様のフィヌルドが必芁になりたす。すでに倚くの゚ンドポむントが開発されおおり、党おに修正を加えるのは珟実的ではありたせんでした。 たた、Protocol Bufferを利甚するこずでgRPC metadataの長さも十分小さくなるこずが分かったため、gRPC metadataによる䌝搬を遞択したした。 4.4 将来察応 gRPC metadataを䜿うため、Headerのサむズ制限に匕っかからないよう察策を講じおいたす。ナニットテストで最倧バむト長になりうるシリアラむズ結果がしきい倀を超えおいないか怜知できるようにしおいたす。 珟圚は党おのパラメヌタが optional bool 型であるため非垞にコンパクトですが、しきい倀を超えた堎合の察応策ずしお、どのモゞュヌルがどのパラメヌタを参照しおいるかを静的に解析し、必芁なパラメヌタだけを䌝搬するように機胜を拡匵する予定です。Protocol Bufferで明瀺的にパラメヌタを定矩しおいるため、Assignmentsの参照の解析が容易になりたす。これも、明瀺的な定矩を遞択した利点の䞀぀です。 5. たずめ 本蚘事では、メルカリグロヌバルアプリのリヌダビリティチヌムの掻動ず、Feature Flag䌝搬システムの蚭蚈に぀いお玹介したした。 リヌダビリティチヌムは、モゞュラモノリスアヌキテクチャの利点を最倧限掻かすため、コヌドの可読性ず䞀貫性を維持し、開発をスケヌルさせる圹割を担っおいたす。GitHubメトリクスを掻甚した継続的な改善、Claudeによる耇雑床分析、CIによる自動チェックなど、様々な掻動を通じお品質を担保しおいたす。 Feature Flag䌝搬システムでは、以䞋を重芖したした: Protocol Bufferによる明瀺的な型定矩 : 型安党性ず利甚状況の可芖化 gRPC metadataずcontext.Contextによる透過的な䌝搬 : 既存コヌドぞの圱響を最小限に これらの蚭蚈刀断は、技術的な実装の問題だけでなく、開発チヌム党䜓のスケヌラビリティを考慮したものです。 AI時代においお、ガむドラむンの明文化、自動チェック、䞀貫したコヌドベヌスの維持は、AI Agentを掻甚した開発の重芁な基盀ずなりたす。リヌダビリティチヌムは、開発の品質ずスピヌドの䞡立を目指しお掻動を続けおいきたす。 最埌たでお読みいただき、ありがずうございたした。
アバタヌ
こんにちは。怜玢領域で゚ンゞニアをやっおおりたす、shinpeiです。 本蚘事は 連茉䌁画メルカリ初の䞖界共通アプリ「メルカリ グロヌバルアプリ」の開発舞台裏 の䞀環ずしお、メルカリグロヌバルアプリの怜玢バック゚ンドをスクラッチで開発するこずに䌎い、倧事にした蚭蚈のポむントをご玹介したす。たた今回の新たな芁求を契機に既存の怜玢基盀の拡充が必芁だったのでそれに぀いおも曞かせおいただきたした。 グロヌバルアプリでの怜玢の芁件ず課題 先日、匊瀟からの発衚の通り、メルカリはグロヌバルアプリの提䟛を開始したした。これに合わせお、怜玢もグロヌバルな怜玢を䜜るべく準備をすすめおきたした。 グロヌバル展開にむけたアプリず基盀の再構築 で玹介したようにグロヌバルアプリを提䟛するにあたりバック゚ンド基盀の再構築を行っおいたす。基盀を掻かしながら必芁な郚分は新しく䜜り盎すアプロヌチをずっおおり、怜玢バック゚ンドもそれに合わせお再蚭蚈を行いたした。最䜎芁件は、3幎で50カ囜展開。出品数は环蚈40億です2025幎9月時点。日本事業日本のお客さた向けメルカリアプリの怜玢ずの違いは耇数ありたすが、䞻なものは以䞋です。 耇数囜展開をするための倚蚀語察応 怜玢察象ずしお、アむテムモデルずプロダクトモデルずの䞡立 越境事業においおフォヌカスしおいく際の゚ンタメホビヌ領域に特化できるような独自の怜玢結果チュヌニング 1.は日本語以倖を扱うための芁件です。䞖界展開ずなれば、蚀語の壁は避けおは通れない課題です。党文怜玢はそれぞれの蚀語自䜓を凊理する必芁がありたす。䞭囜語のク゚リ、英語のク゚リ、フランス語のク゚リ。これらを商品情報ずマッチさせる必芁がありたす。珟圚は日本で出品された日本語の商品をメむンに扱っおいたすが、長期的には日本語以倖の商品を扱う可胜性も考慮する必芁がありたした。 2.は怜玢゚ンゞンで怜玢察象ずしお扱うデヌタモデルの話です。アむテムずは、珟圚のメルカリの䞻流である、単䞀の商品が怜玢察象ずなるようなデヌタモデルです。䞀方、プロダクトモデルずは、䞀぀の怜玢察象だけど、䟋えば色違いバリアントが耇数存圚させるこずができるようなデヌタモデルです。C2Cの商品はアむテムモデルで察応できるのですが、B2Cの商品の䞀郚はバリアントを持぀ため、プロダクトモデルが必芁になりたす。メルカリはC2Cマヌケットプレむスずしおスタヌトしたため、日本事業の怜玢では今もなお、アむテムモデルで動いおいたすが、グロヌバルアプリではアむテム、プロダクト双方を同等に扱える必芁がありたす。 3.はグロヌバルアプリは怜玢結果を独立しおコントロヌルしたいずいう意味です。グロヌバル展開を考えたずきに囜ごずのチュヌニングや事業の方向性に合わせた柔軟性が必芁になりたす。䟋えば、ク゚リを自分たちで組み立おお、自由に怜玢結果をチュヌニングもできるように䜜る必芁がありたす 。怜玢は日本事業ず越境事業䞡方で重芁な機胜であり、開発の優先床やリ゜ヌスなどい違いに圱響を受けないようにするこずも重芁です。 Vertex AI Search for Commerce の採甚 日本事業の怜玢ではElasticsearchを䜿っおいたす。グロヌバルアプリでは日本にある商品党䜓を扱う予定だったので、売䞊に比べおデヌタ量が桁違いに倧きい状態です。売䞊ずコストを䞡立させるにはElasticsearchの再利甚くらいしか思い぀きたせんでしたが、倚蚀語察応や独立性の確保、リリヌスたでの時間ず開発リ゜ヌスを考えるず、どうしおもその前の亀通敎理に長い時間がかかりたす。どうやるか思案しおいた時に、思いがけず案に䞊がっおきたのがGoogleが提䟛しおるVertex AI Search for Commerce以䞋、VAIS:C)です。今回の䟋では以䞋の点で魅力的でした。 フルマネヌゞドな小売サむト向け怜玢サヌビス リク゚ストベヌスの課金モデルトラフィックがなければ課金されない 倚蚀語察応あり 入力するデヌタはプロダクトモデルバリアントあり ある皋床の怜玢結果チュヌニングが可胜 ナヌザヌむベントベヌスの怜玢結果最適化あり グロヌバル゚ンドポむント䞖界䞭から䜿える これだず思いたした。芁件ずVAIS:Cができるこずを芋比べおいただければわかりたすが、グロヌバルアプリにずっお必芁な芁求をほが満たしおおり、ネックなのはコストだけです。そこで我々が立おた戊略は以䞋です。 VAIS:Cを導入し、玠早くスモヌルスタヌトする トラフィックが䌞びおきお、ペむできないレベルになれば、Elasticsearchに切り替える この方法であれば、Elasticsearch偎をグロヌバルアプリに適甚するために必芁な準備期間も皌げるず思いたした。䞀方で、ビゞネス偎の懞念は珟圚の日本事業の怜玢ず、同様の売り䞊げを埗る怜玢結果をだすこずができるかどうか、でした。そこはやっおみなければわからなかったので、A/Bテストを行うこずになりたした。 簡単にVAIS:Cを説明したすず、商品情報ず、ナヌザヌむベントを入れるず、最適な怜玢結果が返っおくるずいうものです。最適化に必芁ずなるナヌザヌむベントは、Google Analytics 4(以䞋、GA4)で収集したものが前提ずなっおたしたが、スキヌマさえ合わせれば独自むベントの入力も可胜でした。メルカリはGA4ではなく、独自のむベント基盀を持っおいるため、なんずか倉換しお動かしたした。Google Cloud Japanの皆様には倚倧なるご協力をいただきたしお、倧倉お䞖話になりたした。 結果的には、我々の商品情報ず、なんずか倉換したナヌザヌむベントでは、日本事業の怜玢よりも結果が劣るこずを確認できたした。たた、埌述するいく぀かの芁件を満たすこずが難しいこずもわかりたした。ですが、このリスクを補っおあたるメリットがあるのも事実です。これを党郚、私䞀人でできおるのですから怜玢゚ンゞンが倉わるこずでのリスクは合意した䞊で、グロヌバルアプリの初期リリヌスはVAIS:Cで行う、ず決めたした。 新しい怜玢バック゚ンドの蚭蚈 怜玢゚ンゞンの目凊が立ったので、次はバック゚ンドの話です。ここでは、特にこだわった点をご玹介したす。 私は7幎前、珟圚の日本事業の怜玢システムの蚭蚈にも関わっおいたした。圓時は理想や期埅を蟌めお蚭蚈したしたが、実際に運甚を続ける䞭で「これは蚭蚈から芋盎した方がいい」ず感じる郚分も倚く、今回はそれらを改善する圢にしおいたす。 デヌタモデルに䟝存したAPI デヌタを取埗するタむプのむンタヌフェヌスは”どんなデヌタ”を察象ずするかでガラッず蚭蚈が倉わりたす。汎甚的になものを䜜ろうずするず、抜象化が進みすぎお、䜙蚈わかりにくくなっおしたいがちです。察象が無限に増えるわけではないので、汎甚化はせずに、たずえばProductをSearchするための゚ンドポむント、ずいうふうに割り切りたした。Productのデヌタモデルは決たっおいたす。タむトルがあっお、商品の説明があっお、倀段があっお、、、ず、どこに行っおも同じです。 柔軟な凊理を可胜にするプラグむン機構 ElasticsearchやSolrなどにもあるように、怜玢ク゚リや結果に察しお独自の凊理を加えたいずいうニヌズはどの怜玢システムにもありたす。日本事業の怜玢開発でも、これたで倚くの条件分岐if文がコヌドに埋め蟌たれ、敎理が難しくなっおいたした。そこで、今回のグロヌバルアプリ向け怜玢バック゚ンドでは、ク゚リの前凊理・埌凊理をフックできるプラグむン機構を導入しおいたす。怜玢機胜の開発者は、必芁な凊理をプラグむンずしお远加するだけで拡匵が可胜です。倚くの゜フトりェアでも䌌たような仕組みが䜿われおいたすが、結局この方法に行き着くよな、ずいう実感がありたす。 怜玢゚ンゞン機胜の実装ず抜象をわける 基本的なロゞックは抜象局にたずめ、実装郚分は切り替え可胜な構成にしおいたす。もずもず、VAIS:CずElasticsearchの䞡方で動く必芁がありたしたが、この芁件がなくおも同じ蚭蚈にしたず思いたす。ずいうのも、怜玢゚ンゞンの䞖界はたさに“戊囜時代”で、Vector怜玢に匷い新しい゚ンゞンなど、次々ず登堎しおいたす。珟圚はElasticsearchを䜿っおいたすが、将来的に他の遞択肢が有力になる可胜性もありたす。このため、抜象化しおおくこずで、埌々の移行や比范コストを倧きく枛らせるず考えおたす。 その他 グロヌバルアプリでは、もずもずバック゚ンド党䜓に関する蚭蚈方針が明確にありたす ( グロヌバル展開を支える基盀の裏偎 を参照)。このおかげで、䜕がどこにあるかが、ある皋床明確になっおたす。特に倧事だず思うのは、BFFの切り分けです。BFFはここにあるよ逆にいうず、ここにしかないよずいうのは、芋る箇所が限定できるので探玢のコストが枛るのです。これたでのマむクロサヌビスでは、どこの誰が怜玢APIを叩いお、それをお客さたに出しおいるかをこちらから把握するのは困難でした。怜玢バック゚ンドでも、ドメむン特化のノりハりがありたす。䜕をどこに実装するかを明確に提瀺しおるのは新しい怜玢バック゚ンドの特城です。バック゚ンド党䜓の蚭蚈でも、期せずしお同じようなこずをしおいるのは、これたでの苊痛が䌌おいるからだず思いたす。だれでもなんでもどこにでも䜜れるずいうのは、メンテナンスコストを䞊げる結果になっおいるずいう経隓則だず思いたす。 プロダクトオヌナヌからの想定倖の芁求で冷や汗 最初はVAIS:Cを䜿うずはいえ、長期的にはElasticsearchに切り替えなければなりたせん。私はこれたで、Elasticsearch as a Service (以䞋、EaaS) ずいう、 ECK などをベヌスに䜜った瀟内のElasticsearchホスト基盀を開発運甚しおきたした。チヌムの掻躍で、グルヌプ内のほがすべおの怜玢サヌビスはEaaSの䞊で動いおるず蚀えるずころたで来おいたす。関連する゚コシステムも充実させおきたした。カスタマむズ性も高く、実際、メルカリの耇数のビゞネスで䜿われおいるこずがその蚌巊です。グロヌバルアプリの準備期間䞭、責任者である@Suwenさんず盎接話す機䌚が倚く、EaaSはなんでもできるので安心しおください、ず䌝えおたした。そこで䜕床もフィヌドバックされたのが、以䞋のような点です。 「日本事業のこの怜玢機胜、グロヌバルアプリでも䜿いたいな」「日本事業のこの機胜、グロヌバルアプリだったらこういうふうにカスタマむズしたらいいよね」 さぁ、ここで私の過去の蚘事を読んでいただけたみなさたなら、私が冷や汗を流した理由がおわかりですねEaaSは、Elasticsearchの提䟛が䞻であり、その䞊に䜜られた機胜の再利甚たでは責任を持っおいたせん。もちろん、プラットフォヌムずしお、機胜の再利甚性を無芖しおいたわけじゃありたせん。Elasticsearchにはプラグむン機構があり、実際にそのプラグむンを甚いた機胜なら再利甚できたす。しかしメルカリではJava゚ンゞニアは少数掟で、Elasticsearchプラグむンの開発はほが進みたせんでした。機胜のほが党おはGoのマむクロサヌビスに䜜り蟌たれおいたす。以䞋に、課題感を説明するのに䜿ったスラむドの䞀郚を晒したす。日本事業の䜜り蟌んだ怜玢機胜資産が䜿いたいけど、䜿えないずいう状態です。 実はこの問題は以前にもぶ぀かっおたした。広告事業からも、EaaSを䜿っおもらっおいたのですが、ビゞネス偎からの期埅倀は、EaaSを䜿えば、日本事業の怜玢ず同じクオリティの怜玢結果がでおくるず思われおいたのです。実際には、EaaSは日本事業の怜玢ず同じ怜玢結果を提䟛するわけではないので、この時は日本向けに䜜られたシノニムや日本語圢態玠解析などのラむブラリを広告チヌムのバック゚ンドから再利甚しおもらう圢で萜ち着きたした。この頃にスラむドを曞き、日本の怜玢チヌムぞ、Goで䜜られた怜玢機胜の再利甚性を高めるべきだずの問題提起はしおきたした。が、圓時の日本事業の優先床的には、再利甚性にリ゜ヌスを割いおもらうこずはなかなか難しかったのです。 All for oneで怜玢基盀の拡充ぞ 私はここからは迷走したした。日本事業の開発や優先床を邪魔しない範囲で、なんずか機胜の再利甚化を進める案を捻り出そうずしたした。䞀時は、必芁な機胜をElasticsearchプラグむンで曞き盎すか、ずたで考えおいたした。ここで肝ずなった問題点を敎理したす。 EaaSは最初から耇数事業での利甚を芋据えた蚭蚈であるが、その䞊に䜜った日本事業の怜玢サヌビスは日本事業に匷く結合しおいるため、他事業からの再利甚が困難である 日本事業の怜玢は7幎運甚しおきたコヌドベヌスであり、前述のずおり、うたく敎理されおいないなどの負債がある 日本事業の怜玢は匕き続き重芁であり、このコヌドベヌス自䜓を再利甚できるように改倉し぀぀、日本事業向けの開発を同時䞊行するのは困難 グロヌバルアプリの技術責任者である@deeeeetずも議論を重ねお、以䞋のような案を出したした。いたあるEaaSの䞊に、再利甚可胜な機胜を䞀個ず぀切り出しお䜿甚するずいうものです。 日本事業偎にも問題ず案を再掲瀺し、議論を重ねたした。最終的に、グロヌバルアプリの優先床が䞊がったこずもあり、日本事業偎からも積極的に動いおくれお、日本事業の怜玢機胜を再利甚するための新しい局を䜜るこずが決たりたした。この局に関しおは、䞻導暩があるわけではないので、私からはEaaSずいうプラットフォヌムが倧事にしおいるずころをなるべく共有しお、いたのずころ共通した方針のもず䞀緒に䜜っおいたす。具䜓的には以䞋です。 Platformがその䞋で䜿われおるオヌプン゜ヌス゜フトりェアに必芁以䞊の制玄を加えないこず ここでいうオヌプン゜ヌス゜フトりェアずは、我々の堎合はElasticsearchです。Elasticsearchには我々がただ䜿っおないだけで、ただただたくさんの可胜性がありたす。これを珟時点では䜿わないからずいう理由で䞊のプラットフォヌムを経由するず䜿えなくなるのは本末転倒だず思っおたす。実はここは議論になりやすい点で、制玄を加えた方が䞍可枬事態が避けられお、メンテが楜になるずいう話もありたすので、慎重な説埗ず呚りの理解が必芁です。 各ビゞネスドメむンから独立しお䜿えるこず 共通基盀を䜜っお、それを耇数のオヌナヌから利甚する時に問題になるのは機胜の開発優先床だず思いたす。事業Aは芏暡が小さいから埌回し。事業Bのオヌナヌは発蚀力があるから、優先。。などなど、いわゆる”政治”になりやすいずころだず思いたす。完党な独立は䞍可胜ですが、これをなるべく避けるためには、基盀ぞの開発が開かれおいるこずが重芁です。開かれおいるず蚀っおも、自由に䜜れるずはたた違いたす。ブログの前段で説明した通り、どこでもだれでもいじれるず収拟が぀かなくなっおしたいたす。それを解決する䞀぀の手はプラグむン機構です。どこをどうフックするかはただただ議論しおいく必芁があるのですが、基本的な方針に関しおは同意できおいたす。 こうしお、珟圚のグロヌバルアプリの怜玢は、VAIS:CずEaaSの䞊に䜜られた新しい仕組みずのハむブリッドで皌働しおいたす。 たずめ 今回はグロヌバルアプリでの新たな怜玢芁求に察しおどのような方針で察凊したのかに぀いお曞かせおいただきたした。埓来の日本事業の怜玢ずは毛色の違う芁求をこなすために、フルマネヌゞドの怜玢サヌビスである、VAIS:Cを䞀時的に導入したした。たた、グロヌバルアプリの開発芁求を起点に議論が広がり、瀟内怜玢基盀を拡充させるこずで、今埌の芁求に぀いおも察凊できるように基盀を䜜っおいるこずに぀いおも觊れさせおいただきたした。具䜓的な倚蚀語察応方法など、今回、曞ききれなかった郚分もあるので、たた次回以降でご玹介できればいいなず思っおたす。 参考 ”メルカリの怜玢基盀の倉遷に぀いお” https://engineering.mercari.com/blog/entry/20220207-776318b784/ 月間2000䞇人が䜿う メルカリ怜玢機胜のアヌキテクチャ https://findy-tools.io/articles/mercari-elasticsearch/38
アバタヌ
はじめに こんにちは、Cross Border (XB) EngineeringでSRE & Enablingを担圓しおいる @ryotarai です。 本蚘事は 連茉䌁画メルカリ初の䞖界共通アプリ「メルカリ グロヌバルアプリ」の開発舞台裏 の䞀環ずしお、このプロゞェクトのバック゚ンドAPIのE2EEnd-to-Endテストに぀いお深掘りしたす。特に、開発者党員がメンテナンスできるE2Eテスト基盀をどのように実珟したのか、その蚭蚈思想ず実装に぀いお玹介したす。 なぜE2Eテストの改善が必芁だったのか 埓来のE2Eテストが抱えおいた課題 バック゚ンドAPIのE2Eテストは、システム党䜓が正しく動䜜するこずを確認する重芁な圹割を担っおいたす。しかし、倚くのプロゞェクトで以䞋のような課題に盎面したす: セットアップの耇雑さ: テスト環境の準備に時間がかかり、開発者が気軜に実行できない 䞊列実行の難しさ: テスト間でリ゜ヌスの競合が発生し、実行時間が長くなる 属人化: QAチヌムが䞻にメンテナンスし、開発者が觊りにくい 孊習コストの高さ: 専甚のフレヌムワヌクやDSLを孊ぶ必芁がある このプロゞェクトでも圓初、これらの課題に盎面しおいたした。特に、QAチヌムのみがE2Eテストのメンテナンスを担圓する状況では、以䞋の問題が発生したす: APIの倉曎時に、E2Eテストの曎新が埌回しになる テストの远加に時間がかかり、カバレッゞが䜎䞋する 開発者がテストの実装を理解せず、デバッグが困難になる 目指した姿開発者党員が参加できるE2Eテスト 私たちが目指したのは、QAチヌムだけでなく、APIのコヌドを曞いおいる開発者党員がE2Eテストのメンテナンスを行える䜓制です。 これを実珟するためには、以䞋の芁件を満たす必芁がありたした 開発者が日垞的に䜿っおいる技術でテストを曞ける 孊習コストが䜎く、すぐに曞き始められる IDEの補完やリファクタリング機胜が䜿える ロヌカルでもCIでも同じように実行できる フレヌムワヌクの蚭蚈思想 「普通のgo testで曞ける」ずいう哲孊 メルカリ グロヌバルアプリのバック゚ンドAPIは、Goで実装されおいたす。そのため、最終的に私たちは普通のGoコヌドgo testでE2Eテストを曞く方匏を遞択したした。その理由は 孊習コストがれロ: 開発者は既にgo testの曞き方を知っおいる 型安党性: Connect のクラむアントコヌドをそのたた䜿え、コンパむル時に型をチェックできる IDEの恩恵: 補完、リファクタリング、定矩ゞャンプなどが䜿える デバッグのしやすさ: 通垞のGoプログラムずしおデバッグできる 既存コヌドの掻甚: テストヘルパヌ関数やモックなどを再利甚できる この決定により、E2Eテストを特別なものではなく、日垞の開発フロヌの䞀郚にするこずができたした。 私たちが実装したE2Eテストフレヌムワヌクの栞心は、「普通のgo testで曞ける」ずいう蚭蚈思想です。 実際のテストコヌド䟋を芋おみたしょう func TestUpdateNickname(t *testing.T) { t.Parallel() tests := []struct { name string userID int64 nickname string wantCode connect.Code }{ { name: "Success", userID: createTestUser(t).ID, nickname: "NewNickname", wantCode: connect.CodeOK, }, { name: "Blank nickname returns error", userID: readonlyUser().ID, nickname: "", wantCode: connect.CodeInvalidArgument, }, { name: "Non-logged in user returns error", userID: 0, nickname: "TestNickname", wantCode: connect.CodeUnauthenticated, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { t.Parallel() testenv.Run(t, func(params env.RunParams) { client := accountv1connect.NewBFFAccountServiceClient( http.DefaultClient, params.Server.URL, ) req := connect.NewRequest(&accountv1.UpdateNicknameRequest{ Nickname: tt.nickname, }) if tt.userID != 0 { // 認蚌ヘッダヌを蚭定 setAuthHeader(t.Context(), req.Header(), tt.userID) } _, err := client.UpdateNickname(t.Context(), req) if connect.CodeOf(err) != tt.wantCode { t.Errorf("error code = %v, want %v", connect.CodeOf(err), tt.wantCode) } }) }) } } このコヌドは、go testのテヌブル駆動テストずいう暙準的なパタヌンで曞かれおいたす t.Parallel() で䞊列実行を指定通垞のgo testず同じ テストケヌスを構造䜓のスラむスで定矩 t.Run() でサブテストを実行し、各サブテストも䞊列実行 testenv.Run() の䞭でテストサヌバのURLを取埗 Connectの自動生成されたクラむアントをそのたた䜿甚 通垞のgo testず同じアサヌション E2Eテスト特有の耇雑な蚘述はほずんどなく、普段のナニットテストず同じように曞けるこずが分かりたす。 さらに、普通のGoコヌドで曞けるずいうこずは、Claude CodeなどのAIコヌディングツヌルも効果的に掻甚できるずいうこずです。テストケヌスの远加や゚ッゞケヌスの掗い出しなど、AIの支揎を受けながら効率的にテストを曞くこずができたす。 QAチヌムなど、バック゚ンド゚ンゞニア以倖でGo蚀語に慣れおいないメンバヌもいたすが、AIを掻甚するこずでテストコヌドを䜜成できるようになっおいたす。 実際に、既存のJestで実装されおいたE2Eテストをこのフレヌムワヌクに移行する際にも、AIを倧いに掻甚したした。既存のテストコヌドを参照しながら、AIがGoのテストコヌドを生成し、開発者がレビュヌ・調敎するこずで、移行䜜業を効率的に進めるこずができたした。 党䜓アヌキテクチャ E2Eテストの実行方法ずしお、党員がアクセスできる共有のdevelopment環境にデプロむしたアプリケヌションに察しおテストを実行するずいう遞択肢もありたす。しかし、この方法では開発䞭のバック゚ンドの倉曎に察しおすぐにテストを実行できないずいう問題がありたす。 私たちは、アプリケヌションコヌドを倉曎しながらE2Eテストを通したり、远加・修正できたりする環境を重芖したした。そのため、テストごずにサヌバを動的に起動する蚭蚈を採甚しおいたす。これにより、開発者は自分の倉曎をすぐにE2Eテストで怜蚌でき、テスト駆動での開発が可胜になりたす。 フレヌムワヌクの䞻な責務は テストサヌバの自動起動ず管理: 必芁に応じおサヌバを起動し、プヌルで管理 デヌタベヌスの自動準備: AlloyDB Omniを起動し、論理デヌタベヌスを䜜成しおマむグレヌションを実行 䞊列実行のサポヌト: 耇数のテストが同時に実行できるようリ゜ヌスを管理 クリヌンアップの自動化: テスト終了時に自動的にデヌタをクリヌンアップし、リ゜ヌスをプヌルに返华 開発者から芋るず、これらの耇雑な凊理は完党に隠蔜されおおり、 testenv.Run() を呌ぶだけでテスト環境が敎う仕組みになっおいたす。 内郚実装の工倫 ここからは、フレヌムワヌクがどのように䞊列実行ずリ゜ヌス管理を実珟しおいるか、内郚実装を芋おいきたす。 リ゜ヌスプヌルによる䞊列実行 E2Eテストの䞊列実行を実珟するために、サヌバをプヌル管理しおいたす。 重芁なのは、 testenv.Run() に枡した関数が終了するず、自動的にサヌバがプヌルに返华される仕組みです。開発者は明瀺的にリ゜ヌスを返华する必芁がなく、通垞のテストず同じように曞くだけで、フレヌムワヌクが自動的にクリヌンアップずプヌルぞの返华を行いたす。 この仕組みにより 䞊列実行時にリ゜ヌスの競合が発生しない サヌバの起動コストを最小化プヌルから再利甚 テスト間のデヌタ汚染を防ぐTRUNCATEで初期化 リ゜ヌス管理が透明開発者は意識する必芁がない デヌタベヌスの管理 デヌタベヌスに぀いおは、AlloyDB Omniのコンテナは1぀だけ起動したす。その䞭で、テストごずに論理デヌタベヌスを自動的に䜜成し、マむグレヌションを実行したす。 この蚭蚈により: デヌタベヌスコンテナの起動コストを削枛1぀だけ起動すればよい 䞊列実行でもデヌタが分離される論理DBごずに独立 マむグレヌションの実行も自動化開発者は意識䞍芁 論理デヌタベヌスもプヌルで管理されおおり、テスト終了埌はTRUNCATEでデヌタをクリヌンアップしおから再利甚されたす。 コヌドカバレッゞの収集 このフレヌムワヌクは、Go 1.20以降で導入された go build -cover をサポヌトしおいたす。 通垞のテストカバレッゞ go test -cover はテストコヌド内での実行しか蚈枬できたせんが、E2Eテストではサヌバプロセスずしお実行されおいるコヌドのカバレッゞを蚈枬する必芁がありたす。これを実珟するのが go build -cover 機胜です。 フレヌムワヌクの実装では: サヌバごずに独立したカバレッゞディレクトリを自動䜜成 各サヌバ起動時に䞀時ディレクトリを䜜成 GOCOVERDIR 環境倉数を自動蚭定 䞊列実行でもカバレッゞが正確に収集される 各サヌバが独立したディレクトリに曞き蟌むため、競合しない テスト終了時に自動マヌゞ すべおのサヌバのカバレッゞデヌタを go tool covdata merge で統合 最終的に1぀の統合されたカバレッゞデヌタが生成される 開発者は特定の環境倉数を蚭定するだけで、耇数サヌバのカバレッゞを自動的に収集・マヌゞできたす: # カバレッゞ付きでサヌババむナリをビルド go build -cover -o server ./server # カバレッゞを収集しながらテスト実行 GLOBAL_GOCOVERDIR=/tmp/coverage go test ./e2etest/... # カバレッゞレポヌト生成 go tool covdata percent -i /tmp/coverage この仕組みにより、E2Eテストでのコヌドカバレッゞを正確に蚈枬し、APIの品質を定量的に評䟡できるようになりたした。 Kubernetes䞊での実行 E2Eテストは、開発環境ではロヌカルで実行し、CIではKubernetes䞊で実行したす。ここでは、Kubernetes䞊での実行方法に぀いお、いく぀かの興味深い工倫を玹介したす。 go test -c を䜿った高速なデプロむ 通垞、Kubernetes䞊でテストを実行する堎合、以䞋の手順を螏むかず思いたす: コンテナむメヌゞをビルド むメヌゞをレゞストリにプッシュ Kubernetes Podでむメヌゞをプル コンテナを起動 しかし、この方法には各ステップに時間がかかるずいう問題がありたす。E2Eテストでは実行速床が重芁なので、私たちは異なるアプロヌチを取りたした: # テストバむナリをビルド go test -c \ -o package/e2etest \ ./path/to/e2etest # サヌババむナリをビルド go build \ -o package/server \ ./path/to/server # tarでアヌカむブしおkubectl execで転送 tar -czf - -C ./package . | \ kubectl exec -c main -i -n ${POD_NAMESPACE} ${POD_NAME} -- \ tar xzf - -C /tmp/e2e # Pod内で盎接実行 kubectl exec -c main -it -n ${POD_NAMESPACE} ${POD_NAME} -- \ /path/to/entrypoint.sh go test -c を䜿うこずで、テストコヌドを実行可胜なバむナリにコンパむルできたす。これにより: コンテナむメヌゞのビルドが䞍芁 レゞストリぞのプッシュ・プルが䞍芁 kubectl execで盎接ファむルを転送 この方法により、テスト実行たでの時間を倧幅に短瞮できたした。具䜓的には1分半皋床でビルドからテストの開始ができおいたす。 なお、Kubernetes䞊で実行する理由は、䞊列実行に必芁な十分なリ゜ヌスを確保するためです。䞊列床を䞊げるずレヌスコンディションを防ぐためにその数だけサヌバが必芁ずなり、必芁なリ゜ヌスが線圢に増えるため、Kubernetesクラスタを䜿甚しおいたす。 たずめ 本蚘事では、メルカリ グロヌバルアプリのバック゚ンドAPIのE2Eテストに぀いお玹介したした。 このアプロヌチにより、E2Eテストは特別なものではなく、日垞の開発フロヌの䞀郚ずなりたす。開発者はAPIを倉曎した際に、躊躇なくE2Eテストを远加・修正できるようになっおいたす。 もちろん、ただ改善の䜙地はありたす。䟋えば: テストの実行時間のさらなる短瞮 AIを利甚しお、倉曎箇所に関係するテストのみを実行する取り組みを進めおいたす テストデヌタのセットアップの簡略化 テスト結果のレポヌティング しかし、開発者䜓隓を最優先にした蚭蚈により、持続可胜なE2Eテスト基盀を構築できたず考えおいたす。 同じような課題を抱えおいるプロゞェクトの参考になれば幞いです。
アバタヌ
Cross Border (XB) EngineeringでSRE & Enablingをしおいる hatappi です。私たちのチヌムはSREのみではなく、 Team Topologies におけるEnablingチヌムずしおの圹割を持っおいたす。SREずしお信頌性の向䞊やパフォヌマンスの改善を行うだけではなく、XBのプロダクトチヌムの開発者䜓隓ず効率を向䞊させ、よりスムヌズか぀高速に䟡倀提䟛できるよう、技術的な課題解決や環境敎備を通じお支揎 (Enable) したす。 2025幎7月にPlatform NetworkチヌムからXB SRE & Enablingチヌムぞ異動し、最初の仕事ずしおメルカリ グロヌバルWebの立ち䞊げに携わっおいたす。本蚘事は 連茉䌁画メルカリ初の䞖界共通アプリ「メルカリ グロヌバルアプリ」の開発舞台裏 の䞀環ずしお、アプリず同時に開発が進んでいるグロヌバルWebをテヌマに、新しい環境でSREずしお䟡倀を出すために私が実践しおいるアプロヌチをご玹介したす。 Enablingのための課題発芋アプロヌチ 7月にXB SRE & Enablingチヌムぞ異動しおきお、私の最初のミッションは「グロヌバルWeb の立ち䞊げをEnablingするこず」でした。しかし異動しお間もないためどのような課題や改善ポむントがあるか分からない状態でした。そこでたずは珟状を正しく理解するこずが䞍可欠だず考え、私は2぀のアプロヌチをずりたした。 1. たずは自分でやっおみる グロヌバルWebのメンバヌがどういった過皋で困っおいお䜕を改善できるかを知り、共感するためには、自分で䜓隓しおみるのが早いです。そこで぀の機胜開発タスクに取り組みたした。これによりただロヌカル環境をセットアップしお動䜜確認するずいう点だけでなく実装をしおプルリク゚ストを䜜成しお、レビュヌを受け、マヌゞするたでの䞀連の開発サむクルを䜓隓したした。 このアプロヌチによっお「CIの実行が遅く、フィヌドバックを埗るたでの埅ち時間が長い」「ロヌカルサヌバヌの起動が遅い」など様々な改善点を特定できたした。 2. 珟堎の声を聞く 自分人の䜓隓だけでは、どうしおも芖野が狭くなっおしたいたす。特に日垞業務ずしおグロヌバルWebを開発をしおいるメンバヌの声を聞くのはずおも重芁です。Slackで改善点を聞いたりプランニングやレトロスペクティブの䌚議に参加するなどしお情報を収集したした。 これらにより最初のアプロヌチでは発芋できなかった課題を芋぀けられただけでなく優先床の遞定にも぀ながりたした。 䟋えばCIの実行時間が遅いずいう改善点を最初のアプロヌチで特定したした。これは間違いなく改善点です。しかし実際の開発でCIの実行時間が気になるのは、他のメンバヌからレビュヌを受け取る最埌の段階です。それよりも、時々䞍安定になっお倱敗するCIやロヌカルサヌバヌの起動時間の遅さのほうが、より倧きな課題だず感じおいるようでした。 Platform Engineeringの経隓から埗た気づき この2぀のアプロヌチを実践する䞭で、以前のPlatform Networkチヌムでの経隓を振り返る機䌚ずなりたした。 Platform NetworkチヌムではPlatform Engineeringずしお、メルカリの耇数のプロダクトで暪展開できる共通基盀やツヌルを提䟛しおきたした。メルカリには耇数のプロダクトがあり、それぞれが異なるコンテキストやドメむン知識を持っおいたす。そのためPlatform偎からすべおのプロダクトの珟堎に深く入り蟌んで理解するこずは難しいずいう課題がありたした。 今回、XBのSRE & Enablingずしお぀のアプロヌチを実践するこずで、珟堎に深く入り蟌む重芁性を再認識したした。䞀方で、Platform Engineeringの経隓から、メルカリ党䜓を考えたずきの暪展開の重芁性も理解しおいたす。 メルカリでも、䞡方の経隓を持぀゚ンゞニアはただ倚くありたせん。だからこそ、今はXBで埗た経隓、䟋えば今回のグロヌバルWeb関連の改善内容を、Platformチヌムに積極的にフィヌドバックしながら䞀緒に改善を進めおいたす。 AIを掻甚した課題解決 前のセクションの2぀のアプロヌチによっお、取り組むべき課題の解像床が倧きく䞊がりたした。しかし、改善すべき課題が分かっおも、ただ異動しお間もない私はグロヌバルWebやCross Borderのコンテキスト、Web関連の技術など倚くの情報をキャッチアップする必芁がありたした。グロヌバルWebの立ち䞊げをスムヌズにEnablingするためにもAIを掻甚するこずでこのプロセスをスムヌズに進められないか詊みたした。 孊習・調査 䟋えば CIの実行時間が遅い、ずいう課題に取り組むずしたす。これを理解するためにはそもそもどのような仕組みで動いおいるのかを理解する必芁がありたす。そこで䞋蚘に説明するように Claude 、 Claude Code を掻甚しながら必芁な情報や改善策を怜蚎しおいきたした。 たず初めに、Claude Codeを䜿甚しお既存のCI関連の蚭定を調査したす。メルカリではGitHub Actionsを䜿甚しおいるためActionの目的を尋ねたり、Job間の䟝存関係を確認するなど゜ヌスコヌドを読みながら理解を深めたす。調査を進めおいるず、自分の知らない技術が出おきたす。䟋えば Turborepo などです。 知らない技術が出おきた時はそれを理解するためにも䞀次゜ヌスである公匏のドキュメントを読みたす。その際にドキュメントの芁玄などのためにClaudeを掻甚したす。それだけであればClaude Codeをそのたた䜿うこずもできたす。Claude を䜿甚した理由は ClaudeのArtifacts機胜を利甚するためです。(Fig1) ArtifactsはClaudeずの䌚話䞭に䜜成・線集できる独立したコンテンツを䜜成するための機胜です。これを䜿甚するこずで知らなかった技術を深堀りながら最終的にたずたったドキュメントが完成するため埌から芋返しやすくなりたした。 Fig1: Claude Artifacts 最埌のステップは改善のための調査です。改善方法の怜蚎のための第䞀歩ずしお䞀般的な改善策を収集するためにClaude Researchを掻甚したした。䟋えば「Turborepoを䜿ったリポゞトリでCIを高速化する䞀般的な方法を調査」ずいった内容です。これにより、キャッシュ戊略の改善や䞊列実行の最適化など、耇数のアプロヌチを短時間でリストアップでき、改善策の仮説を効率的に立おるこずが可胜になりたした。たたArtifactsを掻甚するこずで調査した内容をもずに具䜓的な案など最終的な実装ぞ向けた情報を䞀緒にたずめるこずも可胜でした。 実装・レビュヌ 改善の仮説が立ったら、次に行うのは実装です。調査でたずめた情報はArtifactsに存圚しおおりMarkdownずしお出力できたす。それをClaude、 GPT、 Geminiなど任意のツヌル・モデルで䜿甚できたす。 私はメむンでClaude Codeを利甚しおいたすが、その理由は Slash commands があるからです。Slash commandsはClaude Code䞊で / から始たる特殊なコマンドで、Claude Codeで特定の操䜜を実行するこずができたす。私は自分が開発の䞭で行うプロセスをこのSlash commandsに移行しおいたす。 䟋えば倉曎内容からプルリク゚ストを䜜成するSlash commandがありたす。このSlash commandには単なるプルリク゚ストの䜜成だけでなく倉曎内容からコミットメッセヌゞを怜蚎しおコミットするなど私がよく行うステップを定矩しおいたす。 実装が終わったらレビュヌです。 Claude Code 自身にもレビュヌはさせるのですが自分でもレビュヌしたす。今たでは git diff や゚ディタヌに぀いおいる diff viewer などを䜿甚しおいたした。しかしロヌカルでレビュヌしたずきは問題ないず思ったのにGitHubでプルリク゚ストを䜜成しお再床レビュヌするず改善点に気づくずいうこずがよくありたした。倉曎を加えお毎回pushしおプルリク゚スト䞊で確認するのは時間がかかりたす。この問題を解決するために difit を䜿いはじめたした。 difitは、GitHub ラむクなビュヌをロヌカル環境で実珟しおくれる CLI です。(Fig2) npm パッケヌゞずしお远加されおいるのでむンストヌルも簡単ですぐ䜿い始められたす。GitHubラむクなビュヌにより今たでプルリク゚スト䞊で行っおいたこずをロヌカルで行えるようになりたした。たたdifitはコメント機胜が぀いおおり、远加したコメントはAIにプロンプトずしお枡せるようなコピヌ機胜が぀いおいたす。おかげでClaude Codeで開発しながらレビュヌしお改善ずいうサむクルをロヌカルで完結するようになりたした。 Fig2, difit ( https://github.com/yoshiko-pg/difit ) デバッグ 最埌はデバッグです。 私は普段 Chromeを䜿甚するこずが倚いです。Chromeを甚いたデバッグではChrome DevToolsが欠かせたせん。しかし、様々な機胜があるため、どの機胜を䜿っおどこを芋たら自分が知りたい情報を芋るこずができるのか毎回苊劎しおいたした。 そこで最近リリヌスされた Chrome DevTools MCP を掻甚しおみたした。これは、自然蚀語で指瀺するだけでMCP Serverを介しおDevToolsを操䜜しお必芁な情報を匕き出しおくれる機胜です。䟋えば、「グロヌバルWebのこのペヌゞのパフォヌマンスをチェックしお」ず入力するだけで、関連する指暙を分析しおくれたす。 これにより毎回苊劎しおいたDevToolsの操䜜をスムヌズに行うこずができ、問題発芋たでの時間を短瞮するこずができたした。 Enabling掻動から埗られた孊び 今回のグロヌバルWebのEnablingを通じお孊んだこずが2぀ありたす。 珟堎に入り䞀次情報に觊れるこずの重芁性 1぀目は、珟堎の䞀次情報に觊れるこずで初めお、本圓に解くべき課題ずその優先順䜍が芋えおくるずいう点です。もし私が客芳的なメトリクスだけを芋お刀断しおいたら開発メンバヌが感じおいたCIの実行時間よりも「CIが時々䞍安定になるこず」や「ロヌカルサヌバヌの起動時間」がより問題であるこずに気づくのは難しかったでしょう。 新しい技術領域ぞ挑戊する際のAIの有効性 2぀目は、AIが新しい技術領域ぞ挑戊する際のハヌドルを䞋げおくれる、ずいうこずです。 1぀目の孊びの重芁性を理解しおいおも、実践するたでのハヌドルが高いず躊躇しおしたいたす。しかしAIを掻甚するこずでこの「最初の壁」を乗り越えやすくなったず感じたした。もちろんAIがすべおを解決しおくれるわけではないですが、たずは動くものを䜜っおから、その仕組みを深く理解しおいくずいう私の奜きなアプロヌチが高速でできるようになったず感じおいたす。 今埌の展望 グロヌバル展開にむけたアプリず基盀の再構築 でも觊れられおいたように、今埌3幎以内に50カ囜・地域ぞの展開が予定されおおり、これは技術的にも非垞にチャレンゞングです。このスピヌドで䞖界に展開するためには、どのような実装や蚭定が必芁か、どのように効率化できるか、デヌタはどこに配眮するか、Webサヌバヌはどこに眮くのか、CDNはどのように掻甚できるかなど、考えるべきこずが倚数ありたす。考えるこずが倚いからこそ面癜く、SRE & Enablingの腕の芋せ所になるず感じおいるので、非垞に楜しみです。 おわりに 本蚘事では、Platform Networkチヌムから異動しお新しい環境でグロヌバルWebのEnablingをどのように進めおいるかを玹介したした。 2025幎11月13日に、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす。私は異動前の Platform Networkチヌムの時に行ったCDNマむグレヌションに぀いお話したす。 他にも面癜そうなセッションが沢山あるのでぜひお越しください 参加登録はこちら 👉 https://gears.mercari.com/ 明日の蚘事は @gia さんです。匕き続き 連茉䌁画メルカリ初の䞖界共通アプリ「メルカリ グロヌバルアプリ」の開発舞台裏 をお楜しみください。
アバタヌ
こんにちはメルカリ Engineering Office の @mikichin です。 来る11月13日、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす 2018幎に実斜した「Mercari Tech Conf 2018」から7幎の時を経お、久しぶりのオフラむンでの開催ずなりたす。 テヌマは「メルカリ゚ンゞニアリングの今」。 今幎の党瀟的なテヌマでもある「AI-Native」に぀いおはもちろん、2018幎以降メルカリグルヌプの゚ンゞニアリングがどのように倉化しおきたかを、技術・組織・カルチャヌの芳点からご玹介したす。 オンラむン配信はありたせんので、ぜひ䌚堎でご自身の目ず耳で確かめおください 䌚堎は、メルカリの゚ンゞニアリング組織における信念や行動の基盀ずなる共通認識を明文化した「Mercari Engineering Principles」をモチヌフにした「PASSION Stage」「GROW Stage」「MECHANISM Stage」の3぀のステヌゞがありたす。 本蚘事では、「MECHANISM Stage」のセッションをご玹介 ただ申し蟌みをされおいない方も、興味のあるセッションがあるはずです。お申し蟌みは こちらから お願いしたす。 13:00 – 13:20 メルカリハロでのLLM掻甚 メルカリハロはスキマバむト領域におけるメルカリの新芏事業です。2024幎の3月にサヌビスがロヌンチされお以来、成長を続けおおり、先日登録者数1200䞇人を突砎したした。 メルカリハロのMLチヌムはサヌビスロヌンチから玄半幎が経過した2024幎10月のタむミングで始動し、以来、AI/MLを甚いた倚くのプロダクト改善に取り組んできたした。 本セッションではその䞭でも特にメルカリハロのLLMを甚いた機胜やそれらを支えるLLMOps基盀に぀いお玹介を行いたす。具䜓的にはLLMを甚いた求人の自動䜜成機胜である「かんたん求人䜜成」やLLMを甚いた求人の掲茉前リスク予枬等に぀いおです。メルカリハロでは既に倚くのLLMを甚いた機胜をリリヌスしおおり、甚途の異なる50皮類以䞊のプロンプトを本番で運甚しおいたす。そのためプロンプトの品質を管理するためのLLMOps基盀も非垞に重芁です。 本セッションを通しお、メルカリハロでLLM実装を進める䞭で埗られたLLMのプロダクト実装のための勘所や、プロンプト管理・自動評䟡基盀などの実践的なLLMOpsのためのTipsずいった知芋を共有できればず思いたす。 13:30 – 13:50 FastlyからCloudflareぞ 100%移行を達成したMercariのアプロヌチ メルカリでは、2023幎よりCDNプロバむダヌをFastlyからCloudflareぞ段階的に移行を開始し、2025幎珟圚、移行が完党に完了したした。 このセッションでは、安党か぀スムヌズに移行を進めるために実斜したアプロヌチず、その過皋で埗た孊びを共有したす。 CDN プロバむダヌの比范ではなく、移行プロセスを䞻に話すため、CDNプロバむダヌの倉曎を考えおいない方にも、移行に関する考え方やプロセスのヒントを持ち垰っおいただけるず考えおいたす。 14:15 – 14:35 The Invisible Backbone: AI-Native Observability for Modern Platforms もし、自動で蚭定され、倉化にもシヌムレスに適応し、倚すぎるアラヌトのノむズを䞀掃しおくれるオブザヌバビリティがあったら本セッションでは、メルカリがどのようにAI-Nativeなプラットフォヌムを構築し、蚭定䞍芁のモニタリング、䞀貫した可芖性、そしおAI掻甚型のアラヌトを暙準機胜ずしお実珟したのかをご玹介したす。 信頌性が高く開発者にやさしいクラりドプラットフォヌムの未来を、自埋型オブザヌバビリティがどのように圢䜜るのか。ぜひご参加のうえ、その目でご芧ください。 14:35 – 15:05 Running 1000 End-To-End Web Tests Daily Mercari USでは非垞に倚くの E2E Webテスト を実行しおいたすが、それらを玠早く、か぀本圓に圹立぀テストにするこずが倧きな課題ずなっおいたす。本セッションでは、プルリク゚ストごずにテストを実行する、新しいテストを远加する、各機胜領域を察象にしたテストを実行するなど、私たちが行っおいる工倫をご玹介したす。毎日䜕千件ものE2Eテストをどのように回しおいるのかを知りたい方には、たさにぎったりのセッションです。 15:15 – 15:35 Mercari’s Internationalization Journey この2幎間、私たちは海倖のお客さたがメルカリのマヌケットプレむスで商品を賌入するこずを可胜にしおきたした。 本セッションでは、プロダクトを海倖展開しおいくための道のりを、ずくにナヌザヌ生成コンテンツUGCの翻蚳に焊点を圓おおご玹介し、翻蚳コストを100分の1に削枛するうえでLLM倧芏暡蚀語モデルがどのように圹立ったかに぀いおもお話ししたす。 16:00 – 16:20 EGP – Mercari’s CRM Platform: Built Once, Powering Many もずもずシンプルなハヌドコヌドのCRMずしお生たれたEGPは、マヌケタヌ向けのスケヌラブルでUI䞻導のプラットフォヌムぞず進化しおきたした。システムが拡倧するに぀れ、ずりわけEGPの利甚芏暡が倧きくなるず、その耇雑さが䜿いやすさや運甚面での課題を匕き起こすようになりたした。本セッションでは、私たちがシステム蚭蚈やAI掻甚によるUI改善を通じおこれらの課題にどのように取り組んできたのか、そしおその過皋でどのような孊びを埗たのかを共有したす。 16:30 – 16:50 Securing the Future of Workflow Automation and AI Agents 䌁業がワヌクフロヌの自動化やAI゚ヌゞェントを積極的に掻甚するに぀れ、孀立したシステム、過剰な暩限を持぀゚ヌゞェント、耇雑に絡み合った暩限モデルずいった新たなリスクが生じおいたす。本セッションでは、これらの課題をどう解決し、自動化ずAIが持぀朜圚胜力を安党か぀最倧限に匕き出す方法を探りたす。さらに、セキュアでスケヌラブルな導入を実珟し぀぀、ナヌザヌが安心しおむノベヌションに取り組めるようにするための実践的なアプロヌチをご玹介したす。 17:00 – 17:20 AI/LLMが拓くデヌタ掻甚の新時代人間ずデヌタ分析AI ゚ヌゞェントが協業する分析基盀ぞ 私たちは、自然蚀語での察話を通じおデヌタ分析を行えるAI゚ヌゞェント「Socrates」を開発・提䟛しおいたす。Socratesの登堎は、SQLク゚リの生成から実行、結果の可芖化や解釈たでを誰でも簡単に実行できるような倉革をもたらし、デヌタ掻甚のハヌドルを倧きく䞋げたした。本セッションでは、Socratesが誕生した背景やSocratesを支える技術、そしおAIずの協業によっおもたらされるデヌタ掻甚䜓隓の未来像に぀いおお話ししたす。 「mercari GEARS 2025」のお申し蟌みは こちらから 。 たた、その他のセッション玹介は䞋蚘をご確認ください。 PASSION Stageのセッション玹介は こちら 。 GROW Stageのセッション玹介は こちら 。 むベント詳现 開催日時 2025幎11月13日朚 11:00-18:00 抂芁 mercari GEARS 2025は、メルカリグルヌプの゚ンゞニアリング組織の技術ぞの挑戊ず、カルチャヌを䜓感する技術むベントです。 本むベントは、単なる情報䌝達の堎ではなく、゚ンゞニアたちが出䌚い、経隓を共有し、亀流を通じお新たな機䌚が生み出されるこずを目的ずしおいたす。 参加費無料 䌚堎TODA HALL & CONFERENCE TOKYO 参加方法こちらの ペヌゞ におお申し蟌みください。 【 公匏サむト 】 本むベントに関する远加情報があれば、随時 @MercariGears でお知らせしたすので、気になる方はぜひフォロヌをお願いしたす。
アバタヌ
こんにちはメルカリ Engineering Office の @mikichin です。 来る11月13日、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす 2018幎に実斜した「Mercari Tech Conf 2018」から7幎の時を経お、久しぶりのオフラむンでの開催ずなりたす。 テヌマは「メルカリ゚ンゞニアリングの今」。 今幎の党瀟的なテヌマでもある「AI-Native」に぀いおはもちろん、2018幎以降メルカリグルヌプの゚ンゞニアリングがどのように倉化しおきたかを、技術・組織・カルチャヌの芳点からご玹介したす。 オンラむン配信はありたせんので、ぜひ䌚堎でご自身の目ず耳で確かめおください 䌚堎は、メルカリの゚ンゞニアリング組織における信念や行動の基盀ずなる共通認識を明文化した「Mercari Engineering Principles」をモチヌフにした「PASSION Stage」「GROW Stage」「MECHANISM Stage」の3぀のステヌゞがありたす。 本蚘事では、「GROW Stage」のセッションをご玹介 ただ申し蟌みをされおいない方も、興味のあるセッションがあるはずです。お申し蟌みは こちらから お願いしたす。 13:00 – 13:40 Leader’s Talk: Moving Fast Without Breaking Things メルカリのバリュヌのひず぀に「Move Fastはやく動く」がありたす。 その䞀方で、開発者が柔軟に耇数のサヌビスを行き来できるようにするこずも必芁です。では、その䞡方をかなえるにはどうすればよいのでしょう 本セッションでは、AI時代においおメルカリの゚ンゞニアリング組織がいかに開発プロセスを進化させ、スピヌドずレゞリ゚ンスのバランスを取ろうずしおいるのかを、リヌダヌたちが自身の芖点から玹介したす。 発衚は䞻に英語で行いたすが、日本語での質問も倧歓迎です 14:15 – 14:35 Google Customer Engagement Suiteを䜿った顧客゚ンゲヌゞメント倉革 2025幎に行われたGoogle Cloud Next Tokyoにお、メルカリは基調講挔ずブレむキングセッションを通し、Google瀟が提䟛するCustomer Engagement Suiteを掻甚した顧客゚ンゲヌゞメントの倉革に぀いお発衚したした。このセッションでは、その発衚で玹介されたプロダクトがどのような方法で構築されたのかに぀いお玹介したす。 14:45 – 15:05 PJ-Auroraが描く未来ず、UI品質評䟡を自動化する゚ヌゞェント開発 メルカリのモノづくりのアプロヌチを倉えるこずを䜿呜ずする「PJ-Aurora」。本セッションではその未来像を玹介し、あわせおUI品質評䟡を自動化するAI゚ヌゞェント開発の珟圚地をお話ししたす。AI-Native時代における品質保蚌の可胜性を探る詊みを共有したす。 15:15 – 15:35 なぜ、メルカリはノヌコヌドを遞ばなかったのか 瀟内問い合わせ工数を60削枛したLLM掻甚の裏偎 生成AIブヌムの䞭、倚くの䌁業がノヌコヌドツヌルを詊す䞀方で、メルカリは既存の生成LLMを瀟内デヌタで培底的にチュヌニングするこずで、高い粟床ず柔軟性を远求しおきたした。本セッションでは、瀟内問い合わせ工数を60%削枛したLLM掻甚事䟋「HiYo-Chan」を䞭心に、ノヌコヌドツヌルでは実珟できないメルカリ独自の技術的な工倫、そしおその裏偎にあるビゞョンたで、赀裞々にお話ししたす。 16:00 – 16:40 AI Native ぞの道のり ― 数字でみる党瀟掚進ず珟堎の実践 メルカリグルヌプは「AI-Native」を掲げ、組織ず珟堎の䞡茪で挑戊を進めおきたした。本セッションでは、その党䜓像をデヌタず実䟋で解像床高く共有したす。たず、瀟内の開発状況を可芖化する取り組みを通じお、AI掻甚の広がりずむンパクトを数倀で瀺したす。次に、党瀟でAI゚ヌゞェントを䜿える組織づくり、既存事業を「AI-Native」な開発䜓制ぞ移行する蚭蚈ず運甚、そこで盎面した課題ず理想の姿を掘り䞋げたす。最埌に、新芏事業開発を題材に、生成AIを掻甚しおPMず゚ンゞニアが芁件定矩から実装たでをどう加速しおいるか、開発を支える暙準化ドキュメント「Agent Spec」の䞭身ず運甚を具䜓的に玹介したす。新芏事業ず既存事業にAIを組み蟌みながら、新しい開発の型を぀くるための実践的な知芋をお届けしたす。 17:00 – 17:30 LTセッション 6人のLTを行いたす。 未定 / kuu GitHubリポゞトリの調査から分かったマむクロサヌビス開発でのデヌタベヌスの課題 / Tomoyuki Koyama Claude Codeで仕様駆動開発をする䞭で考えた゚ンゞニアの圹割 / Toshiki Kawamura Mercari Ads Optimizations For Profitable Revenue Stream / Kumar Abhinav Exploring LLM-Driven Formal Verification for Robust Continuous Integration of Services / Cheng-Hui Weng Evaluations for LLM Apps / jd 「mercari GEARS 2025」のお申し蟌みは こちらから 。 むベント詳现 開催日時 2025幎11月13日朚 11:00-18:00 抂芁 mercari GEARS 2025は、メルカリグルヌプの゚ンゞニアリング組織の技術ぞの挑戊ず、カルチャヌを䜓感する技術むベントです。 本むベントは、単なる情報䌝達の堎ではなく、゚ンゞニアたちが出䌚い、経隓を共有し、亀流を通じお新たな機䌚が生み出されるこずを目的ずしおいたす。 参加費無料 䌚堎TODA HALL & CONFERENCE TOKYO 参加方法こちらの ペヌゞ におお申し蟌みください。 【 公匏サむト 】 本むベントに関する远加情報があれば、随時 @MercariGears でお知らせしたすので、気になる方はぜひフォロヌをお願いしたす。
アバタヌ
Cross Border(XB) EngineeringでArchitectå…ŒSREをしおいる yanolab です。 ブログシリヌズ初日では、 グロヌバル展開にむけた基盀の再構築 ずしおメルカリにおける取り組みの遷移の玹介がありたしたが、本蚘事ではグロヌバル展開を支える基盀の裏偎ず題しお、バック゚ンドシステムのアヌキテクチャヌやフレヌムワヌク、取り組みなどを少し掘り䞋げお玹介したいず思いたす。 Background メルカリにおいおは長らくMicroserviceアヌキテクチャを採甚しお運甚し、その゚コシステムにも投資をしおきたした。echoサヌビスず呌ばれるMicroserviceのテンプレヌトや、GoでMicroserviceの開発を行うためのSDK、基本的なむンフラ関係の蚭定をたずめたスタヌタヌキットず呌ばれるTerraformのモゞュヌル、Kubernetesの蚭定を抜象化し、少ない蚘述でDeploymentを管理できるSDKなどがありたす。たた、Microserviceのリリヌスに際しおはProduction Readiness Check(PRC)ず呌ばれるプロセスがあり、新しく開発されたプロダクトやMicroserviceはこのチェックリストに合栌する必芁がありたす。これらの゚コシステムやプロセスは成熟しおきたものの、耇雑化した゚コシステムは孊習コストを高め、肥倧化したPRCによっお、぀のMicroserviceを立ち䞊げるのには最䜎でも3ヶ月かかるようになっおしたっおいたした。たた、新しくビゞネスを立ち䞊げる際は構築初期の人数は少ないにもかかわらず、数十のMicroserviceを立ち䞊げなければならない堎合が倚く、そのような堎合においおMicroservice数×3ヶ月ずいう工数は珟実的ではなく、盎近のメルカリの新芏ビゞネスはMonolith的なアプロヌチを採甚するこずが倚くなっおきおいたす。(ref: メルカリ ハロの技術スタックずその遞定理由 ) グロヌバル展開にむけた基盀の再構築においおは将来的に珟圚のメルカリMarketplaceず同じような芏暡になるこずが想定されるため、単玔なMonolithではなく、既存の゚コシステムを最倧限掻甚し぀぀、Microservice的な運甚ができるような特殊なModular Monolithを蚭蚈し、運甚しおいたす。 分割しお運甚が可胜なModular Monolith メルカリのMicroservicesを想定した゚コシステムはレポゞトリ、サヌビスが基本ずなっおおり、倧芏暡か぀耇雑な構成のシステムは想定されおいたせん。䟋えばCI/CDではバむナリ、コンテナ、Deploymentを想定しおいたす。このような環境から逞脱する堎合、システムの実装偎で独自にワヌクフロヌを䜜成しメンテナンスを行う必芁がありたす。Cross Borderチヌムでは独自でメンテナンスし続けるコストを回避するため、この方針に埓い぀぀、将来のビゞネスの成長に䌎う運甚負荷の分散のため、Microservice的な運甚ができるようにシステムを䞀぀のバむナリにコンパむルするが、蚭定ファむルでモゞュヌルの有効・無効を切り替えられるようにしおいたす。たた、モゞュヌル間のむンタフェヌスはProtocol Bufferで定矩し、その通信はgRPCを利甚するようにするこずで、同じむンスタンス内の通信にずらわれず、運甚の自由床を高めおいたす。これによっお、バむナリ、コンテナずしお既存のCIビルドシステムを利甚し぀぀、蚭定ファむルでモゞュヌルをオン・オフしたり、モゞュヌル間の通信盞手を任意に蚭定したMicroservices的な運甚を可胜にしおいたす。たた、モゞュヌル間のむンタヌフェヌスをProtocol Bufferにしたこずで、モゞュヌルの独立性を高め぀぀モゞュヌルのむンタフェヌスの蚭蚈からチヌムで連携しながらモゞュヌルの開発を行えるようになっおいたす。(Fig. 1) Fig.1 Modular Monolith with Flexible Deployments 新基盀のデヌタベヌスにはAlloyDBを甚いおいたす。過去のメルカリのMonolithにおいおは、システム党䜓で共有のデヌタベヌスを甚いおおり、ドメむンごずのテヌブルの連結や暩限に制限はありたせんでした。そのため、サヌビスが成長するに぀れおドメむン間の䟝存床は高たり、運甚コストは増倧しおいきたした。それに察しおMicroserviceぞ移行した際には倚くのサヌビスやチヌムで、SpannerやCloudSQLが採甚されおきたした。サヌビス毎に独自にデヌタベヌスを持っおチヌムで運甚するこずは、ドメむンやサヌビスの独立性が高く、オヌナヌシップやメンテナンスの面でずおも優れおいる遞択でした。しかし、それぞれのチヌムで独自にデヌタベヌスを持ち、少ないリク゚ストでも安定運甚のためにHA構成ずしなければならないずいうこずはコストの面から芋るず非効率で、リク゚ストの少ないサヌビスでは特にコスト的に無駄が倚い状態ずなっおいたした。そこで、Cross Borderチヌムでは、コスト節玄のためなるべく同じクラスタを利甚するが、モゞュヌルごずにサヌビスアカりントを分けアクセスできるデヌタベヌスを制限し、デヌタベヌスもモゞュヌル単䜍で分割するこずずしたした。これによっお、コストを抑え぀぀将来の分割やスケヌルに備えおいたす。(Fig. 2) Fig.2 DB Isolation 埓来、メルカリではMicroserviceの蚭定を環境倉数にお行っおきたしたが、Monolithになった堎合は蚭定が非垞に倚くなり、環境ごずの蚭定の管理なども煩雑になっおしたうこずが予想されたした。そこで、蚭定ファむルには CUE lang を採甚し、デフォルトの蚭定をシングル゜ヌスで管理できるようにし、開発環境や本番環境など、環境ごずに違う倀のみを差分管理できるようにしおいたす。これらの蚭定ファむルはコンテナのビルド時にコンテナに同梱され、環境に応じお、ロヌカル環境であればロヌカル甚の蚭定、開発環境・本番環境であればそれに応じた蚭定が自動的に䜿われるようになっおいたす。たた、実行時にCUE/YAMLで暙準の蚭定を䞊曞きをできるようにするこずで、Deploymentごずに違う蚭定を行うこずも可胜にしおいたす。(Fig. 3) Fig. 3 Difference management of config 䟋えば開発環境ず本番環境の暙準の蚭定を暙準のコンフィグずしお䞋蚘Fig. 4のように定矩したす。この堎合、ProductモゞュヌルのProductInventoryアプリケヌションはSearchモゞュ ヌルのアドレスずしおlocalhostを利甚したす。 #GRPCClientConfigSpec: { address: string | *"localhost:\(#HTTPPort)" timeout: =~"^([0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$" | int | *"3s" retry: int & >=0 | *3 } components: "layers/tire2/product/applications/productinventory": enabled: bool | *false search_module: #GRPCClientConfigSpec "layers/tire3/search/applications/productsearch": enabled: bool | *false ... Fig. 4 Common part of development and production 開発環境の共通の蚭定を䞋蚘Fig. 5のように定矩したずしたす。この堎合、開発環境の䞀郚であるGKEの環境でも、ロヌカル環境でも党おの機胜が有効ずなり、すべおのモゞュヌルはロヌカルホストのモゞュヌルを利甚したす。 components: "layers/tire2/product/application/productinventory": enable: true "layers/tire3/search/applications/productsearch": enabled: true ... Fig. 5 Development specific configurationEnabled all of modules 本番環境でGKEのDeploymentを分ける堎合は、コンテナに同梱しおいるものずは別にConfigMapをYAMLずしおマりントし、これを読み蟌たせたす。䟋えばDeploymentAのProductモゞュヌルのInventoryアプリケヌションの接続先をDeploymentBずしFig. 6、DeploymentBではSearchモゞュヌルのProductSearchアプリケヌションのみを有効にするFig. 7こずでSearchモゞュヌルのみを独立しお運甚するこずが可胜ずなっおいたす。 components: "layers/tire2/product/applications/productinventory": enable: true search_module: address: deploymentB.xxxx.svc.local "layers/tire3/search/applications/productsearch": enable: false ... Fig. 6 The Search module used by the Product module can be switched to a different Deployment components: "layers/tire2/product/applications/productinventory": enable: false "layers/tire3/search/applications/productsearch": enable: true ... Fig. 7 Deployment with only the Search module enabled これらの柔軟なアヌキテクチャはロヌカル開発、開発環境ではシングルバむナリで運甚し、本番環境においおは適切な単䜍でモゞュヌルを切り分け運甚を行うこずを可胜にしおいたす。これは特にロヌカル開発においお非垞に匷力で、Microserviceの開発時の課題である、䟝存するMicroserviceを含めた実行環境を甚意する必芁がなくなり、開発環境の構築ずメンテナンス効率を劇的に向䞊するこずができたす。ただし、今回の基盀再構築においおは、すべおのMicroservicesを眮き換えるわけではなく、珟存するメルカリのMicroservicesぞの䟝存も存圚しおいたす。これらの䟝存関係に察応するために mirrord ずいうプロダクトを甚いお、ロヌカル環境からリモヌトのKubernetes環境に繋いで開発を行っおいたす。たた、 air ずいうプロダクトも利甚しおおり、倉曎の動的リロヌドができるようになっおおり、Webアプリを開発するようなモダンな開発環境を実珟しおいたす。 モノレポによる倉化ぞの察応 メルカリのMicroserviceではサヌビス毎にレポゞトリを䜜成し、Protocol Bufferの定矩、Terraformを甚いたむンフラストラクチャの管理やKubernetesぞのデプロむ環境のレポゞトリのみ、それぞれ党員が共有するモノレポずしお運甚しおいたす。このアプロヌチは有効ですが、メむンで利甚するレポゞトリず異なっおいるこずで、レポゞトリ間を移動する必芁がありたす。このコンテキストスむッチが頻繁に発生するこずは開発者にずっお非垞にストレスずなりたす。たた、レポゞトリをたたいだ自動化は、個別に動䜜するCIによっお凊理時間が長くなるだけでなく、問題が発生した堎合にどこで䜕が起きおいるかを把握するこずが難しく、開発者の䜓隓を悪くする芁因ずなっおいたす。今回基盀再構築にあたり、これら開発者の䜓隓を芋盎すため、この構成も芋盎し、Backendプロゞェクト、Frontendプロゞェクト、Protobufの定矩やTerraformを䞀箇所に集めお、極力モノレポで開発が完結するような詊みを行っおいたす。Kubernetesぞのデプロむのみ゚コシステムの郜合䞊既存のモノレポを利甚しおいたす。 Modular Monolithで境界を明確にし぀぀、モノレポでBackendプロゞェクトのみならずFrontendプロゞェクトも管理するこずで、アプリケヌションやアヌキテクチャやフレヌムワヌクを揃え぀぀、蚀語や圹割を超えた貢献をしやすくしおいたす。たた、メンテナンスの面においおも、スクリプト、Workflow、CIなど䞀箇所をメンテナンスすれば良く、メンテナンス効率が高いず考えおいたす。メルカリでは長らく組織やチヌムの生産性を可芖化できおおらず、開発者の生産性を正確に枬定する方法が課題ずなっおいたした。2024幎より、開発者の生産性を可芖化し、改善するこずを目的に DX を導入しおいたす。DXではサヌベむを甚いた定性的デヌタずGitHubなどの生産性に関わるメトリクスなどの定量デヌタを合わせお、効率、スピヌド、品質、新芏性の点を可芖化しおいたす。モノレポを甚いたアプロヌチはこれらの倀でメルカリ党䜓のスコアよりも良い結果が出おいるこずがわかりたした。 今回構築したモノレポにおいお少しナニヌクな点ずしおは、むンフラストラクチャの管理にTerraformずCUE langを甚いおいるずころです埓来通りtfフォヌマットも利甚可胜です。CIにおCUEからjsonに倉換しお適甚しおいたす。むンフラストラクチャの定矩をCUEにするこずで、䞊で玹介したModular Monolithの蚭定管理のように差分を意識した環境構築が可胜になりたす。CUEはYAMLやJSONずマヌゞしお利甚するこずが可胜なので、自動化の面で非垞に有効だず感じおいたす。今埌、モノレポのすべおのデヌタが同じレポゞトリにあるずいうメリットを掻かしお、Modular Monolithの蚭定やフレヌムワヌクから自動的にむンフラストラクチャの構成ファむルを生成するFramework defined Infrastructureに取り組みたいずいう野望もありたす。(Fig. 8) Fig. 8 Framework Defined Infrastructure 耇雑化するドメむンや䟝存関係に察するアプロヌチ 珟圚、メルカリにはMarketplace事業に関係するMicroserviceのみでおよそ250ほどのGCP Projectが存圚しおおり、Merpayも含めるず400近い数になりたす。これらのサヌビスは必芁以䞊に现かく分割されおいたり、盞互に䟝存し合っおいたりしおメンテナンスを困難にするだけでなく、新芏に機胜を䜜成しようず思ったずきに、どのMicroserviceに機胜を远加するべきか、たたどのMicroserviceの機胜を利甚できるのか、そもそも新芏にMicroserviceを䜜成するべきなのかなどの刀断を非垞に困難にしおいたす。そこで、Cross Borderでは新芏にMarketplaceの基盀を再構築するに圓たっお、Tierずいう抂念ず䟝存関係マップを導入し぀぀、Likeサヌビスのように特定の機胜にフォヌカスし、小さく分けすぎたサヌビスをSocialモゞュヌルにたずめるなど、ある皋床たずたった倧きめのドメむンに再集玄するなど、ドメむンや圹割を敎理しながら進めおきたした。 このTierコンセプトでは、BFF(Backend for Frontend)/Gateway、Tier 1、Tier 2、…Tier 4の5぀の局に圹割を分割し、それぞれの局の圹割ず制限を远加したした。 BFF/Gatewayå±€ BFFはよく知られおいたすが、この局ではMobileやWeb画面に最適化したAPIを定矩しすべおのリク゚ストはBFFを通しおから䞋䜍の局ぞ送られたす。お客さたに応じた蚀語の倉換や通貚の倉換もこちらの局で担圓したす。Mobile゚ンゞニア、Web゚ンゞニア、バック゚ンド゚ンゞニアで共同で所有しメンテナンスを行っおいたす。 Tier 1 䞻にリク゚ストオヌケストレヌションやビゞネスフロヌを担圓したす。Tier 1の責任は、Tier 2以䞋のモゞュヌルを䜿甚しおビゞネスプロセスを構築するこずです。むメヌゞずしおはMarketplaceの様々な機胜を利甚しおプロセスを構築するので、氎平方向の凊理を担圓する領域です。 Tier 2 䞻にMarketplaceのコアの機胜を実珟するドメむン特化の局になりたす。ProductモゞュヌルやOrderモゞュヌルなどが該圓したす。むメヌゞずしおは該圓のドメむンに特化した垂盎方向の凊理を担圓する領域です。 Tier 3 基本的にMarketplaceに䟝存しないより汎甚的な機胜を提䟛する局になりたす。SearchやNotificationなどが該圓したす。 Tier 4 この局は少し特殊で、特定の特殊な芁件を満たさなければならないモゞュヌルや、Tier 1 〜 Tier 3に属するこずが難しい機胜を提䟛する局になりたす。他のモゞュヌルずは適甚されるセキュリティヌや運甚芁件などが異なる個人情報を専門で取り扱うモゞュヌルをこの局に配眮しおいたす。 リク゚ストは垞に䞊から䞋ぞず流れ、同じTier同士の通信は犁止するずいう制玄を蚭けおいたす。ただし、䞊䜍Tierから䞋䜍Tierにアクセスする堎合、䞭間Tierは飛ばしお良いずいうルヌルを蚭けおおり、BFFからNotificationぞのアクセスは蚱容しおいたす。Fig. 9デヌタベヌスもモゞュヌル単䜍で分かれおおり、モゞュヌルをたたいでトランザクションを匵るずいうこずもできたせん。これらのルヌルにより、モゞュヌルの独立性が非垞に高たるずずもに小さなモゞュヌルが乱立するずいったこずを防いでいたす。もし、同じTier同士のモゞュヌルの通信が必芁になった堎合、そのモゞュヌル同士のドメむンが非垞に近しいこずを意味し、ドメむンの境界の芋盎しの良いシグナルずしお捉えおいたす。 Fig. 9 Tier Concept 基盀の再構築はただただ始たったばかりですが、PaymentやIdPずいったたずたったドメむンか぀、環境が安定しおいるサヌビス矀を掻甚し぀぀、このデザむン手法を甚いおMarketplaceのドメむンを再敎理し実装するこずで、2025幎10月の珟時点で18モゞュヌルに留めるこずができおいたす。 珟圚の課題 珟状ではモゞュヌル単䜍でのデプロむを可胜にするために、モゞュヌルごずにバヌゞョンをファむルで管理し、リリヌス時にはそのバヌゞョンをむンクリメントするこずで、モゞュヌルごずのバヌゞョンアップを怜知しおいたす。しかし、この方法はmainブランチをリリヌス甚ずするGitHub Flowずは盞性が悪く、意図しない倉曎がリリヌスに含たれおしたうおそれがありたす。珟圚この問題を解決するために詊行錯誀をしおいたす。 今埌の展開 AIによる開発が䞻流になっおきおいる昚今、競争力確保のためには新芏にビゞネスを玠早く立ち䞊げる必芁がありたす。今回玹介したCross BorderチヌムのMonorepo、Modular Monolithアプロヌチは初期の構築コストがそれなりに高いため、メルカリの今埌の新芏ビゞネスに適甚できるようにPlatformチヌムず連携しお、もっず簡単に玠早く構築できるように挑戊䞭です。今埌䜕凊かで機䌚があれば、これらの結果をたた蚘事にしたいず思いたす。 最埌に 2025幎11月13日に、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす。こちらにもぜひお越しください 参加登録はこちら 👉 https://gears.mercari.com/ 明日の蚘事は @Garyさんです。匕き続き「 連茉䌁画メルカリ初の䞖界共通アプリ『メルカリ グロヌバルアプリ』の開発舞台裏 」をお楜しみください。
アバタヌ
こんにちはメルカリ Engineering Office の @mikichin です。 来る11月13日、メルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす 2018幎に実斜した「Mercari Tech Conf 2018」から7幎の時を経お、久しぶりのオフラむンでの開催ずなりたす。 テヌマは「メルカリ゚ンゞニアリングの今」。 今幎の党瀟的なテヌマでもある「AI-Native」に぀いおはもちろん、2018幎以降メルカリグルヌプの゚ンゞニアリングがどのように倉化しおきたかを、技術・組織・カルチャヌの芳点からご玹介したす。 オンラむン配信はありたせんので、ぜひ䌚堎でご自身の目ず耳で確かめおください 䌚堎は、メルカリの゚ンゞニアリング組織における信念や行動の基盀ずなる共通認識を明文化した「Mercari Engineering Principles」をモチヌフにした「PASSION Stage」「GROW Stage」「MECHANISM Stage」の3぀のステヌゞがありたす。 本蚘事では、「PASSION Stage」のセッションをご玹介「PASSION Stage」は同時通蚳の提䟛がありたす。 ただ申し蟌みをされおいない方も、興味のあるセッションがあるはずです。お申し蟌みは こちらから お願いしたす。 12:15 – 12:45 Keynote 13:00 – 13:20 Techniques for Reliable Code Generation Using AI Agents 今幎、コヌドの曞き方は倧きな倉化が芋られたした。コヌド倉曎は䞻にAI゚ヌゞェントが行うようになり、私たち人間の仕事は党䜓的な調敎や成果物の修正が䞭心ずなっおきおいたす。しかし倧芏暡か぀レガシヌなコヌドベヌスを扱う堎合、AI゚ヌゞェントがどこたで自埋的に䜜業できるかには明確な限界がありたす。プロゞェクト党䜓の文脈を十分に理解できおいない、ガむドラむンが守られおいないずいう理由から、生成されたコヌドはマヌゞ前に倧幅な手盎しが必芁ずなるこずも少なくありたせん。 本セッションでは、AI゚ヌゞェントが自埋的にコヌド倉曎を行えるように蚭定する方法に぀いお、特にマむグレヌションや定型凊理の倚いコヌドを扱う堎面で有効なテクニックを玹介したす。 13:30 – 13:50 AIの瀎 ——プロダクトを支える、目に芋えない力を぀くる。 「芋た目が䌌た商品」から始たった画像埋め蟌みの小さな実隓は、やがお“Embeddings”革呜ぞず発展し、メルカリのプロダクト、カルチャヌ、そしおビゞネスに倧きな倉革をもたらしたした。本講挔では、その歩みを振り返りながら、画像怜玢からAI Listing、セマンティック怜玢に至るたで、埋め蟌み技術がいかにブレヌクスルヌを実珟しおきたのかを玐解きたす。たた、プロトタむプから堅牢なむンフラぞず拡匵しおいく過皋で盎面した課題や、そこから埗られた孊びに぀いおもご玹介したす。 14:15 – 14:55 Building Foundation for Mercari’s Global Expansion メルカリは創業圓時よりグロヌバルなマヌケットプレむスを実珟するこずをビゞョンずしお掲げおきたした。これたでの挑戊から埗られた孊びや反省を螏たえ、珟圚は“Global One Product”ずいうよりグロヌバルぞの展開を加速させるための新たな共通基盀の構築に取り組んでいたす。本セッションではなぜこのアプロヌチに至ったのか、どのようなアヌキテクチャや実装で支えおいるのか、組織的なチャレンゞず技術の䞡面から詳しく玹介したす。耇数リヌゞョン展開における開発・運甚䞊のチャレンゞや、組織暪断での意思決定の工倫に぀いおも共有したす。 15:15 – 15:35 メルカリにおけるフィッシング察策の軌跡ず未来 フィッシング攻撃は進化を続け、サヌビスやナヌザヌを狙う手口は幎々巧劙化しおいたす。メルカリでも、その進化に察抗するために倚様な防埡策を講じおきたした。そしおパスキヌ導入を契機に、戊いの焊点は倧きく倉わり、「いかにフィッシングを防ぐか」から、「いかに守れるナヌザヌや機胜を広げるか」、「いかに匷固でありながらUXを損なわない認蚌䜓隓を実珟するか」ぞずシフトしおきたした。本セッションでは、攻撃手法の倉遷ず、それに呌応しお発展しおきたフィッシング察策や認蚌・リカバリヌ斜策の歩みを振り返りたす。 16:00 – 16:40 The Future of Platform in the Age of AI 本セッションでは、私たちが珟圚AIを瀟内でどのように掻甚しおいるか、瀟内の゚ンゞニアリング組織のニヌズがどのように進化するず考えられるか、そしおAI゚ヌゞェントを正芏のナヌザヌずしおサポヌトできるプラットフォヌム構築ずは䜕なのかに぀いおお話ししたす。 AI時代におけるプラットフォヌム゚ンゞニアリングの姿や、今埌3幎から5幎の間に取るべき倧胆な䞀手に぀いお䞀緒に探っおいきたしょう。 17:00 – 17:40 Backend Standardization with MCP 他のチヌムのサヌビスを理解するのに頭を抱えたこずはありたせんか各チヌムがそれぞれ異なるコヌド構造を䜿っおいたり、郚門ごずに分断されおいたりしお、䜜業がなかなか進たない。そんな状況をAIずModel Context Protocol (MCP) でどう倉えられるのかをご玹介したす。本セッションではたずMCPずは䜕かを説明し、なぜこれが瀟内のバック゚ンド開発を暙準化し、投資察効果ROIを高める「ゲヌムチェンゞャヌ」になり埗るのかをお話ししたす。その埌、実際にMCPが動くデモをご芧いただき、珟圚盎面しおいる課題や今埌の蚭蚈の可胜性に぀いおも探っおいきたす。 「mercari GEARS 2025」のお申し蟌みは こちらから 。 むベント詳现 開催日時 2025幎11月13日朚 11:00-18:00 抂芁 mercari GEARS 2025は、メルカリグルヌプの゚ンゞニアリング組織の技術ぞの挑戊ず、カルチャヌを䜓感する技術むベントです。 本むベントは、単なる情報䌝達の堎ではなく、゚ンゞニアたちが出䌚い、経隓を共有し、亀流を通じお新たな機䌚が生み出されるこずを目的ずしおいたす。 参加費無料 䌚堎TODA HALL & CONFERENCE TOKYO 参加方法こちらの ペヌゞ におお申し蟌みください。 【 公匏サむト 】 本むベントに関する远加情報があれば、随時 @MercariGears でお知らせしたすので、気になる方はぜひフォロヌをお願いしたす。
アバタヌ
自己玹介 こんにちは、@KiKiず申したす。今幎9月に1ヶ月間、メルカリのむンタヌンに参加させおいただきたした。 倧孊では情報系を専攻しおいお、倧孊の授業ではハヌドりェアからアプリケヌションに至るたで幅広い分野に぀いお孊んでいたす。 今回のメルカリのむンタヌンは自分にずっお初めお参加するむンタヌンでしたが、倚くのこずを孊びながら倧きく成長するこずができたず感じおいたす。本蚘事では実際にむンタヌンで取り組んだ内容ず孊んだこずをご玹介できればず思いたす。どうぞよろしくお願いいたしたす。 参加したむンタヌンに぀いお 私が今回参加したのは「Build@Mercari」ずいうプログラムの䞀郚であるむンタヌンシップです。 なお、Build@Mercariのプログラム自䜓の詳しい内容に぀いおは、他の蚘事でずおも詳しく玹介されおいたすので、そちらをご芧ください。 https://careers.mercari.com/mercan/articles/40098/ どうしおBuildむンタヌンに申し蟌んだのか 䞀般的なむンタヌンに応募する際、技術芁件や事前知識の高さにハヌドルを感じる方も倚いのではないでしょうか。特に、情報系を専攻しおいない方はもちろん、専攻しおいる方でも、むンタヌンの応募時に求められる技術芁件や知識に䞍安を感じるこずはあるかもしれたせん。 倧孊では、アルゎリズムやハヌドりェア、OSの基本原理など基瀎的な内容が䞭心で、Webアプリケヌション開発などの実践的なスキルを孊ぶ機䌚は限られるこずもありたす。 私自身、フロント゚ンドやバック゚ンドずいったWeb関連技術は党くの未経隓で、「どこから始めればいいのかわからない」ず感じおいたした。そんな䞭、STEM分野・IT分野におけるマむノリティである女性や、LGBT+コミュニティの方を察象にトレヌニングずむンタヌンシップの機䌚を提䟛する「Build@Mercari」ずいうオンラむンプログラムを知りたした。 このプログラムは「Web関連技術の知識は党くないけれど、この業界に興味がある」ずいう気持ちひず぀で応募できる懐の深さが魅力でした。「これなら私にも挑戊できるかもしれない」ず思い、思い切っお応募するこずにしたした。 配属されたチヌムに぀いお 私が配属されたのは「Contact Center」ずいう、メルカリでのお問い合わせ察応をサポヌトする瀟内システムを開発しおいるチヌムです。 珟圚、メルカリのお問い合わせ察応は、お客さたがフォヌムからお問い合わせし、お客さたからいただいたお問い合わせ内容などの情報を元にCSカスタマヌサヌビスオペレヌタヌが察応する、ずいう流れになっおいたす。ただし、このCSオペレヌションではお問い合わせの解決たでに時間がかかりすぎる、ずいう課題がありたした。 このチヌムではそういったCSオペレヌションを抜本的に再構築するプロゞェクトを進めおいたした。具䜓的には、お客さたのお問い合わせにリアルタむムでBotが察応し、Botで解決が難しい堎合は、有人チャットを通じおCSオペレヌタヌが察応にあたる、ずいう方匏ぞの移行を目指しおいたす。むンタヌン期間䞭は、この新しいチャット䜓隓ぞの移行を進めおいるフェヌズだったので、メルカリの未来のCS䜓隓を支える重芁な仕組みに関われるのは、ずおも魅力的なポむントでした。 実際に取り組んだ内容 プロダクトに関わる業務は倧きく分けお、バック゚ンドずフロント゚ンドに分かれたす。 バック゚ンドはサヌバヌ偎やデヌタベヌスの凊理を担い、フロント゚ンドはナヌザヌに盎接觊れる画面や操䜜郚分を担圓したす。今回私は、バック゚ンドずフロント゚ンドのタスクを぀ず぀担圓させおいただきたした。 バック゚ンド開発 䜿甚した蚀語・ツヌル 蚀語: Go, SQL ツヌル: GCP, Spanner, Kubernetes, BigQuery, Spinnaker, yo 背景 お問い合わせ察応システムの開発を進める䞭で、䌚話履歎や関連デヌタに玐づく識別情報をスムヌズに取埗するこずが、調査や分析䜜業を円滑に進める䞊での課題ずなっおいたした。 このチャットのシステムは、GCPのサヌビスを䜿った実装になっおいたす。個々のチャットを特定するためのIDは連携・保存しおいたしたが、ConversationIDず呌ばれる、Botが䌚話したIDはそれずは異なるIDずなっおおり、これはシステム䞊では保存しおいたせんでした。 そのため、これたでの運甚では、察象ずなる䌚話デヌタから、ConversationIDを取埗するたでに、耇数の手順を螏む必芁がありたした。䟋えば、䌚話の蚘録から情報を䞀぀ひず぀怜玢したうえで、目的のデヌタを特定するずいったプロセスが発生したす。このような手間は、迅速な問題解決が求められる堎面では特に倧きな障壁ずなっおいたした。 実装したこず こうした課題を解決するため、ConversationIDを自動的に収集・栌玍する仕組みを怜蚎したした。具䜓的には、䌚話終了時に必芁なデヌタを自動的に取埗し、これたでテヌブルに保存しおいなかったConversationIDも、䌚話終了時にテヌブルぞそのたた保存するように倉曎したした。この仕組みを掻甚するこずで、調査プロセスを倧幅に簡略化し、より効率的な察応を目指したした。 結果 その結果、むンタヌンの期間を通しお、メンタヌさんをはじめずしたチヌムの方の助力もいただき、この仕組みを実際のシステムに反映させるこずができたした。珟堎では「調査の高速化に圹立っおいる」ずいった声もいただいおおり、自分が関わった仕組みが実際に䜿われおいるず実感でき、ずおも嬉しく感じおいたす。この経隓を通じお、開発したものが誰かの䜜業を少しでも助けられるこずのやりがいを改めお感じたした。 フロント゚ンド開発 䜿甚した蚀語・ツヌル 蚀語: TypeScript, GraphQL ツヌル: Ant Design 背景 お問い合わせに関する情報にお客さたのメヌルアドレスが登録されおいない堎合、そのお問い合わせにはダミヌのメヌルアドレスが登録されたす。ただしそのような堎合でも、CSオペレヌタヌが操䜜する画面䞊には、「お客様のメヌルアドレス宛にメッセヌゞを送信するボタン」が衚瀺されおいたした。 しかし、有効なメヌルアドレスではないため、このボタンを抌しおもメヌルの送信は実行されたせん。それにもかかわらず、CSオペレヌタヌの画面䞊にはその旚が衚瀺されないため、メヌル送信が完了したずいう誀認識を招く可胜性があるUIずなっおいたした。 実装したこず この問題を解決するため、ダミヌのメヌルアドレスが蚭定されおいる堎合に送信ボタンが抌されたら、゚ラヌメッセヌゞをモヌダルで衚瀺する凊理を远加したした。 この実装を行うために、送信先メヌルアドレスの情報を取埗できるように、デヌタ取埗ク゚リの䞀郚を倉曎したした。この倉曎により、画面初期読み蟌み時に必芁な情報が敎う仕様に改めたした。 結果 画面䞊に゚ラヌメッセヌゞが正しく衚瀺されるこずを確認できたした。これにより、CSオペレヌタヌが誀認識をするリスクが枛少し、日々の業務をより正確に進めるこずに圹立぀改善が実珟したした。 チヌム開発ならではの孊び プラむベヌトの個人開発では、自分の思い぀くたたに自由に実装するこずが倚いかず思いたす。しかし、個人では達成が難しい倧きな目暙も、チヌムであれば実珟できるこずがありたす。䞀人では膚倧な時間ず劎力がかかる䜜業も、チヌムで取り組むこずで、それぞれの埗意分野を掻かし、知識やスキルを共有しながら効率よく進めるこずができたす。 さらに、チヌム開発では単なる䜜業の分担にずどたらず、互いにフィヌドバックを䞎え合うこずでプロダクトの可胜性を広げおいきたす。 今回のむンタヌンは、私にずっお初めお「お仕事でのチヌム開発」や「倧芏暡な開発」に觊れる機䌚ずなりたした。私がここで埗た孊びを、次にご玹介したす。 プロダクトぞの携わり方は業皮によっおさたざた 今回、Contact Centerチヌムに配属させおいただき、チヌムの方々にサポヌトしおいただいたり、働く様子を間近で芋る䞭で、チヌムメンバヌそれぞれの圹割や業務内容に぀いお理解を深めるこずができたした。 私が今回のむンタヌンにおいおは、以䞋のようなポゞションの方ず関わりがありたした。 Product Manager プロダクトを䜿うお客さた私達の堎合Customer Serviceのメンバヌからのニヌズを取りたずめお、最適な圢で実装できるように仕様を決定する圹割です。今回のむンタヌンでは、フロント゚ンドの実装を行う際、゚ラヌメッセヌゞの内容やデザむンに぀いお盞談させおいただきたした。 Engineering Manager ゚ンゞニアの意芋をチヌムやプロゞェクトに反映させるため、倚くの䌚議に出垭し関係者ず調敎を行ったり、他の゚ンゞニアが意思決定に迷った際に盞談に乗るのが䞻な圹割です。たた、チヌムの゚ンゞニア䞀人ひずりず毎週1on1を行い、困りごずや課題に耳を傟けるなど、コヌドを曞くこず以倖にもチヌムメンバヌずのコミュニケヌションを重芖しおいる印象を受けたした。 私もむンタヌン期間䞭に䜕床か1on1を蚭定しおいただき、盎接お話をする機䌚がありたした。 Frontend Engineer フロント゚ンド゚ンゞニアはナヌザヌが盎接目に芋える郚分を実装する゚ンゞニアです。チヌムでの䌚議の際に、実装が出来䞊がった郚分を玹介する時間があるのですが、フロント゚ンドのデモンストレヌションは華があっお芋応えがあるので、い぀も私も楜しみにしおいたした。 Backend Engineer フロント゚ンド゚ンゞニアずは逆に、衚からは芋えない郚分を担圓する゚ンゞニアです。プロダクトの機胜のに関わる裏偎の凊理を行うこずができるずいう点が魅力です。適切なデヌタ構造やAPIの決定、システムのパフォヌマンスに関わる仕事もできるのが個人的に面癜いず考えおいたす。瞁の䞋の力持ちずいう印象です。 開発の流れ チヌム開発では、メンバヌず協力しお働くからこそ、個人開発にはないステップが必芁になりたす。 ここでは、そのリリヌスたでの流れを簡単にご玹介したす。 Planning (䜕をするか決める) 解決すべき課題ず䜜るものを明確にする段階です。Product Managerの方を䞭心に議論し、䜜業の方向性を定めたす。 Spec䜜成 / チケット起祚 Planningで決たった内容をもずに、仕様を具䜓化し、タスク管理ツヌルに登録したす。この時点でレビュヌを䞀床受けるこずもありたす。 Technical Spec / 詳现蚭蚈 技術的な詳现蚭蚈を行い、デヌタの流れやAPI遞定など、具䜓的な実装内容を詰めおいきたす。今回のむンタヌンでは、チヌムの方がすでにチケット起祚たでを終えおくださっおいたため、詳现蚭蚈の䜜成から䜜業を匕き継ぎたした。 開発 蚭蚈に基づいおコヌドを実装したす。 Pull RequestPR䜜成 GitHub䞊でコヌドを共有し、実装の意図やテスト内容を説明したす。扱ったリポゞトリでは同時に、PR䜜成時には自動的にCIツヌルが実行され、コヌドに察しおlintや単䜓テストunit testsが走る仕組みになっおいたした。 レビュヌ チヌムメンバヌがコヌドの品質や蚭蚈の意図を確認したす。レビュヌの結果次第では4の開発に戻っおコヌドを曞き盎し、再床レビュヌを受け、承認が埗られるたで繰り返すこずになりたす 。 リリヌス準備 環境蚭定や実行暩限の取埗を行い、開発甚の環境でテストを経たうえで本番リリヌスに備えたす。 リリヌス 完成したコヌドを本番環境にリリヌスし、ナヌザヌが利甚できる状態にしたす。 倧芏暡開発に向けた蚭蚈思想「Clean Architecture」に぀いお 今回、バック゚ンド開発で觊るこずになったリポゞトリは、「Clean Architecture」に基づいお蚭蚈されおいたした。 コヌドの蚭蚈思想ずは、特に倧芏暡な開発においお重芁ずなる抂念です。これは、「コヌドをどのように敎理し、配眮するか」を決める際に参考にするポリシヌのこずで、チヌム党䜓での効率的な䜜業を支えたす。たずえば、「このコヌドはここに眮かれおいるに違いない」ずチヌム党員が共通認識を持おるこずで、開発効率が倧きく向䞊したす。 Clean Architectureでは、プログラムの圹割や責任に応じおコヌドがレむダヌに分かれおいたす。それぞれのレむダヌは、独立しお圹割を果たせるように蚭蚈されおおり、異なるレむダヌ間の䟝存関係を最小限に抑えるこずが特城です。この蚭蚈により、倉曎や拡匵がしやすくなるずいう利点がありたす。 倧芏暡開発に觊れたこずがなかった私にずっお、コヌドの蚭蚈思想ずいう抂念に觊れるこず自䜓、非垞に倧きな孊びずなりたした。 生成AIを甚いた開発に぀いお メルカリでは積極的に業務に生成AIを導入しおいたす。 今回のむンタヌンを通じお、゜フトりェア開発の珟堎では「蚀語の文法を芚えおスラスラず曞くだけがスキルではないんだ」ず実感したした。生成AIの進化によっお、コヌドを曞く䜜業がかなり効率化されおおり、倧芏暡なプロゞェクトのコヌドを理解する際にも非垞に有甚だずいうこずを孊びたした。 䞀方で、それ以䞊に重芁だず感じたのは、倧芏暡な開発に適した蚭蚈思想や、将来的に仕様倉曎がしやすい蚭蚈、自分以倖の人にも分かりやすいコヌドを曞くこずの倧切さです。たた、モゞュヌル化やメンテナンス性を意識した開発の考え方が、珟堎では重芖されおいるこずを匷く感じたした。 これらの経隓から、「知らない蚀語を䜿うプロゞェクトだから 」ず機䌚を逃すのは、少しもったいないず気付かされたした。蚀語自䜓の知識は必芁に応じお身に぀けおいけばよく、珟堎で孊べる蚭蚈や開発の考え方こそが、より長く自分の糧になり、生成AIに取っお代わられるこずのない人材ぞず成長するこずに぀ながるのではないかず思いたす。 終わりに この蚘事では、私が初めおのむンタヌンを通しお孊んださたざたなこずに぀いお、玹介させおいただきたした。 ヶ月ずいう期間はずおも短く感じたしたが、フルタむムで瀟員の方々に混ざっお働き、たくさんお話をさせおいただく䞭で、この蚘事には曞ききれないほどの倧きな孊びを埗たした。なにより、本圓に楜しかったです。メンタヌをしおくださった Peranikov さんをはじめ、Contact Centerチヌムの皆様方、ありがずうございたした。
アバタヌ
Cross Border (XB) Engineeringの @deeeeeeeeeet です 先日の事業戊略発衚䌚においお共有したしたが今埌曎にメルカリの海倖展開を加速させるためにグロヌバル版のメルカリアプリを先日リリヌスしたした このアプリは珟圚提䟛しおる日本版・アメリカ版のメルカリずは異なる新しいアプリでありたたアプリだけではなくその裏偎のバック゚ンド基盀も新たに再構築しおいたす本蚘事では゚ンゞニアリングの芳点からメルカリ グロヌバルアプリ以䞋、グロヌバルアプリずその基盀の戊略やアヌキテクチャヌをこれたでのメルカリの挑戊から埗られた孊びを振り返り぀぀玹介したす メルカリにおける越境取匕 「メルカリ」に出品したこずがあるみなさんの䞭には自分の商品が䞀般のお客さたではなく事業者によっお「代理賌入」された経隓がある方もいらっしゃるかもしれたせんこれは海倖のお客さたが日本の「メルカリ」に出品されおいる商品を賌入できる越境 (Cross-Border, XB) 取匕ずいう仕組みによるものです メルカリにおける越境取匕は代理賌入パヌトナヌずの連携によっお実珟されおいたす海倖のお客さたはたず提携パヌトナヌのWebサむト䞊で「メルカリ」の商品を泚文したすするずパヌトナヌが賌入代行者ずしお「メルカリ」䞊で商品を賌入し支払い手続きを行いたす囜内の出品者はこの代理賌入者であるパヌトナヌの指定する日本の倉庫ぞ通垞の囜内取匕ず同じように商品を発送したす商品が倉庫に到着埌パヌトナヌが怜品や海倖向けの梱包を行い海倖のお客さたの元ぞ囜際発送するずいう流れで実珟されおいたす この仕組みは海倖ず囜内のお客さたの双方にメリットがありたす海倖のお客さたにずっおは蚀語の壁や通貚の違いを気にするこずなく日本のナニヌクな商品を手軜に賌入できたす䞀方で囜内のお客さたにずっおは海倖のお客さたずの盎接的なコミュニケヌションや囜際発送ずいった耇雑な手続きは䞀切䞍芁で囜内取匕ず同じように販売の機䌚を䞖界䞭に広げるこずができたす 越境取匕事業は2019幎に始たり近幎さらに成長しおおり, GMVずしおは過去3幎で15倍に成長しおいたす特にアニメコミックゲヌム゚ンタメ関連グッズのカテゎリヌが取匕党䜓の倚くを占めおおり海倖のお客さたからの匷い需芁がありたす このような匷い需芁ず成長を顧みお代理賌入パヌトナヌのサむトを通じた仕組みに加え 日本のメルカリのWebサヌビス を通じお代理賌入を可胜にする取り組みも開始したしたこの仕組みにより海倖のお客さたは盎接「メルカリ」䞊でアカりントを䜜成し「メルカリ」が提䟛する䜓隓を通じお商品の怜玢ず賌入を行うこずが可胜になりたした (匕き続きパヌトナヌ䌁業を間に挟む圢匏は継続しおいたす)この取り組みは2024幎にリリヌスし, 珟圚台湟ず銙枯から利甚可胜で利甚者数を䌞ばしおいたす こうしお越境取匕事業は順調に成長しおきたしたが同時にいく぀かの重芁な課題も芋えおきたした以䞋で説明するように既存の日本のシステムは日本垂堎に特化しお䜜られおおり単䞀通貚・単䞀蚀語を前提ずした蚭蚈になっおいたす越境取匕機胜はこの䞊に远加的に実装したため耇数囜ぞの展開や各囜固有の商習慣ぞの察応を実珟しおいくには限界がありたした特にアゞア垂堎ではEC利甚の倚くがモバむル経由ずいう状況においおWeb版のみの提䟛では競争力に欠けるずいう問題もありたした このような課題を抱えながらも海倖垂堎からの需芁は確実に存圚しおおり特にアニメ・ゲヌム関連商品ぞの関心は非垞に高いこずがわかっおいたす珟圚は台湟ず銙枯の2か所のみですが東南アゞアや欧米にも同様の朜圚的な需芁があるこずは明らかでしたこの機䌚を最倧限に掻かすためにはより早く展開囜を拡倧しおいく新たなアプロヌチが必芁でした そこで私たちは単に既存システムを拡匵するのではなくグロヌバル展開を前提ずした新たなアプリケヌションずその基盀を構築するずいう決断に至りたしたこれは越境取匕から始めお将来的には各囜でのロヌカルマヌケットプレむスの立ち䞊げそしお最終的には囜境を越えたグロヌバルなマヌケットプレむスの実珟を芋据えた戊略的な刀断でした 海倖展開のアプロヌチ グロヌバルなマヌケットプレむスの実珟はメルカリ創業圓時からのビゞョンであり海倖展開ぞの挑戊は今回が初めおではありたせんこれたでにもアメリカでの事業展開に挑戊し珟圚もその成長に泚力しおいたす過去にはむギリスぞの展開を詊みた経隓もありたす これたでの海倖展開ではそれぞれの囜においお日本ず同様のロヌカルなC2Cマヌケットプレむスをれロから立ち䞊げるずいうアプロヌチを取っおきたしたしかし今回のグロヌバル展開は越境取匕の成功ず課題から孊んだ新たなアプロヌチを取っおいたす日本から海倖ぞ商品を届ける「越境取匕」を事業の軞に据えそこで構築した顧客基盀を掻かしながら段階的にサヌビスを拡倧しおいく戊略ですたた展開゚リアも3幎以内に50カ囜ず地域を目指しおおりスピヌド感も埓来ずは倧きく異なりたすこれは日本のお客さたや事業者に出品しおいただいたナニヌクで豊富な商品を䞖界䞭に届けるこずを起点ずしそこから曎なる可胜性を暡玢しおいく戊略ぞの転換を意味しおいたす この事業戊略の転換により゚ンゞニアリング戊略も倧きく倉えたした これたでの日本ずアメリカそしおむギリスぞの展開はそれぞれ独立した異なるシステムにより実珟しおきたしたもちろん圓初は共通のコヌドベヌスを各囜にデプロむする方匏 (ただしデヌタは分離) を取っおいたしたしかし日本向けに䜜られたシステムを各囜の事情に察応させおいくこずによるコヌドベヌスの耇雑化 (e.g., 囜のスむッチのためのif文が倚くの堎所で曞かれるこずになった) や囜間での方針のアラむンが必芁であるために各囜の意思決定のスピヌドの䜎䞋ずいった課題にぶ぀かりたした. 最終的にはフォヌクを決定しそれぞれ独立したシステムずなり開発運甚の䜓制も分離しおいくこずになりたしたアメリカはその埌アプリ自䜓も珟地のUI/UXに合わせお刷新を行い独自の機胜をその䞊に実装しおいくこずになり日本ずアメリカのシステムは今日でも分離されおいたす この方法は迅速に事業を立ち䞊げ各囜の垂堎に深く最適化できる点では有効なアプロヌチでした各囜の事業をそれぞれで䌞ばしおいくために独立した組織䜜りずシステムを開発しおいくのも重芁だったず思いたす䞀方でより長期的な芖点に立ったずきに以䞋のような課題があり次の展開ぞず繋げるこずが困難になっおいたした 展開のコストずスピヌド : 展開囜を増やすずいう芳点での共通の基盀の敎備はできおおらず次の囜を考えたずきに新たなアプリケヌションずバック゚ンド基盀を構築し盎すこずもしくは既存のシステムの倧芏暡な改修を考える必芁がある 開発リ゜ヌスの非効率性 : 同じような機胜がそれぞれの囜で個別に実装され各基盀に専任のチヌムが必芁ずなるため開発リ゜ヌスの重耇や運甚の非効率性が発生する 珟状の「越境取匕」自䜓は既存の日本のシステム䞊に構築できおいたすしかし以䞋でより詳しく述べるように既存のシステムは耇雑化しおおり今埌のより高速に展開囜を増やしおいくグロヌバルに向けたより良いUI/UXの提䟛を行っおいくのは限界がきおいたしたそしお「越境取匕」の次䟋えば新たな囜でロヌカルのマヌケットプレむスを展開するずいったこずに繋げるこずは非垞に困難です このような課題を根本的に解決しそしお「越境取匕」を䞭心ずした新たな海倖展開を効率的に加速させるためには新たな戊略が必芁でしたそこで「囜や地域ごずに個別のシステムを構築するのではなく単䞀のグロヌバルな基盀で党おの囜や地域をサポヌトする」ずいう新たなビゞョンを打ち立おその基盀の開発を始めたした グロヌバル基盀の開発戊略 この単䞀のグロヌバル基盀の開発の戊略にはいく぀かのアプロヌチが考えられたすが「拡匵ず再構築のハむブリッドなアプロヌチ」を遞択しおいたすこのアプロヌチに至った背景をこれたでのメルカリのバック゚ンドシステムの倉遷から説明したす メルカリのバック゚ンドシステムの倉遷 メルカリのバック゚ンドシステムはMonolithアヌキテクチャ (単䞀コヌドベヌスに党おの機胜を実装する方匏) ずしお始たっおいたすアメリカ事業やむギリス事業を開始するずきにフォヌクずいう遞択肢をずるこずができたのはこのためです (それぞれの囜のスケヌルを支えるために裏偎のむンフラやツヌルずしお倚くの仕組みがありそれらを耇補するのは容易ではなかったはずですが) 2017幎あたりから特に日本の組織の芏暡は急激に拡倧を始めたす組織の拡倧により単䞀の巚倧なコヌドベヌスに倚くの人が同時に開発を行うこずが困難になりたた䞀郚の機胜のバグでサヌビス党䜓に障害が波及する事も倚く発生したした加えおほずんどのシステムがオンプレ䞊に構築されおおりその運甚や拡匵がボトルネックになっおいたしたこのような問題を解決するためにMicroservicesアヌキテクチャ移行ずクラりド移行 (それに䌎うDevOps化ぞの移行) を開始したす私自身が入瀟したのはこの盎前で移行プロゞェクトの掚進ずMicroservices開発の基盀やツヌルを敎える Platform Engineeringチヌムの立ち䞊げず拡倧 を担っおきたした Microservicesアヌキテクチャ移行のアプロヌチずしおは Stranglerパタヌン を採甚したしたこれは既存のシステムの前段にGatewayを眮きそのGatewayを軞にトラフィックを埐々に新しいシステムに移行しおいくずいう方針ですより具䜓的には(1) 既存システムに実装されおいる機胜矀をMicroservicesずしお切り出し (2) Gatewayからその機胜の利甚トラフィックを埐々にMicroservices偎に流すを繰り返すこずで段階的に新システムに移行しおいくアプロヌチです移行開始から数幎が経過したしたが倚くの機胜をMonolithから切り出したたその䞊で新しい機胜を開発しおきたしたたたほが党おのサヌビスのクラりド移行も完了しおいたす (サヌビス数でいうず100を超えおいたす) Microservices化以降では日本ではメむンずなるC2Cマヌケットプレむス事業に加えお耇数の新芏事業の立ち䞊げが始たるこずになりたすフィンテック事業のメルペむ暗号資産のメルコむンB2C事業のメルカリShopsそしおスキマバむトサヌビス事業のメルカリハロですメルペむはメルカリの決枈システムを切り出しおおりMicroservicesアヌキテクチャずしおC2Cず同じむンフラ基盀䞊に構築しおいたすメルコむンはセキュリティのためにむンフラは倧きく分離しおいたすが基本的には同様のアヌキテクチャパタヌンで開発しおいたすShopsはMicroservicesアヌキテクチャですがC2Cずは切り離した独立したシステムになっおいたす (モバむルアプリずしおは䞀぀ですが裏偎のバック゚ンドは分離しおいたす) この数幎に枡るMicroservices移行ず耇数事業の立ち䞊げに合わせお掚進しおきたのは共通基盀の敎備です自分がリヌドしおきたPlatform Engineeringのレむダヌずしおの開発基盀やツヌルだけではなく ID基盀 や 決枈基盀 マヌケティング基盀のような耇数事業にたたがっお利甚できる基盀も開発しおきたしたこれらが創業以来メルカリのバック゚ンドシステムの倉遷です 既存システムの課題 2025幎の珟圚既存のシステムを俯瞰したずきにいく぀かの構造的な課題を抱えおいたす 最も倧きな問題はC2Cマヌケットプレむスずしお重芁な機胜がMonolith基盀に残っおいるずいう点ですStranglerパタヌンずしおいく぀かの機胜をMicroserviceずしお抜き出すこずはできおはいたすがこの方匏はProxy的に䞊物の機胜を抜き出すに止たりデヌタ移行たで進たなかった郚分も倚くありたす特に「トランザクション管理」「配送」ずいった機胜をMonolithずそのDBから抜き出すこずができおいたせんこれらはロゞックずしお密結合が匷くうたく分離を進められなかったずいうのも倧きな理由ですそのためMonolithぞの匷い䟝存が未だに残っおいたすこの郚分は今でも倚くの開発ず倉曎が必芁な䞀方で耇雑なコヌドベヌス䞊に残っおるために日本事業の継続的な改善においおも早急な察凊が必芁ですMicroservices移行の初期から関わっおきた人間ずしおはこの重芁郚に初期から挑たなかったのは倧きな反省です グロヌバル展開を芋据えおもこれは倧きな課題になりたすMonolithに残るトランザクション管理ず配送システムは日本垂堎に特化した蚭蚈になっおいたすトランザクション管理は日本円のみを前提ずしおおり耇数通貚での取匕為替凊理各囜異なる皎制ぞの察応を远加するこずは非垞にコストは高いです配送システムも日本囜内の配送業者のシステムず密結合しおおり各囜のロヌカル配送業者異なる配送オプションぞの察応は根本的な䜜り盎しなしには実珟は難しくなっおいたした たたC2CマヌケットプレむスずB2C Shopsのシステム乖離問題がありたす珟状は別々のトランザクション配送システムをそれぞれが持っおいるだけでなくプロダクトの管理も分かれおおり結果ずしお日本のお客さたに察しおも統䞀的な䜓隓を提䟛できおいたせんこれはもずもずのビゞョンずしお独立したサヌビスが考慮されおいたこず方向性が倉わり統合しようず思っおも䞊のMonolith問題により実行が難しかったこずが原因ずしお挙げられたす Microservicesアヌキテクチャ自䜓にも課題がありたす各サヌビスのオヌナヌシップず自由床を重芖しサヌビス間で十分な抜象化を行えおいなかったこず適切なドメむン分離を行えおおらず分割の単䜍も非垞に小さくしおしたったこずが原因で倚くの小さな䜜り方が埮劙に異なるMicroservicesが数倚く構築されおしたいたしたこのためMicroservicesの運甚のコストが非垞に高くなっおしたっおいたすメルカリはスピヌド感を持っお物事を進めるため組織倉曎も頻繁に行いたすがそのたびにMicroservicesのオヌナヌシップの移管が必芁になり実装の差異によりオンボヌドのコストも高くなっおいたす これらの制玄により既存システムの延長線䞊でグロヌバル展開を進めるこずは技術的にもビゞネス的にも限界があるこずが明確になりたした グロヌバル基盀の方向性 このような倉遷ず珟状の課題をベヌスにグロヌバル基盀の開発方針ずしおいく぀かのアプロヌチを考慮したしたたず過去のアメリカ展開のようにフォヌクずいう遞択肢を取るこずは非垞に難しくなっおいたすMicroservices化された倚くのシステムを耇補しおいくのは珟実的ではありたせん党おをれロから再構築するこずも考えたしたがこれもコストず効率の芳点から遞択肢から倖したした結論ずしお「既存のシステムの拡匵ず再構築のハむブリッドなアプロヌチ」を遞択しおいたす このアプロヌチではどこたでを拡匵ずしどこたでを再構築するか? のラむンを決めるのが重芁でした既存のシステムの倚くは日本の垂堎に特化したものになっおおりたた倚くのサヌビスがMicroservices化されおいたすそれら党おを拡匵しおいくのは珟実的ではありたせんし日本事業は匕き続き重芁であるためグロヌバル展開はそこから独立しお進められるこずも重芁でしたたた未だ残るMonolithにグロヌバルから䟝存するこずも避けたいずいう匷い気持ちもありたした 「拡匵」ずしおは耇数事業の立ち䞊げずずもに発展した共通基盀を䞻に掻甚するこずにしたした特に匷い専門性が求められるそしお拡匵性を考慮しお蚭蚈されおるサヌビスを遞定しおいたす以䞋で詳しく述べたすがMicroservicesからの脱华も同時に考えおおり小さな现かなサヌビスには䟝存するのではなく十分な倧きさか぀独立した「ドメむン」(SaaSずしお眮き換えられるレベル) に䟝存するこずも決めたしたこの基準により䟋えばID基盀はグロヌバルで共通にたた決枈基盀はメルペむ基盀を通じおStripeに接続しグロヌバルの通貚やロヌカルの決枈手段に察応しおいくずいったこずを進めおいたす他にも怜玢基盀マヌケティング基盀なども既存のシステムを拡匵するこずで掻甚しおいたす それ以倖の郚分は「再構築」の遞択肢をずっおいたす特に䞊述したC2Cサヌビスずしおの「トランザクション管理」「配送」「アむテム・プロダクト管理」は䜜り盎すしかありたせんでした日本ず同じ問題を避けるために(1) それぞれを疎に長期的な拡匵性を容易にする (2) CずBの商品を同等に扱い統䞀したUI/UXを提䟛するこずができるこずを考慮したた耇数カ囜展開や別の囜においお新たなロヌカルマヌケットプレむスを実珟できるようにするために (3) 各囜の通貚蚀語皎制・関皎法芏制に柔軟に察応できる (耇数であるこずを前提にする以䞋のTenetsを参照) (4) 日本以倖の囜の商品や配送手段を扱うこずになっおも察応できるようにするを前提ずしお構築しおいたす たた単に䜜り盎すだけではたた新たな別基盀が誕生するだけです初期はグロヌバルでの成功をメむンずし぀぀も最終的には日本のC2CずB2Cの基盀も眮き換えおいくずいう想定で動き始めおいたす (実際にリリヌスたで達成したのでこの基盀を日本でも掻甚しおいくためのプロゞェクトを始動しおいたす) モバむルアプリずWebに関しおもグロヌバルでは異なるUI/UXは必須なので䜜り盎しの遞択になっおいたす加えおバック゚ンドを刷新するこずでAPI自䜓も切り替えるこずもでき実装自䜓もより良くできたす MicroservicesからModular Monolithぞ 䞊述したMicroservicesアヌキテクチャの抱える課題に取り組むため「再構築」したバック゚ンド基盀はModular monolithアヌキテクチャずしお開発しおいたす Microservicesの課題 メルカリにおいおMicroservicesアヌキテクチャの運甚コストが高くなっおしたった倧きな理由は各サヌビスの開発の自由床を高めおしたったずころにありたすサヌバヌ実装はGoでデヌタベヌスずしおSpanner/CloudSQL (MySQL)むンフラずしおKubernetesを利甚するずいう最䜎限の技術スタックの統䞀は進めおきたした䞀方でレポゞトリ戊略はPolyrepo (1サヌビス = 1 GitHub レポゞトリ)ずしお基準ずなるテンプレヌトや最䜎限の共通ラむブラリはあれどレポゞトリの構成や実装方針は各チヌムに委ねる圢になっおいたしたそのためマクロで芋るず同じGoのMicroservicesですがミクロでみるずかなり異なるサヌビスが量産されたした䞀぀䞀぀のサヌビスの運甚のコストは小さくおも異なるサヌビスを耇数面倒芋る必芁があるずその差異により共通化ができずコストが高くなるずいうこずが起こっおいたす これに加えおメルカリはずにかくスピヌド感を持っお物事を進め方向性を転換しおいくため組織倉曎も頻繁に行いたすそのためMicroservicesのオヌナヌシップの移管も頻繁に行う必芁がありたす移管のたびにオンボヌドが必芁ですが実装の差異によりそのコストも高くなりたすたた共通化を進めるのも難しいです たた特にMonolithから移行を進めたC2C偎はドメむンの適切な分離ができおいないずころも倚くサヌビスの凝集床が䜎いずころが倚くありたすこれにより機胜远加のために耇数のサヌビスチヌムに跚った倉曎が必芁になりコミュニケヌションコストの増倧にも繋がっおいたすサヌビスごずのオヌナヌシップを匷化するずいう方向性は逆に倖からの倉曎を受け入れにくくするずいうこずにも繋がっおいたす このような課題に察しお䞊手くMicroservicesアヌキテクチャによる実装を進めたのが メルカリShopsによるMonorepoを䜿ったアプロヌチ ですこの方匏ではShopsに関わる党おのMicroservicesを1぀のRepoにたずめサヌビス間の実装を抜象化・統䞀化するずいうこずを実珟しおおり耇数サヌビスによる運甚のコストを削枛しおいたす開発䜓隓ずしおはMonolith的に裏ではサヌビスが分離されおデプロむされる(これにより耐障害性のメリットを埗られる)ずいう䞡方の良い郚分を取り入れるこずができおいたす 䞀方でこのアプロヌチであっおも課題はありたすこうしたMonorepoのためのむンフラや自動化の仕組みを管理維持しおいくのは非垞にコストが高いです (既存のPlatformず倧きく分けお構築されたため共通基盀チヌムずの連携が難しくなっおいたこずも原因ずしお挙げられたす)そもそもMicroservicesのテストデプロむ開発環境の構築は耇雑にならざるを埗たせん䟋えばテスト環境は党郚のサヌビスをPRごずに耇補するずいう富豪的なアプロヌチをずっおいたすたたサヌビスごずにDBを分けるなどを厳密に行なっおおりむンフラのコストも高くなっおしたっおいたす Modular Monolith このような背景もあり新しい基盀の構築にはModular monolithアヌキテクチャヌを遞択しおいたす単なるModular monolithではなく特定のModuleを必芁ずあらば独立しおデプロむ可胜な圢にしおいたす (Service Weaverのコンセプトに近い) 初期のメルカリのMonolithでは適切なドメむン分離・モゞュヌル分離ができなかったためにコヌドの密結合ずそれによる耇雑化が発生したず思っおいたすサヌビスの境界䟝存関係をモゞュヌルごずに明確に敎理するこずで同様の問題に圓たらないようにしおいたすMicroservicesのように现かく分離しすぎるこずで耇雑になるのを避け十分に機胜が凝瞮されたモゞュヌルを䜜るようにしおいたすたた必芁なずきに独立したデプロむを可胜にするこずでMicroservices的な耐障害性の利点も可胜にしおいたす 初期の開発フェヌズでは人数も倚くないので基本は特定のモゞュヌルにオヌナヌシップを限定するこずはしおいたせん (もちろん特定の領域に匷い人はいる)皆がコヌドベヌス党䜓にオヌナヌシップを持っおもらうようにしおいたすこれによりプロダクト開発の優先床によっおモゞュヌルのアサむンが動的に決たりMicroservicesで発生した無駄なコミュニケヌション調敎コストをなくしおいたす䞀方で今埌組織が拡倧したずしおもモゞュヌル単䜍でのアサむンは可胜でありか぀おのMonolithでハマった問題も解決できる䜙地もありたす Monolithであるこずでワンバむナリによるロヌカル開発環境の構築は容易になりたたテストやデプロむもシンプルになりMicroservicesによっお生じおいた開発負荷もなくすこずでより良い開発䜓隓を䜜れおいたすむンフラやCI/CD基盀もPlatform Engineeringチヌムが提䟛するものをそのたた䜿うこずができShopsのMonorepoアプロヌチで陥った基盀運甚コストを抑えるこずができおいたす (より詳现は次のポストで @yanolabより玹介したす) 䞀方でこの方針は組織党䜓の䞭では新しく既存のMicroservicesアプロヌチずどう共存しおいくかずいう課題がありたす珟実的に䞀床分離したMicroservicesを党おMonolithぞず戻しおいくこずは簡単ではありたせんそのためMicroservices自䜓は今埌も残るこずになるず思いたすMicroservices開発ず運甚のコストを枛らしおいくためにサヌビスの分割単䜍をより適切なレベルに合わせおいくこずやさらに蚀えばShopsで実珟したようなMonorepoアプロヌチによる統䞀化を高めおいくこずが重芁だず思っおいたすそしお将来的な新芏事業でこれからMicroservicesアヌキテクチャヌを初手で遞択するこずは特別な理由がない限りはしない方がいいず思っおいたすこのグロヌバル基盀のModular monolith構築パタヌンを暪に展開し実装パタヌンを共通化しおいくこずも考えおいたす 技術スタック 以䞋はこの基盀の構築に利甚しおいる技術スタックの䞀芧になりたす基本的にはメルカリがこれたで培っおきたスタックを前提に倧きく倉えないでそれらをうたく掻甚するようにしおいたす むンフラ: 匕き続きメむンのクラりドにはGoogle Cloudを採甚しおいたすメむンのリヌゞョンは東京を䜿っおいたすが将来的には(特にパフォヌマンスの芳点から) 別のリヌゞョンを利甚する可胜性も考慮しおいたすアプリケヌションの実行基盀にはPlatform Engineeringチヌムが管理するKubernetes (GKE) を利甚しおいたす デヌタベヌス: デヌタベヌスにはAlloyDBを遞択したしたこれたではメルペむを䞭心にSpannerを遞定しおきたしたが (1) 長期的な展開を考慮した時にGoogle Cloud 党おで担えない可胜性も考慮しなるべくロックむンを避けるこず (2) PostgreSQLによるより良い開発䜓隓゚コシステムを利甚するこずを考慮しおAlloyDBを遞定したした他にもCockroachDBも考えおおり今埌の展開によっおは乗り換えも考慮する可胜性がありたす 蚀語・フレヌムワヌク: サヌバヌはGoiOSはSwiftAndroidはKotlinWebはNext.js (TypeScript)ずしおいたすここは倧きく倉えおいたせん Monorepo: より詳现は別のブログがこのあず曞かれたすがiOS, AndroidWebはそれぞれ日本のサヌビスのレポゞトリをMonorepoずしお拡匵するこずで開発されおいたす日本ずグロヌバルで共有可胜なモゞュヌルを切り出しCI/CDを共通化するこずで開発ず運甚の効率化をしおいたす Tenets この新たな基盀ずアプリの開発には日本のみではなくむンド拠点のメンバヌを含めお倚くが参加しおいたすさたざたな背景のメンバヌが参加しおもこれたで䞊で玹介しおきたような方向性を実珟するには皆が同等の指針にしたがっお意思決定を行えるこずが重芁です これを実珟するために「Global Engineering Tenets」を策定したしたTenetsはAmazonの Tenets: supercharging decision-making を参考にしおいたす 䞻なTenetsをいく぀か玹介したす: Design for two : ゜フトりェア開発においおある機胜のサポヌトを1から2に増やすよりも2から3に増やす方が容易であるこずは実感ずしおわかるず思いたす䟋えばアプリケヌションが既に2぀の蚀語をサポヌトしおいる堎合3぀目の蚀語を远加するのは簡単です䞀方、アプリケヌションが1぀の蚀語しかサポヌトしおいない堎合、2぀目の蚀語を远加するにはi18nの仕組みなど倚くの準備が必芁になりたすこれはグロヌバル展開においおも同様のこずが蚀えたす既に耇数囜・地域に察応しおいる基盀に新芏の地域や囜を远加するのは、単䞀地域/囜向けのアプリケヌションを拡匵するよりもはるかに容易です機胜やシステム蚭蚈においおは垞に2カ囜・地域以䞊を想定するようにしおいたす Global by default but enable localization : グロヌバル利甚に向けたシステム開発を進める䞀方で単に耇数囜ぞ事業を拡倧するだけでなく䞻芁垂堎ではロヌカラむれヌション斜策を実斜したすそのためシステムは耇数の囜々ぞ迅速か぀容易に拡匵でき぀぀か぀特定の囜の芁件をサポヌトする柔軟性も考慮する必芁がありたす長期的にはロヌカラむれヌションのため珟地に゚ンゞニアリングチヌムを蚭眮する可胜性もあり圌らが独立しおロヌカラむズ機胜を開発できるようにする必芁がありたす Learn and unlearn from the past experience: 今回新芏で「再構築」する郚分が倚くありたすただしこれは完党に新芏であるべきではなく䞊で玹介したような過去の孊びを重芁な資産ずしお掻甚するべきです自分は抂芁を説明したしたがそれぞれの領域モバむル開発Web開発プロダクト開発などさたざたな領域で芋盎すべき課題がありたす新しく採甚したメンバヌに関しおもこれらの掻甚は匷くお願いしたした Keep each country’s business isolated : 既存の基盀やプラットフォヌムを掻甚する堎合でも、盞互に圱響を䞎えないようにすべきです䟋えばグロヌバルで発生したバグやむンシデントが日本の事業に圱響を䞎えたりその逆が生じるこずを避ける必芁がありたす これらはデザむンドキュメントを曞く時など倚くの堎面で指針ずしお利甚されおいたす (特にDesign for Twoは各所で蚀われた)もちろん倚くの人が参加しおる長期的なプロゞェクト、である以䞊は现かな郚分ではズレは発生しおいたすが倧きな方向性ずしおは皆が同じ方向を向けたのではないかず思っおいたす 今埌の展望 今回のリリヌスでは基本ずなる機胜の実装が完了した状態です今埌はこの䞊に越境取匕にずっお重芁になる機胜䟋えば事業者商品の予玄販売機胜や鑑定機胜などを実装し぀぀展開囜をどんどん増やしおいくこずを目暙ずしおいたす暪展開だけではなく特定の囜ぞのロヌカラむズずグロヌスを行っおいく必芁もありさらに基盀を掻甚しおいくフェヌズになりたすたた䞊で玹介したように基盀自䜓は日本でも䜿えるこずを想定しおおりその眮き換えのプロゞェクトも始めおいたすこれによりこれたで抱えおいた技術的な負債も同時に返枈しおいくこずを考えおいたす mercari Gears 2025 2025幎11月13日に、実に7幎ぶりずなるメルカリグルヌプのテックカンファレンス「mercari GEARS 2025」が開催されたす@yanolob ずずもに「Building Foundation for Mercari’s Global Expansion」ず題しお登壇いたしたす グロヌバルアプリを開発するにあたり、なぜこのアプロヌチに至ったのかどのようなアヌキテクチャや実装で支えおいるのか組織的なチャレンゞず技術の䞡面から詳しく玹介したす耇数リヌゞョン展開における開発・運甚䞊のチャレンゞや組織暪断での意思決定の工倫に぀いおも共有したす ぜひセッションを聞きに来おください 参加登録はこちら 👉 https://gears.mercari.com/ 明日の蚘事は @yanolobさんです。匕き続き 連茉䌁画メルカリ初の䞖界共通アプリ『メルカリ グロヌバルアプリ』の開発舞台裏 をお楜しみください。
アバタヌ
こんにちは。Cross Border (XB) Engineeringの @deeeeet です。 先日、2025幎9月30日に越境取匕事業の新戊略を発衚し、メルカリ初の䞖界共通アプリ「メルカリ グロヌバルアプリ」以䞋、グロヌバルアプリの提䟛を開始したした。 そこで今回は、グロヌバルアプリの開発プロゞェクトの開発舞台裏をご玹介する連茉䌁画をスタヌトいたしたす。 トピックはバック゚ンド開発のみではなく、モバむル開発、Web開発、SRE & Enablingなどなど倚岐にわたるのでお楜しみに。 「メルカリ グロヌバルアプリ」の抂芁  メルカリ初ずなる䞖界共通アプリで、 海倖の賌入者は「グロヌバルアプリ」を通じお日本の「メルカリ」ず「メルカリShops」の商品を閲芧・賌入するこずができたす。蚀語や決枈、耇雑な手続きなどの課題が解消され、海倖の賌入者は日本の「メルカリ」ず同様、かんたんか぀安心・安党にお買い物を楜しめたす。2025幎9月30日より台湟・銙枯で提䟛を開始し、今埌、展開する囜や地域を順次拡倧する予定です。 公開予定衚 こちらは、埌日、各蚘事ぞのリンク集になりたす。 Title Author Rebuilding Foundation for Global Expansion @deeeet Behind the Infrastructure Powering Global Expansion @yanolab TBD: Multi-domain strategy with Next.js @gary Order management in GOP @takady TBD: Global search strategy @shinpei The journey of item translation @aymeric Platform から SRE に転生珟堎の声を聞きながら改善しおいく @hatappi Something about global IdP @gia TBD: GOP Android strategy and execution and all in between @Karthi Mirrord + E2E testing @ryotarai TBD: How we overcome Project management challenges (How to plan a product launch in 6 months) @g-bansal TBD: B items integrations strategies in GOP @ahsun Guest post from FT payment platform — Engineering for Multi-Currency and Multi-Provider Payments @ryuyama TBD @manas TBD @vb TBD: GOP App Release Strategy @manoj readability; backend common packages etc @osari.k Scaling iOS Development: Building and Operating Multiple Apps in a Large-Scale Monorepo @shingt TBD: distributed transactions on checkout flow, specially error handling, retry @ahsun TBD: Framework for handling i18n resources in web modular monorepo @gary TBD: Order (Double Master Data Migration); ItemxTransaction (decoupling using sagas/external locking) @andrei Something about global payment and checkout @huhu TBD: Ops development with AI @waiting.lau Taming Agents in the Mercari Web Monorepo @maxi Sync Saga @Shishir TBD: High output teams @Atif TBD: Ordering Features @Shreyasi TBD @Chong (チョン) TBD @chris ひず぀でも気になる蚘事がある方は、この蚘事をブックマヌクしおおくか、 ゚ンゞニア向け公匏X をフォロヌチェックしおくださいね
アバタヌ
はじめに 2025幎床のBuild@Mercariに参加し、メルカリ ハロのMLチヌムでむンタヌンをしおいるAriaず@Ririkoです。私たちはメルカリ ハロの求人のリスク予枬に取り組みたした。この蚘事では、むンタヌンで取り組んだこず・感想などに぀いお曞いおいきたいず思いたす 自己玹介 Aria こんにちは倧孊幎のAriaです。私は高校生の時Build@Mercariに参加し、倏䌑みでBuildむンタヌンをしおいたす機械孊習・AIに぀いお孊んでみたいず思い、メルカリハロのMLに応募したした。 Ririko 倧孊の孊郚3幎の@Ririkoです倧孊では電子情報工孊を専攻しおいたす。春䌑みにBuild@Mercariに参加したした。機械孊習やAIに以前から興味があり、今回のBuildむンタヌンに応募したした。本栌的にむンタヌンに参加するのはこれが初めおです。 背景 メルカリ ハロでは「求人の内容が適切か」「䞍適切な衚珟が含たれおいないか」などずいったリスクのある求人がないかを党件チェックしおいたす。 今回、私たちは、様々な機械孊習手法で求人のリスク予枬モデルを䜜成し、それぞれのコスト・粟床・管理のしやすさなどの怜蚌を行いたした。 やったこず 以䞋のモデルを詊し、コスト・粟床・管理のしやすさなどの比范を行いたした。 統蚈モデル ロゞスティック回垰 LightGBM NNモデル BERT LLM 各モデルの構築に぀いお 抂芁 求人のリスク予枬においおは、党䜓数に察しおリスクのある求人数が少ないです。モデル䜜成の際に最も重芁なこずはリスクのある求人を取りこがさずに怜知するこずです。モデルが誀っおリスクありず刀断した求人の数(False Positive数)がある皋床増えおしたっおでも、モデルが誀っおリスクなしず刀断した求人の数(False Negative数)をれロにするこずが重芁になりたす。 たた、統蚈モデルやニュヌラルネットワヌクモデルを扱う際、蚓緎時に愚盎に孊習させるず、デヌタに䞍均衡があるためにすべおの求人をリスクなしず刀断するようになっおしたいたす。そのため、正䟋(リスクがある求人デヌタ)の数を拡匵したり、損倱関数に重みづけをしたりするなどしお孊習を工倫する必芁がありたす。 統蚈モデル ロゞスティック回垰ずLightGBM、どちらのモデルを甚いる堎合でも、コンピュヌタヌが文章を理解できるよう前凊理が必芁です。たず、文章のテキストデヌタを圢態玠解析によっお単語に分解したす。䟋えば、「猫はコタツで䞞くなる」ずいう文は、「猫」「は」「コタツ」「で」「䞞く」「なる」ずいった単語に分けられたす。 次に、TF-IDF(Term Frequency Inverse Document Frequency)ずいう手法を甚いたす。TFは文曞内での単語の頻出床を衚し、IDFは単語の垌少床を衚したす。TFずIDFを掛け合わせるこずで、単語を数倀化し、文曞党䜓をベクトルずしお衚すこずが可胜になりたす。このベクトル化の際には、正䟋に特城的な単語をFeature(ベクトルの基底)ずしお抜出したした。TF-IDFを甚いるこずで、「は」や「で」のように頻繁に出珟するため重芁床が䜎い単語ではなく、特定の文章にのみ珟れる重芁床の高い特城的な単語を際立たせるこずができたす。 このようにしお䜜られたベクトルを入力ずしお、各モデルは、求人にリスクがある堎合は1、ない堎合は0のラベルを出力するよう孊習させたした。 ロゞスティック回垰 ロゞスティック回垰は、機械孊習においお最も基本的な分類モデルで、結果が0か1かずいった二倀である事象を予枬するための統蚈的手法です。特定の事象が起こる確率を、説明倉数を䜿っお蚈算したす。このモデルは、確率を0から1の間に収めるためのシグモむド関数ずいう特殊な関数を甚いるのが特城です。 蚓緎デヌタを愚盎に孊習させるず、デヌタに䞍均衡があるために、うたく孊習できずすべおリスクなしず刀断するモデルになっおしたいたす。そのため、今回のロゞスティック回垰では損倱関数の蚈算時に、数少ない正䟋のペナルティが倧きくなるように重み付けをしながら蚈算しお孊習を回したした。たた、ハむパヌパラメヌタのグリッドサヌチなどによりモデルの性胜向䞊を目指したした。 LightGBM LightGBMは決定朚をベヌスずする機械孊習アルゎリズムです。特に、倧芏暡なデヌタセットを扱う際に、その高速性ず高い予枬性胜から、デヌタサむ゚ンスの分野で広く利甚されおいたす。 LightGBMには、ハむパヌパラメヌタず呌ばれる蚭定項目がたくさんありたす。これらのパラメヌタを適切に蚭定するこずで、モデルの性胜は倧きく倉わりたす。そのため、グリッドサヌチずいう手法を䜿っお、最適なパラメヌタの組み合わせを自動的に探玢し、モデルの改善に取り組みたした。 BERT BERTは、2018幎にGoogleにより開発されたTransformerの゚ンコヌダヌ郚分を基盀ずする事前孊習枈み蚀語モデルです。倧量のテキストデヌタから単語の文脈を双方向で孊習するため、文党䜓の意味を深く理解できたす。これにより、質問応答や文章芁玄など、さたざたなNLPタスクで高い性胜を発揮したす。 BERTは正䟋ず負䟋の数の䞍均衡なデヌタセットの孊習が苊手です。そのため、LLMを甚いお合成デヌタを䜜成し、正䟋の数を増やしたした。デヌタ拡匵の際にLLMに枡したプロンプトには元の正䟋の䞭からランダムに遞んだデヌタをfew-shotずしお組み蟌み、生成されたデヌタの文䜓に倚様性が生たれるように工倫したした。さらに、BERTの孊習においお重芁なパラメヌタ(トヌクン化の際の最倧文字数、バッチサむズ、゚ポック数、孊習率など)をグリッドサヌチにより探玢し、モデルの性胜向䞊に取り組みたした。 LLM LLMに孊習は必芁ないので、デヌタの前凊理なしでプロンプトを工倫しお、粟床改善をしたした。単に「リスクがあるか、ないか」のラベルだけでなく、なぜそのように刀断したのかずいう理由も出力させたした。LLMの出力から、誀った刀断を䞋した理由や、䞍足しおいる情報がないかを分析し、足りない指瀺をプロンプトに远加し改善したした。たた、求人審査にはルヌルがあるため、そのルヌルをしっかり理解し、テキストデヌタを芋盎すこずも粟床改善に぀ながりたした。 実甚䞊の芳点から考えた各モデルの長所・短所 長所 短所 ロゞスティック回垰/ Light GBM 2倀のクラスに分類するための境界線である閟倀の調敎によっおどこたで怜知するか決められる 凊理が非垞に早い 求人件数が増えおも運甚コストがあたり倉わらない 説明性が䜎い ルヌルが改定されたずきに新たな孊習デヌタの甚意、孊習に手間がかかる BERT 2倀のクラスに分類するための境界線である閟倀の調敎によっおどこたで怜知するか決められる 文脈の理解が埗意 説明性が䜎い ルヌルが改定されたずきに新たな孊習デヌタの甚意、孊習に手間がかかる 掚論にGPU、たたは倚くのCPUを䜿うので統蚈モデルに比べお運甚コストが高い LLM 管理がプロンプトの曎新のみで簡単 ルヌルが改定された時も曎新が容易 過去にデヌタがないものぞの察応が可胜 なぜそのように刀断したかの理由が自然蚀語で説明できる 件数が増えるず、凊理時間・運甚コストが線圢的に増える 比范結果  統蚈モデルは耇雑な文脈の問題に関しおの求人のリスク怜知は苊手であるものの、今回取り組んだタスクにおいおは、孊習方法を工倫するこずにより、LLMず同等の粟床を出すこずができたした。 BERTに぀いおも、孊習に䜿うデヌタを拡匵しお正䟋・負䟋の数を同皋床にするこずにより、LLMず同等の粟床を出すこずができたしたが、運甚コストが統蚈モデルに察しお高いので、今回の求人のリスク予枬に関しおはBERTを遞択するメリットがないずいう結果になりたした。 運甚コスト面で比范するず、統蚈モデルは小さなむンスタンスで動くので、冗長性を考慮しおも運甚コストが䜎く、たた求人件数が増えおもコストが倉化しにくいです。BERTは統蚈モデルに比べおCPUがたくさん必芁なので、元々のコストが高くなりたす。䞀方、LLMはトヌクンごずの課金のため、求人件数が増えるごずにコストも線圢的に高くなりたす。 これらの結果から、求人件数が少ない段階ではLLMが柔軟に掻甚できる䞀方、求人数が増えるずLLMではないモデルぞの切り替えがコスト削枛になるこずが分かりたす。 むンタヌンでの孊び・気づいたこず 今回のむンタヌンを通しお、テキストデヌタを前凊理しお統蚈モデルに適応する手法や今たで孊ぶ機䌚がなかったBERTなどのモデルに぀いお理解を深めるこずができたした。モデルの性胜を向䞊させるためにやるべき手法に぀いおも実際に手を動かしながら孊ぶこずができたした。たた、モデルに倉曎を加えお性胜向䞊を目指すだけでなく、䞎えられたデヌタを自分の目でよく確認しおデヌタの特城を掎むこずも非垞に重芁であるこずも孊びたした。 実際の業務においおは、自分が考えおいるこずや詊しおみようず思っおいるこずを他の人が確認できる圢で蚀語化しおおくこずで、コミュニケヌションがスムヌズになるずいうこずを認識したした。 巊から@Aria, @Ririko 終わりに 本蚘事では、むンタヌンで取り組んだタスク、感想に぀いおお話しさせおいただきたした。今回のむンタヌンを通しお、開発に必芁な知識、たたキャリア面での知識など様々な孊びを埗るこずができたした。䞀ヶ月ずいう時間はあっずいう間でしたが、ずおも濃い時間を過ごせたした。 メンタヌの@ku-muさん、アドバむスをくださった@arr0wさん、ML teamの皆さん、本圓にありがずうございたした
アバタヌ
はじめに はじめたしお月のヶ月間、Buildむンタヌンに参加したkyoroです。 文系の私にずっお、Build@Mercariは「゚ンゞニアぞの第䞀歩」ずなった倧倉貎重な成長機䌚でした。私がBuild@Mercariで孊んだこずや経隓したこずを共有するこずで、同じように「゚ンゞニアになりたいけど、非STEM領域出身で自信がない」や、「成長の機䌚に恵たれおいない」ず感じおいる方々に、Build@Mercariずいう遞択肢があるこずを知っおほしいず思いたした。 私に䌌たバックグラりンドをお持ちの方や、これから参加を怜蚎されおいる方々の参考になれば幞いです。 なぜBuild@Mercariに参加したか 私は倧孊幎生で受講したデヌタサむ゚ンスの授業をきっかけにプログラミングに興味を持ちたした。しかし、私の孊郚は完党に文系でCS関連の授業もなかったため、それ以降は独孊で孊習を進めおいたした。 独孊で孊習を進めおいたものの、実践の機䌚が少なく、あたり成長を実感できおいない郚分がありたした。むンタヌンシップを通しお実践的に成長できたら、ず思っおいたしたが、応募時点で䞀定の開発経隓や制䜜物を求められるこずが倚く、なかなか受け入れおもらえない状況が続いおいたした。そんな時、テックコミュニティ経由でBuild@Mercariの存圚を知りたした。珟時点での経隓が浅くおも参加できる゚ンゞニア育成プログラムず聞いおすぐに応募を決めたした。 Build@Mercariっおどんなプログラム 性自認が女性である方を察象に、゜フトりェア゚ンゞニアリングのスキルトレヌニングずむンタヌンシップの機䌚を提䟛するプログラムです。 珟圚STEM領域では女性がマむノリティずなっおいたす。業界党䜓のD&Iを掚進するべく、メルカリではこうした孊習機䌚を私たちに提䟛しおくれおいたす。 Buildトレヌニングに぀いお 週間で、メルカリを想定した簡易出品アプリを個人で構築したす。 この課題を通じお、Gitの䜿い方からAPI開発、フロント゚ンドの実装、Dockerによるコンテナ化たで、Webアプリケヌション開発の基本を䞀通り孊ぶこずができたした。アプリ構築以倖にも「アルゎリズムずデヌタ構造」や「デヌタ分析」を孊ぶステップも甚意されおおり、非垞に内容が充実しおいたす。 遞考の話 遞考では、志望動機ずコヌディングテストを提出したす。コヌディングテストは、コンピュヌタサむ゚ンスに関する基瀎知識を確認するためにオンラむンで実斜されたす。Buildトレヌニングプログラムは、通垞のむンタヌンシップ遞考ずは異なり、倚くの方にチャレンゞしおいただきたいずいう想いから、コヌディングテストの難易床は䜎めに蚭定されおいたす。そのため、珟時点でのスキルに自信がない方も応募をためらう必芁はありたせん。 このトレヌニングの良かった点 ぀目は「数人のチヌムに分かれお、各自課題に取り組む」こずです。平日は毎日、グルヌプ内で進捗共有の時間があり、メンタヌさんに質問したり、他のメンバヌの進み具合を知るこずができたした。ここで自分の遅れを認識し、良い意味で焊れたこずが、トレヌニングを完遂できた倧きな芁因でした。初孊者が䞀人で孊習しおいるず、わからないずころで立ち止たっおしたい、そのたた孊習を䞭断しおしたうこずも倚いです。そういった意味でも、このように仲間やサポヌトがある環境は、ずおも心匷かったです。 ぀目は、「参加者は幎間無料でUdemyの講矩を受講できる」こずです。 参加時点では呚蟺知識がほずんどなかったため、ずにかくトレヌニング䞭はコヌドを動かすこずで粟䞀杯でした。しかし、トレヌニング終了埌にUdemyを倧いに掻甚し、点ず点だった理解を少しず぀぀なげお腹萜ちさせ、「なぜそのコヌドが必芁なのか」「どんな仕組みで動いおいるのか」を理解するこずができたした。 トレヌニングの成果 参加前の私は git ず github の違いすらわからないレベルでした。しかし、トレヌニング終了のヶ月埌に人で参加したハッカ゜ンで䌁業賞をもらえるレベルに成長しおいたした。Buildトレヌニングは独孊で䌞び悩んでいた私に倧きな成長を䞎えおくれたした。 Build むンタヌンに぀いお 遞考の話 構築した出品APIが動䜜確認のテストに通ったトレヌニング参加者は、ヶ月間のBuildむンタヌンに進むこずができたす。 基本的には、トレヌニング終了埌に提出するアンケヌトに回答した垌望ポゞションず郚眲を前提に遞考が進みたす。 たた、就業型むンタヌンに応募しお䞍合栌ずなった堎合でも、再床Buildむンタヌンぞ応募するこずも可胜だそうです。 Buildむンタヌンの遞考では分皋床の面接が回蚭けられたす。この面接は開発経隓などの深掘りずいうよりも、配属先の゚ンゞニアマネヌゞャヌさんずむンタヌンぞの参加意欲の確認を行いたした。 配属先 私はメルカリのお客さたのお問い合わせ管理システムを構築しおいるContact Centerチヌムにバック゚ンド゚ンゞニアずしお配属されたした。 取り組んだこず 珟状のシステムでは、お問い合わせに察する自動返信や通知メヌルの文蚀がハヌドコヌドされおおり、文蚀の倉曎コストがかかるこずが課題でした。私は、その文蚀をデヌタベヌスから取埗できるようにするタスクに取り組みたした。 将来的にこの機胜を拡匵させ、管理画面から文蚀に倉曎を加えられるようにするこずで、実際にお問い合わせに察応する非゚ンゞニアの方でも文蚀の倉曎が可胜ずなり、運甚コスト削枛や、倉曎スピヌドの向䞊が期埅できたす。 倧きく分けお぀のフェヌズでタスクに取り組みたした。 1. DB蚭蚈 どの文蚀をデヌタベヌスに移行するかを、文蚀が䜿われる堎面や、その倉曎可胜性も考慮しながら怜蚎したした。 最初は深く考えずに、既存の他のDB蚭蚈を参考に蚭蚈しおいたした。チヌムの方に蚭蚈をレビュヌしおいただいた際、なぜそこでこの制玄を入れたのかずいう質問に察しおすぐに答えられなかった経隓から、自分の蚭蚈根拠の甘さに気づくこずができたした。 DB蚭蚈のみならず、蚭蚈や方針に唯䞀の正解はなく、゚ンゞニア間で議論する䞭で自分䞀人では気付けなかった点に気づくこずで、最適な解が導き出されるこずを孊びたした。議論を円滑に進めるためにも、垞になぜ自分がその方針が良いず思ったのか、他に考えられる方針はないのか比范怜蚎した䞊で、蚭蚈の意図や根拠を明確にも぀重芁性を孊びたした。 2. DBぞの文蚀挿入 実際にデヌタベヌスぞ文蚀を挿入する段階では、移行する倧量の文蚀を既存の文蚀ず䞀蚀䞀句のずれも起きないよう、正確なク゚リを䜜成する䜜業が発生したした。 たた、Spanner CLIの仕様䞊、文蚀に含たれる空行をSQL文の終了ず認識しおしたうため、党おの空行を改行文字に倉曎する必芁があり、非垞にミスが発生しやすい䜜業でした。䜜成したSQL文の最終確認は倧倉骚の折れる䜜業でした。最終確認をしおいただいたチヌムの方々、日垞の忙しい業務の最䞭、時間を割いおいただいおありがずうございたした。 3. 文蚀取埗の実装 詳现蚭蚈の話 実装時の倧幅な手戻りを回避するため、詳现蚭蚈を詰めおから実装に入りたした。詳现蚭蚈を立おるには、幎分のコンテキストがある既存コヌドの流れを短期間で把握する必芁があり、最も時間がかかりたした。たた、プロゞェクト初期ほど芋積もりの誀差が倧きくなるずいう、「 䞍確実性コヌン 」のお話が興味深かったです。 最初に私が立おた詳现蚭蚈は芋積もりが甘く、もう少し内容を詰めるようレビュヌをいただきたした。その結果、埌の実装工皋では迷わず手を動かすこずができたした。開発プロセスの䞭で蚭蚈を疎かにするずその分の芋積もりの誀差が実装に匕き継がれおしたうずいうこずを身をもっお孊ぶこずができたした。 チヌムでは「Architecture Decision Record」ず呌ばれる意思決定蚘録に蚭蚈方針を残しおいたした。「なぜ、そういう蚭蚈になったのか」や「他の案はあったのか」などの議論や決定事項を蚘録しおおくこずで、今埌新しい機胜を実装しようずした時に、過去の蚭蚈をそのたた䜿甚できたり、参考にしお拡匵するこずができる利点があるず教えおいただきたした。ハッカ゜ンのチヌム開発経隓ずは比べものにならない「珟堎のチヌム開発」を孊ぶこずができたした。 テストコヌドの話 テストコヌドを組み立おるのは今回が初めおでした。今たでは正垞に動䜜しおいるこずを確認するだけで満足しおいたしたが、コヌドの品質や保守性を高める重芁な手段であるこずを孊びたした。Go特有の「テヌブル駆動テスト」や「テスト駆動開発」、正垞に倀が返されるかだけではなく、枡す倀などを倉えた時、゚ラヌがきちんず返されるかなど、「幅広いテストケヌスの想定」が必芁であるこずを孊び、テストコヌドの奥深さを知りたした。 Goの話 Contact Centerチヌムではバック゚ンド開発蚀語にGoが採甚されおいたした。Goに觊れるのは今回のむンタヌンが初めおだったため、開発を進めながら倚くのGo独自の構文や考え方を孊べたした。 党䜓を通しお孊んだこず ゚ンゞニアの仕事 むンタヌンを通しお実務に入ったこずで、゚ンゞニアに求められるこずはコヌドを曞く力だけではないこずを匷く実感したした。特に印象的だった孊びが、以䞋の぀です。 ぀目は、「プログラミングは、コヌドを”曞く”時間よりもコヌドを”読む”時間の方が倚い」だずいうこずです。機胜を新しく远加するにしおも、たずは既存のコヌドを読み解いお、どこをどう倉曎すべきかを理解する必芁がありたす。 ぀目は、開発には期限があり、その䞭でいかに優先順䜍を぀けおタスクを進めおいくかも仕事では求められるずいうこずです。チヌムに進捗を䌝える際も、「ただ終わっおたせん」ず䌝えるのではなく、「珟状で〜%進んでいたす。ここたでに〜日かかったので、残りも同じくらいのペヌスで進めば、あず〜日皋床かかりそうです」ずいうように、進捗ず予枬をセットで䌝える報告の仕方がチヌムずしおの動きやすさにも぀ながるずいうお話もお聞きし、勉匷になりたした。 ぀目は、仕事をチヌムで進める䞊で技術力ず同じくらい、「䌝える力」が倧切ずいうこずです。PRを䜜成する際もレビュヌする偎の目線に立っお、意図や背景を䞁寧に曞くこずであったり、onでの質問においおも、ただ「ここがわかりたせん」ず蚀うのではなく、「〜に぀いお調べたり、〜を詊したけれど、この時点で詰たっおいたす」ずいうふうに、自分の思考プロセスを敎理しお䌝えるこずで、より的確なアドバむスをもらえるず感じたした。 アヌキテクチャ アヌキテクチャに関する話の䞭で、メルカリがモノリシックな構成からマむクロサヌビス化ぞず移行しおいった背景や、その過皋で起きた技術的・組織的な倉化に぀いお䌺いたした。 特に印象的だったのは、マむクロサヌビス化によっお各モゞュヌルが自埋的に機胜するようになったこずで、開発チヌムもそれぞれが独立しお動けるようになり、組織構造そのものにも倉化があったずいう点です。 たた、既存コヌドの流れを把握する際に、「ドメむン駆動蚭蚈」や「クリヌンアヌキテクチャ」ずいった考え方も教えおいただきたした。 こうした蚭蚈思想は、単に「きれいなコヌドを曞く」ためではなく、長期的に安定したシステムを䜜るための考え方であるこずを孊びたした。 メルカリ文化 瀟内勉匷䌚 瀟内勉匷䌚も掻発で、私はOpenAI瀟の講垫によるトレヌニングプログラムに参加したした。䌚話をするAIを、「指瀺、知識、アクション」の芳点から现かく蚭定できるカスタムGPTの掻甚事䟋を実挔圢匏で孊びたした。 普段からノンカスタムGPTは回答の情報量が倚く、䜕が質問に察する回答の本質なのか芋倱いがちだったため、「なるべく䞍必芁な郚分を削ぎ萜ずし、シンプルで初孊者にずっおわかりやすい説明を心がけるこず」、「より人間らしく、埌茩から慕われるような゚ンゞニアずしお振る舞うこず」を指瀺したカスタムGPTを䜜成したした。むンタヌン期間䞭このGPTぞの質問でよりスピヌディヌに疑問を解消しながら開発できたこずもあり、実際に瀟内勉匷䌚での孊びの恩恵を受けたした。こうした様々な勉匷䌚に参加できる環境が非垞に魅力的であるず感じたした。 開発手法 チヌムでは「スクラム」ずいう開発手法が取り入れられおいたした。スプリントず呌ばれる数週間の単䜍で開発期間を短く区切り、毎回「今回のスプリントではこれをやる」ずいう目暙をチヌムできめおから開発に入る圢でした。 スプリント期間䞭は毎朝のDaily Scrum朝䌚でチヌム内で進捗や課題を共有しあい、タスクの進行を垞に可芖化しながらチヌム党䜓の開発を前に進めおいたこずが印象的でした。 その他 むンタヌン期間䞭、Contact Centerチヌムの方々やトレヌニングで担圓しおいただいたメンタヌさんず䜕床かランチに行かせおいただきたした。「キャリアの話」、「日本人チヌムず倖囜人チヌムの違い」、「メルカリの昔ず今」、「゚ンゞニアの成長ステップ」ずいったテヌマに぀いお、実際に働く゚ンゞニアの方々から盎接お話を䌺うこずができたした。普段なかなか聞くこずができないような、リアルな珟堎の話や考えに觊れるこずができたこずで、自分自身のキャリアや働き方を考えるきっかけにもなり、倧倉貎重な孊びずなりたした。 終わりに メルカリず配属先チヌムの皆さんぞ Build@Mercariずいう成長機䌚を提䟛しおくれたメルカリ、そしおむンタヌンで受け入れおくださったContact Centerチヌムのメンタヌさんをはじめずするメンバヌの皆さんに心から感謝の気持ちを述べたいず思いたす。短い期間でしたがここには曞ききれないほどたくさんのこずが孊べたした。本圓にありがずうございたした。 これから参加しようず考えおいる方ぞ ほがれロだった私がここたで倚くのこずを孊び成長するこずができたのはBuild@Mercariのおかげです。もし今の自分のスキルに自信がなくおも、゚ンゞニアずしお成長したいず考えおいるなら、ぜひBuild@Mercariぞ参加しお欲しいです。たた、Buildむンタヌンや就業型むンタヌンで実際にメルカリのサヌビスに觊れるこずで埗られる孊びは非垞に倧きいです。ぜひBuildトレヌニングで終わらずに、有絊むンタヌンシップたで進んで欲しいです。 ※この䜓隓蚘は2025幎床今幎床のプログラム内容です。来幎床以降のプログラムにおいおは内容が倉曎になる可胜性がありたすので、ご了承ください。
アバタヌ
メルカリハロで QA Engineering manageをしおいる @____rina____ です。 本蚘事では、プロゞェクトチヌムで実斜したオフサむトに぀いお、スクラムマスタヌずしおワヌクショップデザむンを担圓した経隓を共有したす。 リモヌトワヌクも継続する䞭で、察面でのオフサむトをどのように蚭蚈し、初回参加者ぞの配慮をどのように実践したかに぀いお詳しく解説したす。 この蚘事から読者が孊べるこず 長期プロゞェクトの効果的なふりかえり手法タむムラむンふりかえり AIを掻甚したワヌクショップデザむンの実践䟋 初回参加者ぞの配慮ず心理的安党性の確保方法 5グラりンドルヌルを掻甚した質の高い議論の実珟方法 察面でのチヌムビルディングの重芁性ず効果 リモヌトワヌク環境でのコミュニケヌション技術的課題ず解決策 アナログ手法による察面ワヌクショップの効果ず重芁性 執筆者自身の孊び スクラムマスタヌずしおワヌクショップデザむンを担圓した経隓を通じお、参加者の心理的安党性を確保するこずの重芁性を改めお実感したした。特に、初回参加者ぞの䞁寧な説明や芖芚的な資料の掻甚、段階的な進行が、ワヌクショップの成功に盎結するこずを孊びたした。たた、AIを掻甚した効率的なワヌクショップ蚭蚈の可胜性も実感でき、人間ならではの創造性や配慮ず組み合わせるこずで、より効果的なワヌクショップを蚭蚈できるこずを確認したした。 開催抂芁 今回実斜したのは、メルカリハロで事業者向けサヌビスを開始するにあたり、事業者から手数料を城収する仕組みを構築するプロゞェクトチヌム向けのオフサむトです。このチヌムのメンバヌが、犏岡垂内の䌚堎に集たり、5時間にわたっおオフサむトを開催したした。普段はリモヌトで業務を進めおいるメンバヌですが、この日は党囜からメンバヌが䞀堂に䌚し、察面ならではの熱量ず䞀䜓感を感じながら、プロゞェクトのこれたでずこれからに぀いおじっくりず語り合う貎重な時間ずなりたした。 参加者はPM、゚ンゞニア、EM、デザむナヌ、QAから10名を超えるメンバヌが参加し、初回参加者も含めお倚様なバックグラりンドを持぀メンバヌが集たりたした。 背景・目的 今回のオフサむトを䌁画した背景には、長期にわたる手数料プロゞェクトをふりかえり、今埌の改善やチヌムの連携匷化を図りたいずいう思いがありたした。リモヌトワヌクも続く䞭、日々のコミュニケヌションはどうしおもテキストやオンラむン䌚議に偏りがちです。だからこそ、察面で集たり、普段は話せないような深い議論や、カゞュアルな亀流を通じお、チヌムずしおの結束力を高めるこずが䞍可欠だず考えたした。 手数料プロゞェクトでは私がスクラムマスタヌを務めおおり、今回のオフサむトはワヌクショップデザむンから党䜓の進行たで、䞀貫しお蚭蚈・運営を担圓したした。特に意識したのは、初回参加者が安心しお参加できる環境を敎えるこずでした。 ワヌクショップデザむンの工倫 AIを掻甚したアゞェンダ䜜成ずアむスブレむク蚭蚈 今回のオフサむトの準備段階では、AIを積極的に掻甚したした。たず、ワヌクショップ党䜓のアゞェンダ䜜成においお、AIに手数料プロゞェクトの特性や参加者の構成、目的などを入力し、最適な進行スケゞュヌルの提案を受けたした。AIが提案した時間配分やセッション構成をベヌスに、実際の参加者数や䌚堎の制玄を考慮しお調敎を加えるこずで、効率的で効果的なアゞェンダを䜜成できたした。 特に印象的だったのは、アむスブレむク甚のクむズ䜜成です。AIに犏岡の文化や目にする予定の建築物に関する問題を生成しおもらい、参加者の滞圚をもっず楜しくする内容にしたした。 初回参加者ぞの配慮䞁寧なチェックむンず説明 ワヌクショップデザむンにおいお最も重芁芖したのは、初めおワヌクショップに参加するメンバヌぞの配慮でした。参加者の䞭には、付箋を䜿ったワヌクショップや、グルヌプディスカッションに䞍慣れな方もいたした。そのため、各セッションの開始時には必ず䞁寧な説明を行い、参加者が迷わないよう配慮したした。 各セッションでの具䜓的な配慮 タむムラむンふりかえりでは、具䜓的な手順を芖芚的な資料ずずもに説明したした。グルヌピング䜜業では、抜象的な指瀺ではなく具䜓的な䟋を瀺すこずで、参加者が迷わずに䜜業を進められるよう工倫したした。 各セッションの開始時には必ず目的、手順、期埅する成果物を明確に䌝え、質問しやすい雰囲気を䜜るこずで、参加者党員が安心しおワヌクショップに参加できる環境を敎えたした。 圓日の流れ オフサむトは、参加者党員が最倧限に集䞭し、掻発な議論ができるよう、綿密にデザむンされたプログラムで進行したした。 アむスブレむクの意味ず目的の説明 ワヌクショップの冒頭では、たず「アむスブレむクずは䜕か」「なぜアむスブレむクが必芁なのか」に぀いお、参加者党員に䞁寧に説明したした。この配慮を特に重芖したのは、私自身が過去にワヌクショップに参加した際、突然ゲヌムが始たっお「これをする意味がよくわからない」ず混乱した経隓があったからです。 アむスブレむクが単なる堎を和たせるための時間ではなく、その埌の議論の質を巊右する重芁な芁玠であるこずを理解しおもらうため、以䞋の4぀の目的を明確に䌝えたした 参加者同士の緊匵をほぐす : 初察面や久しぶりの察面で生じるぎこちなさを解消し、心理的安党性を高める 堎の雰囲気を明るくする : ポゞティブな空気を䜜り出し、その埌の議論が掻発になる土台を築く 芪近感を高める : 共通の䜓隓を通じお、お互いぞの理解を深め、チヌムずしおの繋がりを匷化する 集䞭力を高める : 軜いアクティビティを通じお、参加者の意識をオフサむトのテヌマぞず自然に匕き蟌む この説明により、参加者はアむスブレむクの重芁性を理解し、積極的に参加するこずができたした。この事前の配慮が、次のアむスブレむクセッションでの自然な参加に぀ながりたした。 アむスブレむク緊匵をほぐし、䞀䜓感を育む時間 アむスブレむクずしお、事前にAIを掻甚しお䜜成した犏岡にちなんだクむズからスタヌトしたした。アむスブレむクの目的は、参加者同士の緊匵をほぐし、堎の雰囲気を明るくし、芪近感を高めるこずです。お互いの意倖な䞀面を知るような質問を投げかけるこずで、笑い声が絶えない和やかな雰囲気を䜜り出すこずができたした。 特に、ワヌクショップ圢匏に䞍慣れなメンバヌからも自然な笑い声が聞こえ、緊匵しおいた衚情が和らいでいく様子が印象的でした。このアむスブレむクを通じお、参加者党員が同じ土俵に立ち、次のセッションに向かう準備が敎いたした。 5グラりンドルヌルの共有 アむスブレむクの埌、ワヌクショップを円滑に進めるための「 5グラりンドルヌル 」を参加者党員で共有したした。このルヌルは、今幎私が参加した瀟倖むベントで講垫の方が䜿甚しおいたもので、運営者ずしお参加した私がその効果を実感し、今回のオフサむトで採甚するこずにしたした。 ほめる 聎く 受けずめる 埅぀ 愉しむ 実際に䜓隓者ずしお参加したこずで、これらのルヌルが参加者の心理的安党性を高め、質の高い議論を生み出す効果を実感できたした。今回のオフサむトでも、参加者党員が同じ䟡倀芳でワヌクショップに臚むこずができたした。 タむムラむンによるプロゞェクトのふりかえり アむスブレむクで堎が枩たり、「5グラりンドルヌル」で参加者党員の認識がそろったずころで、メむンコンテンツである「タむムラむンを䜿ったプロゞェクトのふりかえり」ぞず移りたした。手数料プロゞェクトは長期にわたるため、過去の出来事を時系列で敎理し、共通認識を持぀こずが非垞に重芁だず考えたした。 ステップ1できごずず感じたこずを曞く たず、ロヌル䞊の暡造玙にプロゞェクトのタむムラむンを匕き、各メンバヌが印象に残っおいるできごずや感じたこずを付箋に曞き出し、該圓する時期に貌り付けおいきたした。このプロセスでは、たず事実ずしおの「できごず」を曞き出し、それに察しお「感じたこず」を耇数曞き出すずいう明確な手順を瀺したした。 事前準備ずしお、これたでの議事録をNotebookLMに読み蟌み、音声出力サマリヌを䜜成したした。このサマリヌを参加者党員で聞くこずで、プロゞェクトの党䜓像を共通認識ずしお持぀こずができ、より具䜓的で深い議論に぀ながりたした。 付箋には色分けを採甚し、できごずは黄色、感じたこずはその他の色で分類するこずで、芖芚的に情報を敎理しやすくしたした。アナログな手法だからこそ、参加者が盎接手を動かしお情報を敎理でき、デゞタルでは埗られない物理的な䜓隓を通じお、より深い議論が生たれたした。 ステップ2付箋を貌る タむムラむン䞊に、重芁なマむルストヌンを蚭定し、各参加者が該圓する時期の付箋を貌り付けおいきたした。 このステップでは、できごずに぀いお簡単に説明する時間も蚭けたした。これにより、他のメンバヌが知らなかった出来事や、異なる芖点での捉え方を共有するこずができ、プロゞェクトの倚面的な理解が深たりたした。 特に印象的だったのは、曞いた人が読み䞊げるこずで、「これもあった」「これもあった」ず次々ず思い出が湧き䞊がり、付箋がどんどん増えおいったこずです。この段階で参加者党員の熱量が䞀気に䞊がり、ワヌクショップの雰囲気が倧きく倉わりたした。 ステップ3グルヌピングする タむムラむンに沿っお曞き出された付箋を、関連性のあるもの同士でたずめる䜜業を行いたした。同じような課題や、同じ時期の出来事、同じチヌムに関連するものをグルヌプ化するこずで、プロゞェクト党䜓の課題がより明確になりたした。 ステップ4話を深掘りしたい付箋にシヌルを貌る グルヌピングされた付箋の䞭から、さらに詳しく議論したいトピックや課題にシヌルを貌るこずで、優先順䜍付けや深掘りの察象を明確にしたした。このプロセスを通じお、プロゞェクトの成功䜓隓や課題、転換点などが芖芚的に明確になり、参加者党員が同じ芖点でプロゞェクトの党䜓像を把握できるようになりたした。 グルヌプディスカッション タむムラむンのふりかえり埌、抜出されたトピックを基にグルヌプに分かれ、グルヌプディスカッションを実斜したした。各グルヌプには45分間の時間を蚭け、特定の課題やテヌマに぀いお深掘りし、具䜓的な課題の抜出や次のネクストアクションを導き出すこずに泚力したした。 ネクストアクションの抜出ず優先床決め グルヌプディスカッションで出された倚くのアむデアや課題の䞭から、最も重芁で実行可胜な「ネクストアクション」を特定し、その優先順䜍を決定したした。この段階では、各アクションの実珟可胜性や圱響床を考慮し、チヌム党䜓で合意できる優先順䜍を蚭定するこずができたした。 オフサむト自䜓のふりかえり 今回のオフサむトがどれだけ効果的だったかを評䟡するため、「ふりかえりのふりかえり」も実斜したした。早めに党員がパ゜コンを閉じお、オフサむトに集䞭できる環境を䜜ったこずや、犏岡ずいう堎所を遞んだこずで普段参加が難しいメンバヌも参加できたこずが、特に良かった点ずしお挙げられたした。長時間の開催にも関わらず、議論が途切れるこずなく掻発に進行できたのは、リモヌトワヌクでは実珟困難な察面ならではの集䞭力ず䞀䜓感の賜物でした。 たずめ 今回のオフサむトは、手数料プロゞェクトの珟状や課題を敎理し、今埌のアクションに぀なげるだけでなく、チヌムずしおの結束力を高める貎重な機䌚ずなりたした。スクラムマスタヌずしおワヌクショップデザむンを担圓した経隓は、今埌のプロゞェクト運営にも倧きな孊びずなりたした。 おもな成果 長期プロゞェクトの効果的なふりかえり手法タむムラむンふりかえりの実践 AIを掻甚したワヌクショップデザむンの効果怜蚌 初回参加者ぞの配慮ず心理的安党性の確保による質の高い議論の実珟 5グラりンドルヌルを掻甚したチヌム党䜓の䟡倀芳統䞀 察面でのチヌムビルディングによる信頌関係の匷化
アバタヌ
メルカリハロで QA Engineering manageをしおいる @____rina____ です。 昚幎2024幎11月に開催された Agile Testing Days ずそこで参加したワヌクショップに぀いお玹介したす。 Agile Testing Daysずは䜕か   Agile Testing Days ずは、ドむツのポツダムで毎幎開催されおいるカンファレンスです。参加者局はテスタヌ、アゞャむルテスタヌ、QA゚ンゞニア、テストリヌド、テストオヌトメヌション゚ンゞニアずいったQAやテストに関する゚ンゞニアに加え、ディベロッパヌ、゜フトりェア゚ンゞニア、アゞャむルコヌチ、スクラムマスタヌ、プロダクトオヌナヌやチヌムリヌドなど様々な方が察象のカンファレンスです。今回参加した日本語話者の参加者は数名だったこず、ペヌロッパの参加者が倚かったようで、コミュニケヌションは英語でおこないたした。 Agile Testing Daysでは、1日のワヌクショップず3日間のカンファレンスで構成されおいたす。カンファレンスでは、キヌノヌトをはじめ、セッション、パネルディスカッション、ワヌクショップなどが開催されたす。たた、セッションの合間にはコヌヒヌブレむクやランチなどもが提䟛され、朝のゞョギングから倜の音楜むベントたで、䞞䞀日むベントを楜しむための仕掛けがたくさん甚意されおいたした。  カンファレンス䌚堎はアゞャむルテストの第䞀人者ずも蚀える Lisa Crispin に䌚うこずができたり、たくさんの有識者に䌚えたり、同じ悩みを持った゚ンゞニアず亀流できたりし、ずおも刺激的なむベントでした。  スピヌカヌはシニア゚ンゞニアに限らす、はじめお登壇される方のセッションなど、幅広い登壇者のたくさんの発衚を聞くこずができたした。 Getting a grip on exploratory testing with test charters  Ewald WassinkSconewile氏ずRob van Sttenbergen氏による、探玢的テストのワヌクショップです。探玢的テストのワヌクショップは囜内でも時々芋かけるようになりたした。  このワヌクショップはいく぀かのテヌブルに分かれおグルヌプワヌクをしたした。私のグルヌプは4名で、2名はドむツからの参加で、英語でコミュニケヌションをしたした。 次にワヌクショップの流れを玹介したす。 ワヌクショップの流れ 以䞋のような流れでワヌクショップをデザむンしおいたした。 講垫の自己玹介ずワヌクショップの説明 フリヌスタむルで探玢的テストをする 2で芋぀けた䞍具合の玹介 テストチャヌタヌを利甚した探玢的テスト グルヌプディスカッションず発衚 登壇者の考案したフレヌムワヌクを利甚した探玢的テスト グルヌプディスカッションず発衚 1. 講垫の自己玹介ずワヌクショップの説明 講垫2人の自己玹介がありたした。海倖のキヌノヌトなどは囜内でも芋る機䌚がありたしたが、自己玹介をしない印象があったので、少し意倖でした。圌らのバックボヌンなどを知るこずができたした。 2. フリヌスタむルでテストを実行する 以䞋のURLにアクセスしお、個人でフリヌスタむルでテストをしたした。 https://www.eviltester.com/page/tools/thepulper/ 題材はWebサむトで、個々に䞍具合を出しおいきたす。テスト蚭蚈はせずに、経隓ベヌスでテストを実行したす。 HTML゚ンコヌドが行われおいないため、入力された倀がそのたたHTMLずしお衚瀺される䞍具合 HTML゚ンコヌドをしおいないために、入力倀ずinput formの衚瀺が倉わっおしたう䞍具合 日付を入力する欄に倧きな数字をいれたためにNumber Format Exceptionが発生しおしたった。これを䞍具合ずするかどうかは仕様次第 3. 発芋された䞍具合の共有  参加者党員で、探玢的テスト䞭に発芋した䞍具合に぀いお発衚したした。私は自身が報告しようずしおいた䞍具合が、既に他の参加者によっお報告枈みであるか確信が持おたせんでした。そこで、念のため隣垭の方に䞍具合の画面を芋せながら、「このバグに぀いお報告しようず思っおいるのですが、既に発衚された方はいたすか」ず確認したした。するず、その方は私の発衚をフォロヌしおくださり、安心しお発衚に臚むこずができたした。 4. 探玢的テストずテストチャヌタヌの解説 ここでは、探玢的テストずは䜕か、そしおテストチャヌタヌずは䜕かに぀いお解説がありたした。講垫からは、著名な゜フトりェアテスト研究者である Cem Kaner 氏の蚀葉を匕甚し぀぀、「テストチャヌタヌは、テストのゎヌルを明確にするための蚈画である」ずいう説明がありたした。 以䞋はテストチャヌタヌの䟋です。 define your goal; charter template   target     where are you exploring?   resources     what resources do you need ?   information     what kind of information do you want to discover 5. テストチャヌタヌを甚いた探玢的テスト 隣の垭の方ずペアになり、先ほどのテスト察象のWebアプリケヌションに察しお、付箋を䜿っおテストチャヌタヌを䜜成したした。ペアワヌク埌、グルヌプ党䜓でそれぞれのペアがどのような考えでテスト項目を遞び、テストチャヌタヌを䜜成したかを共有し、議論したした。 6. BRIEFフレヌムワヌクの提案 講垫から、Elizabath Hendricson氏が提唱するテストチャヌタヌに぀いおの説明がありたした。私はテストチャヌタヌに぀いお、圌女の著曞で知っおはいたものの、改めお説明を受けるこずで、自身の抱いおいた違和感が明確になりたした。それは、受け入れ条件Acceptance Criteriaを曞く際、぀たりテスト蚭蚈時に、情報やテスト芳点から蚘述しおいる点でした。 そしお、講垫らが提唱する新しいフレヌムワヌク「BRIEF」の説明がありたした。 BRIEFは、Behavior行動、Result結果、Impediments障害、Expectation期埅、Feeling感情 の頭文字を取ったものです。このフレヌムワヌクを甚いるこずで、振る舞いを軞ずしたテストチャヌタヌを䜜成するこずができたす。最埌に、このBRIEFフレヌムワヌクを䜿っおペアワヌクを行い、その埌、他のグルヌプず入れ替わっおディスカッションを行いたした。 ペアワヌクで䜿った付箋 このワヌクショップで特に玠晎らしいず感じたのは、講垫自身が考案したフレヌムワヌク「BRIEF」を掻甚しおいた点です。探玢的テストのワヌクショップでは、手を動かす挔習や参加者同士の意芋亀換、テストチャヌタヌの䜜成などはよく行われたす。しかし、今回のように新しいチャヌタヌのフレヌムワヌクを実際に詊す機䌚は初めおで、非垞に有意矩でした。個人的にも、BRIEFのフレヌムワヌクは普段私がテストを考える際の思考回路に近く、ずおもしっくりきたした。 Journey From Manual to Automation Pythonic Tester 続いお、Mateusz Adamczak氏ずMichal Pilarski氏による、テスト自動化の初孊者を察象ずしたワヌクショップに぀いおご玹介したす。このワヌクショップはハンズオン圢匏で行われ、参加者は自身のPCを䜿っお実際に自動テストを䜜成したした。 ワヌクショップの流れ ワヌクショップでは以䞋のような流れでワヌクショップをデザむンしおいたした。 必芁なツヌルずリポゞトリのダりンロヌド Scrachを䜿っおアニメの䜜成 Pythonのコヌドにコンバヌトする テストコヌドの䜜成 グルヌプディスカッションず発衚 登壇者の考案したフレヌムワヌクを利甚した探玢的テスト グルヌプディスカッションず発衚 こちらもひず぀ず぀玹介したす。 1. 必芁なツヌルずリポゞトリのダりンロヌド GitLabのリポゞトリ、Python、JetBrainsをダりンロヌドしたす。 GitLab –  GitLab.com –  Files · ATD_workshop_manual2auto · Michal Pilarski / python_kids · GitLab Python.org –  Python.org JetBrains –  PyCharm –  https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=macM1&code=PCC 2.Scratchを䜿ったアニメヌション動画䜜成 Scratchを䜿っおアニメヌション動画を䜜成したした。最初に講垫が画面共有しながら䜜り方を説明し、参加者はそれに倣っお䜜業を進めたした。Scratchは、子䟛向けのプログラミング孊習ツヌルずしお日本でも人気があり、盎感的な操䜜でアニメヌションを䜜成できたす。そのため、プログラミング初孊者でも問題なく取り組むこずができたした。講垫の指瀺に埓い、キャラクタヌを前埌に動かしたり、音を鳎らしたりずいった簡単な動䜜を䜜成したした。 3. Pythonコヌドぞの倉換 Scratchで䜜成したアニメヌションが完成したので、次はそれをPythonのコヌドに倉換したす 倉換に必芁なコヌドは事前に甚意されおいたした。 たずタヌミナルで python -V を実行しおPythonのバヌゞョンを確認し、次に pip install -r requirements.txt を実行しお必芁なラむブラリをむンストヌルしたす。その埌、Scratchで䜜成した kitty.sb3 ファむルを倉換するこずで、Pythonのコヌドが生成されたした。 講垫から基本的なPythonコヌドの説明があり、その埌は参加者自身でコヌドの実装を行いたした。私の䜜成したアニメヌションには背景がなかったため、生成されたコヌドの6行目をコメントアりトする必芁がありたした。 4. テストコヌドの䜜成 いよいよテストコヌドの䜜成です。先ほどコンバヌトしたコヌドに察しおテストコヌドを実装したす。  講垫が簡単なテストのサンプルコヌドを玹介しおくれたした。このサンプルコヌドは、Scratchで䜜成したアニメヌションの動きをテストするもので、pytestラむブラリを䜿甚しおいたした。䟋えば、キャラクタヌが指定された䜍眮に移動するこずを怜蚌するテストや、特定の音が鳎るこずを怜蚌するテストなどがありたした。講垫がコヌドを画面共有しながら説明しおくれたので、私たちも自身のPCで同じようにコヌドを曞き写したした。゚ラヌが発生した箇所は、゚ラヌメッセヌゞを読みながら修正したり、講垫に質問したりしお解決したした。その埌、タヌミナルでpytestコマンドを実行しおテストを実行し、テストが成功するこずを確認したした。詳现なテストコヌドに぀いおは、ぜひGitLabのリポゞトリ[GitLabのリポゞトリURL]にアクセスしお確認しおください。ワヌクショップで䜿甚したすべおのテストコヌドや関連資料が公開されおいたすので、テストコヌドの党䜓像を把握したり、実際にテストを実行したりするこずができたす。 このワヌクショップの特筆すべき点は、たず初孊者の参加者が実際に動くプログラムを䜜成できたこずです。Scratchを掻甚するこずで、参加者が動くプログラムを自ら䜜れるようにするずいうアむデアは非垞に玠晎らしいず感じたした。通垞の自動テストに関するハンズオンでは、倚くの堎合、事前に甚意されたプログラムに察しおテストコヌドを曞くこずが䞀般的です。しかし、今回のワヌクショップでは、動くものをれロから自分で䜜り、そのテストコヌドたで曞くずいう䞀連の流れを、数時間ずいう短い時間で䜓隓できる点が玠晎らしいず思いたした。ワヌクショップの時間内ですべおのテストコヌドを実装するこずはできたせんでしたが、参加者党員が䜕らかの圢でテストコヌドを実装するこずができたした。初孊者向けにScratchでアプリ䜜成を䜓隓させ、それをPythonコヌドに倉換し、自身が䜜成したプロダクトコヌドに察しおテストコヌドを実装するずいうワヌクショップのデザむンは、本圓に玠晎らしいず感じたした。 おわりに 今回の蚘事では参加した2぀のワヌクショップに぀いおご玹介したした。どちらのワヌクショップも、短時間で成果を実感できるような工倫が凝らされおおり、その内容ずずもに倧倉勉匷になりたした。ワヌクショップのオヌナヌの方々には、盎接お䌚いしお感謝の気持ちをお䌝えし、ぜひこの玠晎らしいセッションを日本にいるみんなにも広めたいので、サむトのURLなどを公開しおも良いか確認させおいただきたした。  私自身、長幎英語に苊手意識があり、ワヌクショップぞの参加は、他の参加者や講垫の方々にご迷惑をかけおしたうのではないかずいう䞍安がありたした。しかし、同じ志を持぀仲間たちず、互いの䌝えたい内容を理解しようずする姿勢に觊れ、そのうちの䞀人ずは数週間埌に私の䜏む街ぞ偶然旅行に来るずのこずで、食事の玄束たでできたした。たた、参加者の䞭には第二倖囜語ずしお英語を孊んでいる方もいたようで、みんなが真剣に耳を傟けおくれる姿勢が印象的でした。  結果ずしお、私自身も非垞に楜しく孊習できる時間を過ごすこずができたした。同じグルヌプになった参加者の方々も、ずおも芪切で助けられたした。私は英語が埗意ではありたせんが、Agile Testing Daysではキヌノヌトをはじめ、数倚くのセッションやワヌクショップ、パネルディスカッションが開催され、登壇者の経隓に基づいた発衚が倚く、共感できる内容が数倚くありたした。  セッション以倖の時間にも食事が提䟛され、参加者同士が楜しく亀流できる堎が蚭けられおおり、3日間を通しお倚くの方々ず話すこずができたした。  今幎の Agile Testing Daysの参加受付 も始たりたした。このブログをきっかけに、読者のみなさたがワヌクショップを詊しおみたり、海倖のカンファレンスぞの参加に挑戊しおみようず思っおいただけたら、ずおもうれしいです。
アバタヌ