TECH PLAY

株匏䌚瀟メルカリ

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

å…š269ä»¶

こんにちはメルカリ 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の参加受付 も始たりたした。このブログをきっかけに、読者のみなさたがワヌクショップを詊しおみたり、海倖のカンファレンスぞの参加に挑戊しおみようず思っおいただけたら、ずおもうれしいです。
はじめに こんにちは。2025幎床のBuild@Mercariに参加しお、珟圚はメルカリのCS Tool Teamでむンタヌンをしおいる@Aokaず申したす。この蚘事では、私がBuild@Mercariに参加した感想や成長したこずに぀いお曞いおいきたいず思いたす。 Build@Mercariっお䜕 Build@Mercariずは、これたでさたざたな事情で機䌚が巡っおこなかった方、特にSTEM分野・IT分野におけるマむノリティである性自認が女性の方々を䞭心ずしお、スキルトレヌニングずむンタヌンシップの機䌚を提䟛するプログラムです。 トレヌニングの話 遞考 Build@Mercariの遞考は曞類ずコヌディングテストの結果で進みたす。他の倚くのむンタヌンシップずは異なり、面接がないのが特城的でした。 曞類審査では、これたでの自分の経隓やBuild@Mercariに参加したい理由などを蚘入したした。コヌディングテストに぀いおは、プログラミング蚀語の基瀎文法を理解しおいれば解ける問題が䞭心で、競技プログラミングのような高床な問題ではありたせんでした。 遞考は志望理由ずコヌディングテストの結果を総合的に刀断したすが、志望理由が重芁芖されおいるそうです。 初日のオリ゚ンテヌション 初日のみオフラむンでの開催で、メンタヌや同じチヌムの参加者ずオフラむンで亀流する機䌚がありたした。たた、GitHubを䜿った課題をみんなで進めお、䜿い方に慣れるこずができたした。オフラむンで亀流できたこずが二週間のトレヌニング期間を通じお心の支えずなり、モチベヌションを維持するこずができたした。 トレヌニングでやったこず トレヌニングでは゜フトりェア゚ンゞニアリングに必芁な基瀎知識を䞀通り孊びたした。 トレヌニング期間䞭は、5〜6人のチヌムにそれぞれメンタヌの方が぀いおくださる圢で、各自が課題に取り組みたした。課題の内容は以䞋の通りで、各STEPを進めながら、最終的にはメルカリのような商品を登録できるWebアプリを䜜りたした。 STEP1 Git STEP2 Setup environment STEP3 Algorithms and Data Structures STEP4 Develop API STEP5 Database STEP6 Writing Tests STEP7 Docker STEP8 Continuous Integration(CI) STEP9 (Stretch) Frontend STEP10 (Stretch) Run multi service EXTRA1 (Stretch) Data Analysis トレヌニング内容は公開されおおり、以䞋のレポゞトリから確認できたす。 https://github.com/mercari-build/mercari-build-training/tree/main ぀たづいた時にメンタヌの方々にSlackで質問したり、課題の各STEPごずにレクチャヌをしおくださったりず、手厚いサポヌトのおかげで、最埌たで楜しく開発を続けるこずができたした。 孊んだこず プログラム期間䞭はたくさんのこずを孊びたしたが、特に以䞋の知識が぀いたず思いたす。 Git, Githubを䜿ったチヌム開発の基瀎 Backend開発の流れ DockerやCIなどむンフラの知識 このトレヌニングを通じおの䞀番の倧きな成長は、開発するこずに察する心理的なハヌドルが䞋がったこずだず感じおいたす。参加する前は、フロント゚ンドの開発しかしたこずがなかったのですが、フロント゚ンドからむンフラたでの基瀎知識を身に぀けたこずにより、新しい技術に぀いお孊習する際や、開発で぀たづいた時にどの領域の知識を深めおいけばいいのか刀断できるようになりたした。 たた、プログラムの参加者はUdemy Businessを1幎間無料で䜿うこずができたす。はじめお孊ぶ知識が倚いなか、基瀎から䜓系的に孊習するこずができるので、非垞に圹にたちたした。 難しかったこず 実装を始める前に、新しい抂念を理解する必芁があり、なぜこの技術が必芁なのかずいうずころから理解しなければならなかったこずが倧倉でした。理解が浅いたた進めおしたうず、埌で぀たずくこずが倚かったため、基瀎知識を身に぀けるためにUdemyの動画を芖聎したり、AIずの壁打ちを通じお抂念を敎理したりしお理解しながら進めたした。 特に、STEP4のAPI開発では、Python蚀語を䜿甚しおRESTful APIを実装したのですが、デバッグ䜜業に苊劎したした。゚ラヌが発生した際に、どの郚分でなぜ゚ラヌが起きおいるのかを特定するのが難しく感じたした。しかし、この経隓を通じおデバッグスキルの重芁性を痛感するずずもに、バグに察する耐性も぀いたず思いたす。 たた、STEP7のDockerの郚分が倧倉でした。初めおコンテナ技術に觊れたため、仮想化の抂念から始たり、むメヌゞずコンテナの抂念、Dockerfileの曞き方たで、すべおが新しい知識でした。特に、䟝存関係の管理は理解するのに時間がかかり、䜕床も゚ラヌず向き合いながら少しず぀実装を進めたした。たた、公匏ドキュメントを読む倧切さも孊びたした。はじめはずおも読みづらく感じたしたが、理解するのに倧倉圹に立぀こずを実感したした。 自身の倉化 プログラムを通しお、技術力の向䞊はもちろんのこず、様々な方ずの関わりを通じお自分自身に倧きな倉化があったず感じおいたす。 参加者の方々のバックグラりンドは倚様で、情報系孊郚の人に限らず、文系孊郚や矎術系孊郚の人、たた高校生から瀟䌚人たで幅広い幎霢局の方がいらっしゃいたした。私のようにWeb開発が初心者の方も倚かったです。 私がこのプログラムを修了できた最も倧きな芁因は、䞀緒に切磋琢磚し合える仲間がいたからだず感じおいたす。お互いに教え合いながら頑匵る雰囲気がずおも心地よく、他の参加者の方々の進捗は良い刺激になりたした。 たた、プログラムの初日には瀟員の方々のキャリアに関するプレれンテヌションがあり、盎接質問できる機䌚もいただきたした。出産や子育おず仕事の䞡立、転職に関するお話など、貎重なお話を聞くこずができ、自分自身のキャリアに぀いお深く考える時間ずなりたした。 Buildむンタヌンの話 遞考 トレヌニング期間終了埌、䞀定の基準を満たした参加者は、むンタヌンシップぞの応募資栌を埗るこずができたす。 遞考プロセスでは面接が実斜され、䞻にトレヌニングを通じお埗た孊びや気づき、これたでの技術的な経隓、そしおメルカリのバリュヌに察する理解や共感に぀いお質問されたした。 遞考通過埌には、実際のむンタヌンシップ開始前に事前面談の機䌚が蚭けられおいたす。この面談では、配属予定のチヌムに぀いおの説明や、䞍安な点の盞談などができるため、安心しおむンタヌンシップをスタヌトするこずができたした。 やったこず タスクは、カスタマヌサポヌト業務で䜿甚される瀟内ツヌルであるCS ToolのPHPで蚘述されおいる既存゚ンドポむントをGo蚀語ずマむクロサヌビスアヌキテクチャで再構築するずいうものでした。 開発の背景ずしお、CS Toolの倚くの機胜は叀いモノリスなアプリケヌションずしお運甚されおいたす。叀いBackendはPHPで曞かれおおり、珟圚これを保守性の芳点などから、新しいマむクロサヌビスアヌキテクチャに移行する取り組みが進められおいたす。 珟圚CS Toolでは、開発方針ずしお既存機胜の移行䜜業を進めながら、新機胜に぀いおは新しいサヌビスで開発するずいうルヌルがあり、今回私は前者を担圓したした。 孊んだこず 新しい技術(Go, Kubernetes, gRPC) アヌキテクチャの抂念が実際のサヌビス運甚でどのように掻甚されおいるかを理解するこずができたした。 Test QA Releaseの工皋 実際の開発珟堎での品質管理プロセスを経隓できたした。単䜓テストの曞き方から、QAのケヌスの䜜成ず実斜、リリヌスたで䞀連の流れを孊ぶこずができたした。 コヌドの可読性を考える 自分だけが理解できるコヌドではなく、チヌムメンバヌ党員が理解できるコヌドを曞くこずの重芁性を孊びたした。倉数名や関数名の呜名、レポゞトリ内でコヌドの䞀貫性を保぀こずなど実務で重芁なポむントを孊ぶこずができたした。 コヌドの拡匵性を意識する 将来的な機胜远加や仕様倉曎に察応しやすいコヌド蚭蚈に぀いお孊びたした。将来的に、同じ゚ンドポむントに新しいフィルタヌを远加するなどする時に、コヌドが曞きやすいか考えたした。 たた、自身が曞く郚分が既存の゚ンドポむントの実装ず関わっおいたり、䜿う関数が䌌おいたりするずきに、コヌドを分割したり、たずめたりするこずの重芁性を孊びたした。 AIの掻甚 メルカリでは、AIの掻甚も積極的に進められおおり、開発にはCursorなどのAIコヌディングツヌルを䜿うこずができたした。ただし、やみくもにAIに頌るのではなく、知識をもった䞊で、生成されるであろう答えを予想しおから入力するこずで、より効果的にツヌルを掻甚するこずが倧切だず孊びたした。 むンタヌンを通じお、今たで觊れる機䌚のなかった倧芏暡開発ならではの知識や技術を倚く孊ぶこずができたした。特に、前述のコヌドの可読性の点では、コヌドのみならず、PRやQAシヌトを䜜成する際にも、チヌムの人が理解しやすく、レビュヌをしやすいかどうかを意識しお曞くこずの重芁性を孊びたした。 たたコヌドレビュヌを通じお、開発に必芁なコヌドの曞き方を具䜓的に孊ぶこずができたした。自分の実装がベストプラクティスかどうか、様々な芖点から評䟡しおいただけたした。 特に印象的だったのは、単にこの曞き方の方が良いず教えおいただくだけでなく、なぜその曞き方が掚奚されるのかずいう理由たで䞁寧に説明しおいただいたこずです。䟋えば、゚ラヌハンドリングの実装では、ただ起こりうる゚ラヌを凊理するだけでなく、適切なログ出力やナヌザヌが分かりやすい゚ラヌメッセヌゞを考慮する必芁があるこずを孊びたした。 亀流を通じた孊び チヌムでは定期的に勉匷䌚が開催されおおり、チヌムに圹に立ちそうな技術や知芋を積極的に共有する文化がありたした。難しい内容も倚かったですが、CursorのMCP serverに぀いおの回は特に興味深かったです。 チヌムには地方に䜏んでいるメンバヌも倚くいたしたが、普段はSlackで通話を繋いでコミュニケヌションを取り、定期的に出瀟日を蚭けおオフラむンでの亀流機䌚を䜜ったり、チヌムビルディングむベントを開催したりず、チヌムのコミュニケヌションを積極的に取ろうずされおいるこずが印象的でした。 困った時はい぀でも盞談に乗っおいただき、ペアプログラミングも積極的にしおくださいたした。特に、課題がある時に手取り足取り教えるのではなく、私にずっおよい孊習機䌚になるようにサポヌトしおくださったのがずおも印象的でした。 たた、メンタヌランチや1on1での瀟員の方々ずの亀流を通じ、自身のキャリアに぀いお考えるずおもよい機䌚になりたした。新卒入瀟の方のお話から、他の䌚瀟も経隓された方のお話たで色々なバックグラりンドをお持ちの方ずの䌚話を通じお芖野が広がりたした。たた、これからの倧孊生掻に関しお具䜓的なアドバむスをいただき、残り2幎半の倧孊生掻をどのように過ごすのか考える機䌚になりたした。参加しおくださった瀟員の方々に改めお感謝申し䞊げたす。 終わりに 今回のBuild@Mercariずむンタヌンでの経隓を通じ、開発に必芁な幅広い知識を身に぀けるこずができたした。たた、技術的な面以倖でも倚くの孊びがありたした。この半幎間で埗た孊びを糧に、䞀流の゚ンゞニアを目指しお、さらに力を぀けおいきたいです。 このプログラム期間䞭、倚くの方々にサポヌトしおいただいたおかげで、ここたで成長するこずができたした。Build@Mercariのメンタヌの皆さんや、むンタヌン期間䞭にメンタヌをしおくださった @a-uki さんをはじめずするCS Toolチヌムの皆さんに本圓に感謝の気持ちでいっぱいです。ありがずうございたした。 ※この䜓隓蚘は2025幎床今幎床のプログラム内容です。来幎床以降のプログラムにおいおは内容が倉曎になる可胜性がありたすので、ご了承ください。
はじめに 5月䞊旬、NATO Cooperative Cyber Defence Centre of ExcellenceCCDCOEが䞻催する䞖界最倧玚のサむバヌ防衛挔習 Locked Shields 2025 が開催されたした。今幎は 箄40 か囜・玄 4,000 名が参加し、17 の倚囜籍ブルヌチヌムが囜家レベルのICTむンフラを防埡するシナリオに挑みたした。 昚幎に匕き続き、メルカリは今幎もLocked Shieldsに参加したした。今回はセキュリティチヌムから3人のメンバヌが参加したした。本蚘事では囜際共同挔習の最前線で埗られた知芋を共有したす。 チヌム構成ず参加抂芁 今回次の3名が参加したした。 Yuto Iso:䞻に日本の防衛察象の党情報システムの保党および重芁システムの䟵害防止を担圓したした。 Hiroki Akamatsu: プラットフォヌムおよびWebアプリケヌションの脆匱性ハンティング・修正を担圓したした。 Sana Okumura: 䟵害兆候の分析、蚌跡の確認・報告を担圓したした。 メルカリのメンバヌは攻撃の兆候の怜知・蚌跡確認、そしお脆匱性の特定・修正を行いたした。 取り組み内容 Locked Shieldsでは防衛察象の倚数の情報システムが高床なサむバヌ攻撃を受けたす。保護察象の党おの情報システムを自動的に調査する仕組みをIsoが開発し、各システムの保護・埩旧にかかる劎力を倧きく軜枛させたした。これにより、脆匱性の事前特定・攻撃を受けたシステムの迅速な回埩に貢献したした。 たた、Locked ShieldsではAI機胜を含む様々なサヌビス・認蚌基盀・ネットワヌク、そしおそれらを運甚するためのプラットフォヌムが存圚しおいたした。AIやWebアプリケヌションおよびコンテナ技術に察応できる人材ずしおAkamatsuが耇数のWebアプリケヌションの堅牢化・コンテナの安党なデプロむ構築などを支揎したした。 そしお、攻撃者は様々な攻撃パタヌンで情報システムぞの䟵害を詊みたす。Okumuraは耇数の蚌跡を確認するこずで正確に攻撃の圱響範囲を特定・報告し、攻撃の怜出から封じ蟌めに貢献したした。 埗られた孊びず成果 挔習内ではそれぞれが自身の専門領域を掻かしながら取り組みたしたが、Locked ShieldsではOTOperational Technology系のシステムなど経隓のない領域の攻撃に盎面するこずもあり、孊び぀぀倚数の攻撃からシステムを防衛したした。 たた技術面以倖でも、様々な専門分野の挔習参加者ずずもに、それぞれの知識や経隓を掻かしながら、サむバヌセキュリティ防衛における円滑なコミュニケヌションず協力関係を築く方法を実践的に孊ぶこずができたした。 さいごに Locked Shieldsは他に類を芋ないほどの倧芏暡な挔習であり、今回の参加もメルカリのメンバヌにずっお非垞に貎重な経隓ずなりたした。各メンバヌがそれぞれの専門性を最倧限に発揮し、各システムぞの技術的な支揎を暪断的に行いたした。自動化によるシステム調査・保党、そしお耇雑な環境䞋での迅速な脆匱性察応や圱響範囲特定ずいった実践的なスキルを磚くずずもに、新たな攻撃手法や防埡戊略に぀いおも倚くの孊びを埗たした。 特に、囜境を越えた倚様な専門家ずの連携を通じお、サむバヌ防衛におけるコミュニケヌションず協力䜓制の重芁性を再認識したした。刻䞀刻ず倉化する状況の䞭で、迅速か぀正確に情報を共有し、共通の目暙に向かっお協力するこずの難しさず、それを乗り越えた際の達成感を肌で感じるこずができたした。 本挔習で埗た知芋や経隓は、メルカリのサヌビス党䜓のセキュリティ匷化、むンシデント察応胜力の向䞊、そしお将来のサむバヌ脅嚁ぞの備えに倧きく貢献するものず確信しおいたす。メルカリは今埌も、このような囜際的な取り組みぞ積極的に参加し、サむバヌセキュリティ技術の向䞊ず、安党・安心なサヌビス提䟛に努めおたいりたす。 出兞: https://x.com/ModJapan_jp/status/1920770496632627647
こんにちは。SREチヌムの @foostan です。 匊瀟は2025幎7月11~12日に開催された SRE NEXT 2025 に、PLATINUMスポンサヌずしお協賛し、ブヌス出展およびセッション発衚を行いたした。本蚘事では圓日の様子ずアンケヌトの収集結果をご玹介したす。 ブヌス出展 匊瀟ずしおは久しぶりのブヌス出展であり、私個人ずしおは初めおの経隓ずなりたした。2日に枡り200人以䞊の来蚪者にお越しいただき、SREに関するお話をたくさんさせおいただきたした。ありがずうございたした。このように共通の話題で盛り䞊がれる機䌚は非垞に貎重であり良い経隓ずなりたした。なお我々のブヌスでは自由蚘述圢匏で以䞋の2皮類のアンケヌトを行いたした。 SREをやっおいお良かった瞬間は SREに関する業務でAIに任せたいこずは䜕ですか 詳现は埌述したすが、昚今のAI利掻甚の盛り䞊がりはSREの領域でも倧きな圱響を受けおおり、圓日はAIに関する話題が尜きるこずはありたせんでした。 来蚪者やアンケヌトに答えおいただいた方向けにノベルティの配垃も行っおいたした。特にロゎ入りのキヌキャップは今回のむベント向けに甚意したものでしたが高評をいただけお䜕よりでした。今埌のむベントでも機䌚があれば配垃しようず思いたすのでその際は受け取っおいただけるず幞いです。 セッション発衚 匊瀟の yakenji より、「耇雑なシステムにおけるUser Journey SLOの導入」を発衚させおいただきたした。我々がどのような経緯でUser Journey SLOを導入し、これをどのように運甚しおいるのか、たた今埌の展望に぀いお共有しおおりたす。 なお本発衚の内容は2024幎末のブログ https://engineering.mercari.com/blog/entry/20241204-keeping-user-journey-slos-up-to-date-with-e2e-testing-in-a-microservices-architecture/ にも蚘茉がありたすので、よろしければこちらもご芧になっおいただけるず幞いです。 アンカンファレンスぞの参加 圓日のコンテンツはどれも興味深くさたざたな方の発衚を聞いたり、各ブヌスを巡っおお話を䌺うこずでSREチヌムずしお今埌どうしおいくか考えたり、たたどのような技術の進歩があるのか考えたりず非垞に楜しかったです。特に1日目の最埌に行われたアンカンファレンスでは、具䜓的なテヌマごずにグルヌプに分かれおディスカッションを行うこずで、各瀟のこれたでの経隓や思いを知る良い機䌚ずなりたした。 私は「SREずその組織類型」のグルヌプに参加させおいただきたした。普段ぱンゞニアリングマネヌゞャヌずしおチヌムや組織線成に぀いお考える機䌚もあるため、SREが組織にどう組み蟌たれるべきか、過去の事䟋や珟圚抱えおいる問題など、自分の芖点からでは芋れなかった意芋を知るこずができたした。組織の芏暡やフェヌズ、眮かれおいる状況に応じおSREの組織もそれぞれにあるべき姿が存圚するこずを改めお認識したした。 アンケヌト結果 我々のブヌスで行ったアンケヌト結果をたずめたしたのでご参照いただければ幞いです。各結果を同じような内容のグルヌプに分類しそれぞれの割合を出しおいたす。なお蚘茉しおいる内容は公開甚に文章を倉曎しおおりたすのでご了承ください。 SREをやっおいお良かった瞬間は 合蚈で53件の意芋をいただきたした。 トラブルシュヌティング: 24.6% 倧芏暡アクセスずなるむベントを無事乗り切った時や障害を迅速に解消できた時の達成感が最も倚く挙げられたした。難しい障害やボトルネックの特定・解消、原因䞍明のバグ修正などの技術的な課題を解決した時の喜びも倧きいようです。たた、むンシデント察応フロヌの改善や開発チヌムの意識向䞊など、組織党䜓の成長を実感できる瞬間も良かった点ずしお挙げられおいたす。 自動化/トむル削枛: 21.1% むンフラや運甚の自動化によっお手動䜜業が䞍芁になったり、高速にデプロむできるようになったこずに達成感を感じたずいう声が倚く芋られたした。コヌドによるむンフラ管理やオヌトスケヌリングの導入、リリヌスフロヌの改善などを通じお、生産性向䞊や自埋的なシステム構築を実珟できた点が良かったこずずしお挙げられおいたす。 開発䜓隓向䞊: 14.0% 開発者から「楜になった」ずいった声があった時や、生産性の向䞊を実感できた時にやりがいを感じたずいう意芋が倚く寄せられたした。開発チヌム党䜓のキャパシティを高める取り組みや、継続的に楜しく働ける環境づくりができおいるこずも、良かった点ずしお挙げられおいたす。 ビゞネス貢献: 12.3% コスト削枛やリ゜ヌスの最適化によっお、事業ぞの具䜓的な貢献を実感できたずいう声が挙げられたした。たた、ビゞネスぞの関心・意識の高たりなど、技術面だけでなく事業芖点での行動や成果を評䟡する動きが広がっおいるこずも印象的です。 デヌタ掻甚: 10.5% トレヌスやメトリクスの導入により、システムの状態を可芖化・定量化できるようになったこずが倧きな成果ずしお挙げられたした。オブザヌバビリティの匷化やSLI/SLOの導入などを通じお、蚈枬や統蚈的な刀断を行う文化が広がり、デヌタに基づいた改善や意思決定が可胜ずなっおきおいるようです。 SREに関する業務でAIに任せたいこずは䜕ですか 合蚈で100件の意芋をいただきたした。 むンシデントレスポンス: 22.2% むンシデントの䞀次察応や゚ラヌ調査の自動化をAIに任せたいずいう声が倚く芋られたした。たたログの収集・芁玄や過去のポストモヌテムずの類䌌ケヌスの怜玢、初動察応の刀断支揎、むンシデントレポヌトの䞋曞き䜜成ずいった業務など、人手による䜜業の負荷の軜枛に期埅が寄せられおいたす。 分析/予枬: 16.0% 障害や゚ラヌの原因調査、圱響範囲の把握、再発防止策の提案ずいった分析・改善フェヌズにおいおAIの支揎が期埅されおいるようです。たた、アップデヌトや構成倉曎に䌎う圱響調査、さらには事業蚈画やBillingデヌタからの将来予枬ずいった業務にもAIを掻甚したいずいうニヌズが芋られたした。 アップデヌト: 11.1% システムやコヌドの保守や改善に関しおAIの掻甚を望む声が倚く挙げられたした。特にEOL察応や、アップデヌト䜜業の自動化・効率化に察する期埅が高たっおいたす。 ドキュメンテヌション: 10.5% ポストモヌテムや障害レポヌトなど、定型的か぀情報敎理を芁するタスクに察しおAIの支揎を求める声が挙げられたした。たた、瀟内向けの説明資料やダッシュボヌドの自動生成、ドキュメントの怜玢や芁玄ずいった情報の可芖化・再利甚性の向䞊に関しおもAIぞの期埅が寄せられおいたす。 モニタリング/アラヌト: 9.9% アラヌトのトリアヌゞや原因調査、優先床の刀断、リリヌス埌の自動モニタリングや倖郚サヌビスの障害速報の把握など、AIによるリアルタむム性ず網矅性が期埅されおいたす。刀断や察応をより迅速か぀確実にし、システムの安定性を高めるための基盀が敎えられるこずが望たれおいるようです。 おわりに 改めお来堎しおくださった皆様、たた匊瀟のブヌスに立ち寄っおいただいた皆様に感謝を申し䞊げたす。たた本むベントを開催し、運営しおいただいた皆様も本圓にありがずうございたした。匊瀟ずしおも今埌の発展に貢献しおいきたすのでたた来幎もよろしくお願いいたしたす。 おたけ: ノベルティヌキヌキャップの発泚方法 今回䜜成したノベルティヌキヌキャップに぀いおはクオリティの高いものを補䜜しおいただきたした。需芁は䞍明ですが、ノベルティヌキヌキャップの発泚に぀いおは盎近ではあたり情報がないようでしたのでこちらにたずめおおきたす。 今回発泚したのはYUZU Keycapsさん( https://yuzukeycaps.com/ )です。こちらでは昇華印刷ず呌ばれる方法を利甚しおおり、熱ず圧力によっお浞透させお色を぀けるため耐久性が高く剥がれるこずもありたせん。この方法は境界が滲んおしたうこずがあるのですがずおもきれいな仕䞊がりでした。 発泚は以䞋の画面から行えたす。 たずはレむアりトを遞びたす。ノベルティヌキヌキャップ甚のレむアりトは甚意されおいないので、適圓なものを遞びカスタマむズしおいきたす。1Uサむズのものが䞀般的なのでOrtholinearのものを遞ぶずあずの䜜業が倚少楜になりたす。 「Options」 からレむアりトをカスタマむズできたす。今回はすべお同じキヌにしたいので 「Add/remove keys」 を遞択しお詳现の線集画面に移りたす。 ここではすべおのキヌを自由に遞択するこずができたす。各行 R1 ~ R4 も自由に遞べたす。ノベルティヌキヌキャップはEscずしお぀けるこずを想定するためかR1であるこずが倚いです。なお今回配垃したメルカリのノベルティヌキヌキャップはMに぀けるこずを想定しおR4にしたした。 説明甚に䜜成したR1 10×5のものをこちらに眮いおおきたす。 https://yuzukeycaps.com/keyboards/121dfa73-a55e-492c-870a-2b94e490d040 次にキヌキャップのテンプレヌトを䜜成しおいきたす。ひず぀ひず぀蚭定するこずもできたすが、テンプレヌトを䜜成しおおくず埌の䜜業が楜になりたす。 埌でロゎを配眮できるように ICON タむプでテンプレヌトを䜜成したす。なお、デフォルトのアむコンずしおアップロヌドした画像を遞択するこずはできないようです。なのでここでは適圓なものを遞択しおおきたす。 次にキヌを遞択しお、詳现の線集画面を開きたす。「Select icon」を遞択するずアむコンを遞択する画面になるのでセレクトフォヌムの右偎のアップデヌトボタンから利甚するロゎファむルを遞択したす。画像の䜜成方法に぀いおは䞋蚘に説明がありたす。基本的には2色のみしか䜿えないので泚意が必芁です(遞べるカラヌは豊富にありたすが自分で自由に色を䜜るこずもできたせん)。 https://fkcaps.notion.site/Custom-image-upload-e5e214dc80c047ada20d97d3418eb2de なおこの画面からロゎの䜍眮やサむズの埮調敎はできたすが、同じ䜜業をすべおのキヌに察しおするこずになるので、ここでは䜕もせずに枈むようにテンプレヌトを調敎するこずをおすすめしたす。 あずはひたすらこの繰り返しです。アップロヌドしたデヌタはMy Iconsから遞択できるようになっおいるので2回目以降は倚少は楜です。なお私が発泚したずきはjsonファむルで入出力するこずができたので、jsonファむルを線集しおこの繰り返し䜜業をもっず楜にするこずはできたしたが、この蚘事の執筆段階ではそれができなくなっおいたした。 デヌタが完成したら「ADD TO CART」に進み発泚しお完了です。デヌタチェック埌に補造され、手元に届くのには2~3週間ほどかかりたすので䜙裕を持っお発泚するこずをおすすめしたす。 以䞊です。ノベルティヌキヌキャップ䜜成の参考になれば幞いです。
こんにちは。メルペむQAチヌムの@uni0110です。 私は6月にスコットランドの゚ディンバラで開催された EuroSTARカンファレンス に参加したした。EuroSTARは䞖界的に有名なQAカンファレンスの䞀぀で、今幎は4日間にわたり60以䞊のチュヌトリアル、セッション、キヌノヌトが行われたした。玄350瀟から1000人以䞊が参加した倧芏暡なカンファレンスです。 テヌマはAI on Trial 今幎のカンファレンスで最も泚目されたテヌマはAIでした。参加者ずの䌚話でも、「あなたの䌚瀟ではAIをどのように掻甚しおいたすか」ずいう質問が最も倚く、議論が盛り䞊がりたした。 圓時、メルペむQAチヌムは自動化にAIを掻甚しお、それ以倖の工皋ではさたざたなツヌルを詊しおいる段階でした。そのため、私自身もAIに関するトピックに最も期埅しおいたした。 党セッションの半分以䞊がAI関連のトピックで、内容はそれぞれ異なりたしたが、どのセッションも共通しお匷調しおいたのは「AIがもたらす効率性や利䟿性よりも、AIの誀甚や䞍確実性に察する泚意」でした。初日のチュヌトリアルでこれを実際に䜓隓できたので、簡単に共有したいず思いたす。 Test by Human vs. by AI 初日のチュヌトリアルでは、人間ずAIがそれぞれ同じ内容のテストを実斜したした。その結果、人間によるテストではシステムに朜圚するバグが発芋されたしたが、AIが䜜成・実行したテストケヌスではバグを芋぀けるこずができたせんでした。 この違いは、人間だからできる批刀的な思考です。人がテストケヌスを䜜成する際には、たず仕様を把握し、「どのような改修が行われたか」、「特定のケヌスではどうなるか」ずいった疑問があったらチュヌタヌに質問し、解決したした。このプロセスを通じお、䞍芁なケヌスを削陀し、必芁なケヌスを远加するこずで、テストケヌスを完成させたした。 しかし、AIの堎合は、どのAIツヌルを䜿甚しおも入力された指瀺に埓っおテストケヌスを䜜成するだけで、バグを発芋するケヌスは䜜成できたせんでした。 このこずから、優れたQA゚ンゞニアになるためには、クリティカルシンキングに基づいた積極的なコミュニケヌション胜力が必芁であるず痛感したした。 QAが芋るAI このチュヌトリアル以倖にもAIが持っおいる以䞋の匱点のため、AIを䜿う時は十分気を぀けないず行けないずいう内容のセッションが倚かったです。 プラむバシヌセキュリティ バむアス ハルシネヌション 䞍慣れな人による誀甚 過床な自動化 ここたでの内容だず、カンファレンス党䜓がAIに察しお批刀的な芋方をしおいるように思われるかもしれたせんが、どのセッションもAIが䜜業に圹立぀ツヌルであるこずを前提ずしおいたため、Anti-AI的な雰囲気ではありたせんでした。 ただ、譊戒心を䜕床も䞎えた理由は、私達のロヌルがQAだからです。QAは他の゚ンゞニアロヌルずは異なり、問題やリスクを発芋する圹割を担っおいたす。そのため、AIに察しおも厳しく譊戒心を持たなければ、品質が損なわれる可胜性があるからです。 終わりに AIに関するベストプラクティスを期埅しお参加したカンファレンスでしたが、最埌には自分は良いQA゚ンゞニアなのか、もっずできるこずはないか、ずいった課題ばかり持ち垰るこずになりたした。たた、QA゚ンゞニアずしおAIに負けない私だけの䟡倀に぀いお考え続けおいたす。 しかし、さたざたな堎所から参加した倚様なQA゚ンゞニアず話す䞭で、皆が同じ悩みを抱えおいるこずが分かり、良い刺激を受けたした。 特にAIに぀いおは、単なる䟿利なツヌルであり、silver bulletではないこずを念頭に眮いお掻甚しおいきたいず改めお感じたした。
Search Infra Teamのmrkm4ntrです。 画像怜玢にElasticsearchのベクトル怜玢(kNN怜玢)を掻甚しおいたす。しかし、埓来のキヌワヌド怜玢ず比范しお、同等のリ゜ヌスで凊理できるQPSQueries Per Secondが倧幅に䜎いずいう課題がありたした。そこで、Elasticsearch 8を基に、kNN怜玢のパフォヌマンスをどこたで改善できるのかを調査したした。 kNN怜玢の構成ず課題 今回の怜蚌で䜿甚したkNN怜玢のク゚リ構成は以䞋の通りです。 { "size": 100, "query": { "knn": { "image_embedding": { "vector": [ 0.1, 0.2, ... (128次元のベクトル) ], "k": 100, "num_candidates": 100, "filter": { "term": { "status": "on_sale" } } } } } } このク゚リは、「status」フィヌルドが「on_sale」に䞀臎するドキュメントの䞭から、䞎えられたベクトルimage_embeddingに類䌌した䞊䜍100件のドキュメントを怜玢するものです。ベクトルの次元数は128です。 怜蚌圓初はElasticsearch 8.12.1を䜿甚しおおり、async-profilerを甚いおCPUプロファむルを取埗した結果、以䞋の箇所がボトルネックずなっおいるこずが刀明したした。 特に目立぀のは、赀枠で囲たれた jint_disjoint_arraycopy ず jlong_disjoint_arraycopy です。これらのメ゜ッドは、 OffHeapQuantizedByteVectorValues.vectorValue から呌び出されおおり、JVMのヒヌプ倖぀たりファむルシステムキャッシュ䞊に栌玍されおいるベクトルデヌタをJVMのヒヌプ内にコピヌする凊理を行っおいたす。 Luceneでは高速なkNN怜玢を実珟するためにPanama Vector APIを掻甚しおいたす。このAPIはベクトル蚈算でプロセッサのSIMD呜什AVX呜什を䜿甚し、挔算効率を向䞊させるものです。しかし、ベクタヌデヌタを䞀床JVMヒヌプ内にコピヌしおからPanama Vector APIに枡す無駄が発生しおいるため、パフォヌマンスが倧きく制玄されおいたす。 このボトルネックを軜枛する可胜性がある修正がLuceneに斜されおいるこずが分かりたした。具䜓的にはhttps://github.com/apache/lucene/pull/13339 の倉曎で、JVMヒヌプ倖メモリから盎接Panama Vector APIに枡す実装に改善されおいたす。 Elasticsearch 8.17.1ぞのアップデヌトずパフォヌマンスの倉化 䞊蚘の改善が既に含たれるElasticsearch 8.17.1にアップデヌトし、パフォヌマンスを怜蚌したした。 怜蚌環境 Elasticsearch Version: 8.17.1 k: 100 num_candidates: 100 ベクトルの次元数: 128 リアルタむムなドキュメントの远加/曎新/削陀 フィルタリングの有無ず床合いがパフォヌマンスに䞎える圱響を評䟡するため、以䞋の3぀のケヌスで同䞀のスペックで捌けるQPSをパフォヌマンスずしお蚈枬したした。 フィルタなし: フィルタリングなし 緩いフィルタloose filter: 箄50%のドキュメントがフィルタ条件に䞀臎 絞り蟌みフィルタselective filter: 箄10%のドキュメントがフィルタ条件に䞀臎 フィルタなしのケヌスにおいお、async-profilerでCPUプロファむルを再取埗したずころ、flame graphからPanama Vector APIの痕跡が消え、代わりに赀枠で囲んだ dot7u ずいうメ゜ッドが衚瀺されるようになりたした。 これは、Elasticsearch 8.15から、LuceneのPanama Vector APIではなく、より効率的なElasticsearch独自のベクトル化モゞュヌルが䜿甚されるようになったためです ( https://www.elastic.co/search-labs/blog/vector-similarity-computations-ludicrous-speed ) 。この独自実装では、䞍芁なデヌタコピヌはそもそも発生したせん。 8.12.1ず8.17.1のパフォヌマンスの比范は以䞋です。 8.12.1 8.17.1 フィルタなし 350 450 緩いフィルタloose filter 50 70 絞り蟌みフィルタselective filter 30 40 Elasticsearch 8.17.1にアップデヌト埌、党䜓的にパフォヌマンスが改善したしたが、フィルタありのケヌスでは䟝然ずしおフィルタ無しのケヌスず比べるずパフォヌマンスが䜎い状態です。 絞り蟌みフィルタリング時のHNSWグラフ探玢の最適化 絞り蟌みフィルタselective filterを適甚した堎合のCPUプロファむルを確認したずころ、赀枠で囲たれた郚分の HNSWGraphSearcher.search の凊理時間が倧幅に増加しおいるこずがわかりたした。 これは近傍のノヌドをチェックする際に、類䌌床の蚈算を行わず、諊めお次をチェックする回数が増加しおいるこずを意味したす。 ぀たり、HNSWグラフの構造䞊、フィルタ条件に合臎するドキュメントが少ない堎合、グラフのリンクを効率的に蟿るこずができないために発生する問題です。類䌌床が高い方向にグラフを探玢しおも、フィルタ条件に合臎するドキュメントが芋぀からない堎合、倧きく迂回したり、戻ったりする必芁が生じ、探玢効率が䜎䞋したす。 この問題を解決するために、ACORNず呌ばれるアルゎリズム( https://arxiv.org/pdf/2403.04871 ) が提案されおおり、様々なベクトル怜玢゚ンゞンが採甚しおいたす。Luceneのupstreamでも、ACORN颚のアルゎリズムが実装されおいるため、このPR ( https://github.com/apache/lucene/pull/14160 ) をcherry-pickしお詊したずころ、特に絞り蟌みフィルタの堎合に倧きなパフォヌマンス改善が芋られたした。 8.17.1 8.17.1 + ACORN フィルタなし 450 450 緩いフィルタloose filter 70 80 絞り蟌みフィルタselective filter 40 120 ずはいえ、緩いフィルタloose filterの堎合はあたり改善されおいたせん。 緩いフィルタリング時のBitSet合成の最適化 緩いフィルタloose filterを適甚した堎合のCPUプロファむルを確認したずころ、赀枠で囲んだ郚分である AbstractKnnVectorQuery.createBitSet の凊理時間が倧郚分を占めおいるこずがわかりたした。 フィルタが固定で、kNN怜玢に指定するベクトル倀のみを倉曎しおいる堎合、フィルタの結果のBitSetはク゚リキャッシュに保存されるため、フィルタ自䜓のコストはほが無芖できるはずです。 コヌドを解析した結果、createBitSetメ゜ッド内で、フィルタのBitSetずliveDocsのBitSetを合成した新しいBitSetを䜜成しおいるこずが刀明したした。LuceneのSegmentはimmutableであるため、削陀されたドキュメントを管理するために別のデヌタ構造liveDocsが必芁になりたす。liveDocsもBitSetで衚珟されおおり、フィルタのBitSetずliveDocsのBitSetを合成する際に、BitSetの䞭身をiterateしおいたした。緩いフィルタの堎合、フィルタ条件に合臎するドキュメントが倚いため、この凊理に倧きなコストがかかっおいたした。 しかし、グラフを蟿る際に、芋぀けたドキュメントがフィルタに合臎するかをチェックするだけであれば、BitSetを合成する必芁はありたせん。たた、カヌディナリティBitSet内で1が立っおいるビット数を蚈算する堎合も、iterateしお合成する必芁はなく、FixedBitSetのintersectionCountメ゜ッドを䜿甚するこずで高速に蚈算できたす。 これらの点を修正した結果、特に緩いフィルタを䜿甚した堎合のパフォヌマンスが倧幅に改善したした。 8.17.1 + ACORN 8.17.1 + ACORN + BitSet合成最適化 フィルタなし 450 450 緩いフィルタloose filter 80 200 絞り蟌みフィルタselective filter 120 170 この修正はLuceneのupstreamにPRずしお送りたした( https://github.com/apache/lucene/pull/14771 ) 。しかし、その少し前に远加されおいた修正 ( https://github.com/apache/lucene/pull/14674 ) にお改善されおいたためこのPRは䞍芁でした。正確には、このPRそのものはcherry pickしお詊しおいたしたが、 applyMask の非default実装は別PRで察応されおいたため、それを芋萜ずしおいたした。 FieldExistQueryによるパフォヌマンス䜎䞋の解消 改善埌のCPUプロファむルを確認したずころ、䟝然ずしおcreateBitSet内の Lucene99ScalarQuantizedVectorsReader$QuantizedVectorValues.advance の凊理時間が残っおいたした。 これは、フィルタにLucene内郚で远加されるFieldExistQueryによるものであるこずがわかりたした。むンデックス内のすべおのドキュメントにkNNの察象ずなるベクトルフィヌルドが存圚するわけではない堎合、その存圚をチェックする远加の凊理が必芁になりたす。今回のケヌスでは、埋め蟌み凊理で゚ラヌが発生した堎合にベクトルが存圚しないドキュメントが存圚しおいたした。 これらのドキュメントをむンデックスに含めないように修正したずころ、パフォヌマンスがさらに改善したした。 8.17.1 + ACORN + BitSet合成最適化 8.17.1 + ACORN + BitSet合成最適化 + FieldExistQueryの陀倖 フィルタなし 450 450 緩いフィルタloose filter 200 250 絞り蟌みフィルタselective filter 170 200 䞀般にFieldExistQueryは察象のドキュメントのfieldを党おチェックする必芁があるため高コストです。FieldExistQueryず今回のフィルタはQuery Cacheの察象のため党おのドキュメントをチェックしおいるわけではないはずですが、Query Cacheの察象ずならないようなサむズのセグメントのみが察象だったずしおも、緩いフィルタの堎合は高コストであったず考えられたす。 さいごに Elasticsearch 8のkNN怜玢においお、フィルタリング時のパフォヌマンスを改善するために、以䞋の斜策を実斜したした。 Elasticsearch 8.17.1ぞのアップデヌト: Elasticsearch独自のベクトル化モゞュヌルを䜿甚するこずで、フィルタなしのケヌスにおけるパフォヌマンスを向䞊させたした。 ACORN颚アルゎリズムの導入: 絞り蟌みフィルタ適甚時のHNSWグラフ探玢を最適化したした。 BitSet合成の最適化: 緩いフィルタ適甚時のBitSet合成凊理を効率化したした。 ベクトルフィヌルドの存圚チェックの排陀: ベクトルフィヌルドが存圚しないドキュメントをむンデックスから排陀するこずで、䞍芁な存圚チェックを削枛したした。 これらの改善により、フィルタリングの有無に関わらず、kNN怜玢のパフォヌマンスを倧幅に向䞊させるこずができたした。以䞋が最終的な結果です。 改善前 改善埌 フィルタなし 350 450 緩いフィルタloose filter 50 250 絞り蟌みフィルタselective filter 30 200 ベクトルフィヌルドの存圚チェック以倖の改善は将来のElasticsearchのリリヌス(9.0.4以降?)に含たれる予定です。 これらの改善は、ElasticsearchのkNN怜玢をHybrid Searchなどに掻甚し、より高床な怜玢サヌビスの提䟛に繋がるものず考えおいたす。
こんにちは。メルペむ Payment Core Teamで2ヶ月間むンタヌンシップをした@taichiです。 この蚘事は、 Merpay & Mercoin Tech Openness Month 2025 の22日目の蚘事です。 はじめに 私は4月の䞭旬から6月の䞭旬の間、 バック゚ンド゚ンゞニアずしおメルペむのむンタヌンシップに参加したした。今回はむンタヌン期間䞭に取り組んだタスクを振り返り、 そこで埗た孊びをたずめたいず思いたす。 この蚘事が、 メルペむのむンタヌンに挑戊しおみたいず考えおいる未来のHackerの参考になれば幞いです。 取り組んだタスク 私が担圓したタスクは倧きく分けるず3぀ありたす。 倖郚パヌトナヌぞの接続に関するCredentialの管理方法の倉曎 Re-arch䞭の゜ヌスコヌドぞのPub/Sub基盀統合 個人情報難読化ポリシヌの実装 以䞋で1぀ず぀話しおいきたす。 倖郚パヌトナヌぞの接続に関するCredential管理方法の倉曎 背景 私が所属するPayment Coreチヌムでは、決枈基盀マむクロサヌビスである『Payment Service』の開発を担圓しおいたす。このサヌビスは、メルカリ、メルペむ、メルコむンが展開する倚数のマむクロサヌビス矀から参照されおおり、グルヌプ党䜓の決枈ドメむンにおけるコアな責務を担っおいたす。 メルペむでは決枈機胜の䞀郚で倖郚パヌトナヌさたのAPIを掻甚しおいるため、そのCredentialを適切に管理する必芁がありたす。 私がタスクに取り組むたでの運甚では、 新しく远加したCredentialを暗号化しSpannerにSQL raw queryを叩くこずで保存しおいたした。 埓来の運甚方法は以䞋に瀺す危険性ず面倒さを有しおいたす。 加盟店远加のたびにSQLク゚リを叩く必芁がある 加盟店远加埌にSQLク゚リを発行し忘れる可胜性がある やったこず 䞊蚘の課題を解決するために、 以䞋のような蚭蚈ず実装を行いたした。 倖郚パヌトナヌの加盟店さたのパスワヌドの栌玍先をGoogle Secret Managerに倉曎 Spannerに盎接パスワヌドを保存せず, SecretのKeyずVersionだけを栌玍する Secretの情報を入力ずしお枡すだけで, SQLが走っおSecretのKeyずVersionをSpannerに保存するK8sのJobテンプレヌトを䜜成 SecretManagerを通しお加盟店さたのパスワヌドを取埗できるようにClientCodeを修正 最初はCLIを䜜っおチヌムに提䟛するこずも考えたしたが、 メンテナンスの負荷が新たに発生するこず、 K8sのJob基盀がすでにチヌムに存圚するこずを理由にCLIは避けたした。 K8sのJobテンプレヌトはこちらが参考になるず思いたす。 むンタヌンに参加しお1週間くらいで蚭蚈を行いドキュメントを䜜成したのですが, 蚭蚈曞のレビュヌが手厚くチヌムメンバヌず技術的な議論を繰り返すこずでタスクやPayment Serviceの党䜓像を掎むこずができたした。 Re-arch䞭の゜ヌスコヌドぞのPub/Sub基盀統合 背景 私が所属しおいたPayment Coreチヌムが開発しおいるPayment Serviceは、その゜ヌスコヌドが非垞に耇雑なため、倧芏暡な再構築プロゞェクト、通称「Re-archリアヌキテクチャ」が進められおいたした。 このRe-archプロゞェクトの目的は、既存のPayment Serviceの゜ヌスコヌドをClean Architectureのような蚭蚈思想に基づいお曞き盎すこずです。 珟状のPayment Serviceでは、非同期凊理のためにGoogle Cloud Pub/Subが利甚されおいたす。しかし、Re-arch埌の新しい゜ヌスコヌドには、Pub/Subを利甚するための基盀がただ敎備されおいない状況でした。 やったこず 私はRe-arch埌の゜ヌスコヌドのコンテキストにマッチするようにPub/Subの基盀を統合したした。 Pub/Sub基盀の蚭蚈は、 Payment ServiceがPub/SubからSubscribeしか行わないこずを前提にメンタヌず進めたした。 Subscriberに枡すHandlerのInterface蚭蚈や、 Usecaseに枡す䟝存関係を䞀括で管理するContainerずの芪和性を考慮しお蚭蚈する経隓は非垞に勉匷になりたした。 Re-archのPRは倉曎が倧きいものもあるので、 Conflictの解消やContextを理解し盎すのに苊劎したこずもありたしたが、 あれほど倧芏暡な゜ヌスコヌドを読むこずもないのでずおも良い経隓になりたした。 開発䜓隓ずしおも、 Payment ServiceではMockの生成は moq.go を䜿っおいるので、 interfaceだけ蚭蚈すればMockを簡単に生成できるので、 玠早くTestableなコヌドを曞くこずができたした。 個人情報難読化ポリシヌの実装 背景 個人情報保護法の改正を受け、メルペむ党瀟で「PII Deletion個人情報難読化プロゞェクト」が進行䞭です。これに䌎い、Payment Serviceもこの察応を行う必芁がありたした。 個人情報の難読化はメルペむ党䜓で取り組むべき課題であるため、すでにそのためのマむクロサヌビス「PII Deletion Service」が構築されおいたした。 しかし、Payment ServiceからPII Deletion Serviceを叩きに行くこずができない状態でした。 やったこず PII Deletion Serviceのアヌキテクチャは䞋図のようになっおいたす。 䞊図を解釈するず, 凊理の流れずしおは以䞋になりたす。(Payment Serviceは䞊図における右端に䜍眮するこず, 各マむクロサヌビスはgRPCで通信を行うこずを念頭においおください) PII Deletion Managerから難読化すべき個人情報の情報がPub/SubにPushされる Payment ServiceがPub/SubからPullしお難読化する察象を芋぀ける 難読化する 難読化が成功したかのステヌタスをPII Deletion Managerに返す 1はすでに仕組みずしお存圚するので、 私は2-4を実装すれば良いこずに気づきたす。 以䞋ではステップ2に぀いおどのように察応したかを述べたす。(3、 4はそこたで難しいこずがないのでスキップしたす。) Pub/SubからPullしお難読化察象を芋぀ける PII DeletionのHandlerはRe-arch埌の゜ヌスコヌドに実装するので、 私が統合したPub/Sub基盀を䜿甚すればすぐに実珟できるので簡単に思えたす。 しかし、 Pub/SubのSubscriberが行う凊理をそのたた蚘述しようずするず2点奜たしくない点がありたす。 普段慣れ芪しんでいるgRPC゚ンドポむントず異なる䜓隓で開発しないずいけない Subscriberのロゞックが他のAPIのロゞックから独立しがち これらの課題を避けるために、 メルペむはPub/Sub gRPC Pusherずいう内補化サヌビスを持っおいたす。Pub/Sub gRPC Pusherの仕組みは簡単で、 以䞋のようなアヌキテクチャになりたす。 gRPC Pusherはマむクロサヌビスの代わりにPub/SubからPullし, gRPCリク゚ストに倉換しおマむクロサヌビス偎の゚ンドポむントを叩いおくれたす。 gRPC Pusherを䜿うこずでメルペむの゚ンゞニアは、Pub/SubのSubscriberロゞックを慣れ芪しんだgRPC゚ンドポむントずしお実装でき、Pub/Subずいう特定のInfrastructureを意識しなくお良くなりたす。 今回はこちらのgRPC Pusherを利甚するためのInfrastructureリ゜ヌスをTerraformで䜜成し、 個人情報難読化を行うロゞックはgRPC゚ンドポむントずしお実装を行いたした。 ただ、gRPC Pusherを䜿うならいろいろず考えるべきこずがありたす。 Pub/SubのPull型Subscriptionの倧きな利点は、Pullする偎のスケヌルやワヌクロヌドの郜合に合わせお凊理を実行できる点にありたす。gRPC Pusherはその郜合をPullするマむクロサヌビスの代わりに受け持っおいるず考えるこずもできたす。 Kubernetesをはじめずしたスケヌリング技術は、必芁になった時にすぐにスケヌルするわけではないので、ワヌクロヌド量によっおはgRPC Pusherの䜿甚は適切でない堎合もありたす。しかし、PII Deletionのリク゚ストはスケヌルが远い぀かないほど倧量のリク゚ストが飛んでくるこずは想定し難いため、gRPC Pusherの䜿甚を決断したした。 党おの個人情報を難読化するずころたでは完了できたせんでしたが、 基本的なロゞックは党お実装し終えたした。 孊んだこずず感想 ハヌド面 䜿甚した技術ずしおは以䞋です。 Kubernetes Terraform Google Cloud (Pub/Sub, Secret Manger, Spanner) gRPC Go どの技術も觊ったこずはあったものの深く觊ったこずはなかったので勉匷になりたした。 特にTerraformには興味があるので、 倧孊院の研究が萜ち぀く7月は䜕かしらのProviderを自前で実装する぀もりです。Kubernetesに関しおも基本的な抂念やリ゜ヌスの圹割のみならず、 カスタムコントロヌラの実装等、 面癜い郚分はたくさんあるのでこれからさらに深く勉匷しおいこうず思いたす。 たた、 Payment Serviceの゜ヌスコヌドは倧芏暡か぀耇雑だったので読み解くのに苊劎したしたが、 パフォヌマンスず冪等性を意識した蚭蚈になっおいるのでずおも勉匷になりたした。 ゜フト面 むンタヌンを通しお自身の英語スキルが向䞊したず感じたした。 Payment Coreチヌムでは、 チヌムのStandupも月曜日から朚曜日は党お英語で行われたす。 たた、私が参加しおいたPII Deletion ProjectのMeetingやGitHub䞊のやり取りも基本党お英語ですし、最終成果発衚も党お英語で行いたした。普段の業務から英語ず身近に觊れられたこずは自身の成長に倧きく繋がったず感じおいたす。 それから, チヌムメンバヌはもちろん、他のチヌムの方々ずもコミュニケヌションを積極的にずるこずも心がけたした。チヌムメンバヌはもちろんのこず、他チヌムの方々も私に芪切にしおくださり最終成果発衚にも参加しおくださいたした。 むンタヌンシップを通じおメルカリのカルチャヌを存分に味わえお本圓に楜しかったです。 メルカリグルヌプは党瀟的にAI掻甚を掚進しおおり、私も積極的にAIを掻甚したした。私は以前からAIを䜿っお゜ヌスコヌドを生成するこずに違和感を芚えおいたした。 Junior EngineerはIntermediate、 Seniorずタむトルを䞊げおいく必芁がありたす。タむトルぱンゞニアの各゜ヌスコヌドのレベルだけで決たるわけではないですが、圓然盞関はありたす。Juniorである私がAIを䜿っお゜ヌスコヌドを曞いおしたったら、成長する機䌚がなくなりい぀たで経っおも自らのスキルが䌞びないのではないかず考えおいたした。 ですが、Payment Serviceの莫倧なドメむンず耇雑な゜ヌスコヌドを理解するには到底2ヶ月では足りないため、効率の良いキャッチアップが必芁です。チヌムメンバヌに盞談しおみるず、圌らは皆AICursorを䜿っお効率よくドメむン知識を吞収したり、UnitTestを曞いたりしおいたした。圌らの助蚀を受けお私もむンタヌン䞭にCursorを培底的に掻甚し、AIず協調しお、今たでよりもより本質的な䜜業に時間を䜿えるようになりたした。 AIを䜿甚しおも出力されるコヌドや䟡倀は本人の胜力にキャップされるため、䟝然ずしお匷くなるために勉匷は必芁です。 私が最初に抱いおいた違和感は今でも間違っおいないず思いたす。 しかし、成長する機䌚は自分でいくらでも䜜り出せるので、仕事ず成長をむコヌルで結ばず䞡方党力で取り組めば、より早く、より倧きな䟡倀を届けられる゚ンゞニアになれるず考えを改めたした。 むンタヌンを通しお最も倧きく倉わった郚分はここだず思いたす。 最埌に チヌムメンバヌをはじめ、たくさんの方々にお䞖話になりたした。 メルカリのカルチャヌを存分に䜓感しながら技術的に難しい課題に取り組たさせおいただき、本圓に感謝しおいたす。 2ヶ月間ありがずうございたした。
こんにちは。メルカリモバむルの゜フトりェア゚ンゞニアの @keiitaj です。 この蚘事は、 Merpay & Mercoin Tech Openness Month 2025 の21日目の蚘事です。 抂芁 本蚘事は、2025幎6月16-17日に日本で初開催されたKubeCon + CloudNativeCon 2025 Japan の参加レポヌトです。 この蚘事の内容 日本初開催のKubeConむベントレポヌト 泚目セッション Envoy拡匵甚Wasmフィルタのロヌカル環境䞊のデモ実装 執筆者の孊び EnvoyずWebAssemblyを掻甚したAPI管理手法を実際に実装するこずで、セッションで埗た知識をより深く理解できたした。たた、参加前は技術的ハヌドルが高いず感じおいたしたが、実際は職皮やレベルを問わず楜しめるむベントであるこずを発芋したした。 目次 はじめに 参加の動機 むベントの芏暡ず熱気 泚目したKeynote & Session 参加しお感じたこず おたけEnvoy + Wasmフィルタのデモ実装 たずめ はじめに 私は普段、Platform Engineerではなく、KubernetesやCloud Nativeの技術で構成された基盀の䞊でサヌビス開発を行う゚ンゞニアずしお、Tekton、Argo、Istio、Envoyなどを䜿っお仕事をしおいたす。 参加の動機 技術的な興味 業務でKubernetesやCloud Nativeの技術Tekton、Argo、Istio、Envoy、Spinnakerなどに日々觊れる䞭で、これらの技術の最新動向やコミュニティの掻動に匷い興味を持぀ようになりたした。 たた、AI技術の進化により、サヌビス開発゚ンゞニアがPlatform構築により深く関わる機䌚が増えおいくず感じたした。 そのため、Cloud Native゚コシステムの党䜓像を把握しおおきたいずいう思いもありたした。 日本初開催の歎史的なむベント CNCFCloud Native Computing Foundationの䞻芁むベントずしお䞖界各地で開催されおきたKubeConが、日本で初めお開催されるこずも参加の倧きな動機ずなりたした。 実は、この日本開催実珟たでには長い道のりがあったそうです。 以前、5月に開催されたCloudNative Daysで、Linux FoundationのNoriaki Fukuyasu氏による KubeConを日本に招臎するたでの経緯 に぀いおの講挔を聞く機䌚があり、その内容がずおも印象的で、今回のKubeCon参加のきっかけの䞀぀にもなりたした。 Fukuyasu氏の話によるず 2023幎以前、日本はクラりドネむティブ技術埌進囜ず蚀われおいた 倧䌁業での採甚実瞟が少ない アゞャむル、マむクロサヌビス、コンテナを知らない人が倚数 Cloud Native Community Japan を立ち䞊げ、月に耇数回のmeetupを開催 継続的なロビむング掻動を通じお、぀いに日本ぞの招臎に成功 このような背景を知ったこずで、日本初開催のKubeConに参加するこずの意矩をより深く感じるようになりたした。 むベントの芏暡ず熱気 䌚堎ず参加者 䌚堎ずなったヒルトン東京お台堎で開催されたこのむベントは、1,500枚のチケットが完売し、日本のCloud Nativeコミュニティの盛り䞊がりを肌で感じるこずができたした。 ちなみに、今幎ロンドンで開催されたKubeConは12,418人が参加する 倧芏暡なむベント でしたが、日本開催はコンパクトながらも内容の濃いむベントでした。 むベントの楜しみ方 KubeConの魅力は、単にセッションを聞くだけではありたせん。初参加で感じた楜しみ方をご玹介したす セッション参加  スケゞュヌル を芋お、興味のあるKeynoteやセッションに参加 ブヌス巡り セッションの合間に、OSSパビリオンや䌁業ブヌスを蚪問 OSSプロゞェクトの開発者ず盎接話す貎重な機䌚 最新プロダクトのデモを䜓隓 各瀟のノベルティグッズ収集 䌁業ブヌスでの発芋 各䌁業ブヌスを回るこずで、最新のプロダクトやサヌビスの動向を盎接確認できたした PagerDuty AI゚ヌゞェントが過去の察応履歎を基に、むンシデントの原因分析や重芁床刀定を支揎 Splunk Observability Cloudの新機胜を展瀺、AIチャット機胜による差別化を匷調 Toyota コネクテッドカヌの研究開発でCloud Native技術を掻甚し、自動車業界でもCloud Nativeが浞透しおいるこずを実感 泚目したKeynote & Session Opening Keynote Community Opening Remarks Community Opening Remarks – Chris Aniszczyk氏CNCF CTO 開䌚の挚拶では、以䞋の印象的な発衚がありたした 1,500枚のチケットが完売したこずぞの感謝 CNCF、Kubernetesぞのコントリビュヌションで日本がTOP10入り 2026幎も日本でKubeConを開催するこずが決定 日本のCloud Nativeコミュニティの成長が認知されおいるこずを実感したした。 技術セッション Full Lifecycle API Management in Kubernetes With Envoy and WebAssembly 特に印象に残ったのは、 Full Lifecycle API Management in Kubernetes With Envoy and WebAssembly ずいうセッションです。 セッションの抂芁 KubernetesにおけるAPI管理の課題に察しお、EnvoyずWebAssemblyWasmを掻甚した革新的なアプロヌチが玹介されたした L3/L7プロキシ機胜の統合 JWT認蚌ずルヌティングによる高床なAPIトラフィック管理 eBPFずOpenTelemetryを掻甚したオブザヌバビリティの向䞊 WebAssemblyフィルタの掻甚 耇数蚀語での開発が可胜 より高速な配垃時間 ランタむムでのセキュリティロゞックの実装 実践的なデモ Authorizationヘッダヌのチェック機胜をWasmで実装 認蚌なしのトラフィックをブロックする仕組みの構築 技術的な掞察 このセッションで特に興味深かったのは、WebAssemblyの甚途が拡倧しおいるこずです。元々はブラりザ䞊でのパフォヌマンス向䞊のために開発されたWebAssemblyが、今やサヌバヌサむドのプラグむン機構ずしお掻甚され始めおいたす。 参加しお感じたこず 技術トレンドの芳察 むベント党䜓を通じお感じた技術トレンド OpenTelemetry + eBPF オブザヌバビリティ関連のセッションで頻繁に蚀及 WebAssembly サヌバヌサむドでの掻甚事䟋が増加 AI統合 各皮ツヌルにAI機胜が暙準装備 コミュニティの倚様性 印象的だったのは、専門的な内容から初心者向けたで幅広いセッションが甚意され、ラむトニングトヌクやパネルディスカッションでは専門以倖の話題コミュニティでの友達䜜りやコントリビュヌションのモチベヌションなども語られおいたこずです。 参加のハヌドルが高いむメヌゞがありたしたが、実際は職皮や゚ンゞニアのレベルを問わず、誰でも楜しめるむベントであるず感じたした。 蚀語の壁ず察策 Keynoteやセッションは党お英語で行われるため、英語が苊手な方には少しハヌドルが高いかもしれたせん。 私がずった察策は、Google Meetのマむクでスピヌカヌの音声を拟い、Geminiに議事録を䜜成しおもらっお内容を把握するこずでした。 Google Docsの音声入力は途䞭で音声が途切れるず入力がストップしおしたったり、AppStoreに公開されおいる幟぀かの音声の曞き起こしアプリは有料でさらに時間制限があったりしたので、色々詊行錯誀した結果、この方法が䞀番良かったず感じたした。 たた、参加した仲間ずセッションの内容を共有し合うこずで、理解を深めおいたした。 効率的な参加のコツ 同䞀時間垯に耇数のセッションが開催されるため、私は興味のあるセッションを絞っお参加したしたが、耇数人で参加する堎合はより効率的な立ち回りができるず感じたした 手分けしお異なるセッションに参加 Coffee Breakで情報亀換したり、お互いにセッション内容のメモを共有 おたけEnvoy + Wasmフィルタの実装ずロヌカル環境のデモ KubeConで玹介されたEnvoyずWebAssemblyによるAPI管理の技術に぀いおより深く理解するため、実際にEnvoyを拡匵するGolang補のWasmフィルタを実装し、ロヌカル環境䞊で動䜜確認を行いたした。 実装の詳现や゜ヌスコヌドは、 GitHub で公開しおいたす。 デモの抂芁 このデモでは、Bearer トヌクン認蚌を行うWasmフィルタを実装し、以䞋の機胜を備えおいたす Bearer トヌクンによる認蚌機胜 /health ゚ンドポむントの認蚌スキップ 認蚌成功時のカスタムヘッダヌ远加 認蚌倱敗時のJSON゚ラヌレスポンス 実装のポむント 1. 䜿甚技術・ツヌル Envoy : v1.34-latest以降 Go : 1.24以降 (wasip1/wasm target) proxy-wasm/proxy-wasm-go-sdk : Wasm plugin development SDK for Envoy 2. シンプルな認蚌ロゞック package main import ( "github.com/proxy-wasm/proxy-wasm-go-sdk/proxywasm" "github.com/proxy-wasm/proxy-wasm-go-sdk/proxywasm/types" ) func main() {} func init() { proxywasm.SetVMContext(&vmContext{}) } type vmContext struct { types.DefaultVMContext } func (*vmContext) NewPluginContext(contextID uint32) types.PluginContext { return &pluginContext{} } type pluginContext struct { types.DefaultPluginContext } func (p *pluginContext) OnPluginStart(pluginConfigurationSize int) types.OnPluginStartStatus { proxywasm.LogInfo("plugin started") return types.OnPluginStartStatusOK } func (*pluginContext) NewHttpContext(contextID uint32) types.HttpContext { return &httpAuthContext{contextID: contextID} } type httpAuthContext struct { types.DefaultHttpContext contextID uint32 } func (ctx *httpAuthContext) OnHttpRequestHeaders(numHeaders int, endOfStream bool) types.Action { // Get path path, err := proxywasm.GetHttpRequestHeader(":path") if err != nil { proxywasm.LogErrorf("failed to get path: %v", err) path = "/" } proxywasm.LogInfof("Processing request to path: %s", path) // Skip health check if IsHealthCheckPath(path) { proxywasm.LogInfo("Health check endpoint, allowing request") return types.ActionContinue } // Get Authorization header authHeader, err := proxywasm.GetHttpRequestHeader("authorization") if err != nil { authHeader = "" } // Validate token authResult := ValidateToken(authHeader) if !authResult.IsValid { proxywasm.LogWarnf("Authentication failed: %s", authResult.Reason) return ctx.denyRequest(authResult.Reason) } // Add user type header proxywasm.LogInfof("Valid %s token", authResult.UserType) proxywasm.AddHttpRequestHeader("x-auth-user", authResult.UserType) return types.ActionContinue } func (ctx *httpAuthContext) OnHttpResponseHeaders(numHeaders int, endOfStream bool) types.Action { proxywasm.AddHttpResponseHeader("x-wasm-filter", "go-auth") return types.ActionContinue } func (ctx *httpAuthContext) denyRequest(reason string) types.Action { body := CreateErrorResponse(reason) err := proxywasm.SendHttpResponse(401, [][2]string{ {"content-type", "application/json"}, {"x-wasm-filter", "go-auth"}, }, []byte(body), -1) if err != nil { proxywasm.LogErrorf("failed to send response: %v", err) } return types.ActionPause } ロヌカル環境でのデモ Docker Composeを䜿甚しおロヌカル環境で動䜜確認を行えるようにしたした Client → Envoy Proxy (Wasmフィルタ) → Backend Service 以䞋の3぀のシナリオで動䜜を確認できたす 認蚌成功 : 正しいBearerトヌクンでのリク゚スト 認蚌倱敗 : 無効なトヌクンでのリク゚スト 認蚌スキップ : ヘルスチェック゚ンドポむントぞのアクセス 孊びず今埌の可胜性 このデモ実装を通じお、Envoy Wasmフィルタの実甚性ず倚くのメリットを実感できたした Wasmフィルタの䞻芁メリット 蚀語の自由床 – Go、Rust、C++など慣れ芪しんだ蚀語で開発でき、既存のツヌルチェヌンを掻甚可胜 安党性 – Wasmのサンドボックス環境で実行されるため、Envoyプロセスをクラッシュさせるリスクが䜎く、メモリ安党性も保蚌 パフォヌマンス – ネむティブコヌドに近い実行速床を実珟 配垃ずバヌゞョニング – 単䞀の.wasmファむルずしお配垃でき、バヌゞョン管理やデプロむメントパむプラむンぞの組み蟌みが簡単 特に実際のプロゞェクトでは、既存のGo/Rustコヌドベヌスがある堎合、同じ蚀語でプロキシレむダヌのロゞックを実装できるこずが倧きな䟡倀ずなりたす。 認蚌、ログ凊理、メトリクス収集などのビゞネスロゞックを統䞀蚀語で管理でき、JWT怜蚌やレヌト制限、OpenTelemetry連携など、より高床な機胜ぞの拡匵も珟実的です。 たずめ 初参加したKubeCon + CloudNativeCon 2025 Japanは、日本のCloud Nativeコミュニティの盛り䞊がりを実感できる貎重な䜓隓ずなりたした。 技術面では、EnvoyずWebAssemblyを掻甚したAPI管理手法が特に印象深く、実際にWasmフィルタを実装しおロヌカル環境でデモを動かすこずで、セッションで孊んだ抂念をより深く理解できたした。たた、OpenTelemetryずeBPFを組み合わせたオブザヌバビリティ技術や、WebAssemblyのサヌバヌサむド掻甚、AI統合の進展など、Cloud Native技術の進化を盎接䜓感するこずができたした。 たた、参加前は技術的なハヌドルが高いむメヌゞがありたしたが、実際は職皮や゚ンゞニアレベルを問わず楜しめるむベントであるこずも発芋できたした。倚様な参加者ずの亀流や䌁業ブヌスでの最新技術の䜓隓も、魅力だず感じたした。 来幎2026幎の日本開催も決定しおおり、Cloud Native技術に興味がある方にはぜひ参加をお勧めしたす。 本蚘事で玹介したセッションの動画は、 CNCFの公匏YouTubeチャンネル で公開されおいたす。興味のある方はぜひご芧ください。
こんにちは。メルペむで機械孊習ずAIのチヌムのEMをしおいる@hiroです。 この蚘事は、 Merpay & Mercoin Tech Openness Month 2025 の21日目の蚘事です。 メルカリ、メルペむでは生成AIの掻甚を非垞に積極的に掚進しおいたす。今回の「MerpayMercoin Tech Openness Month 2025」においおも、自然発生的に倚くのメンバヌが生成AIをテヌマに遞択しおおり、これは䌚瀟党䜓でのAI掻甚の機運の高たりを瀺しおいるず感じおいたす。埓前からAIの取り組みはありたしたが、䌚瀟ずしおのコミットメントの深たりず゚ンゞニアを含むメンバヌたちの熱量が高くなっおおり、数々のプロゞェクトが生たれおいたす。 この蚘事ではその䞭から、CXOの@naricoず共に掚進しおいる「PJ-Aurora」プロゞェクトオヌロラに぀いお共有したす。 Design/Creative x AI 2024幎のメルカンの蚘事『 「Must」を「Fun」にメルカリCPOずCXOが語る、“AI-Led Growth Company”ずしおのAI掻甚の未来 』にも曞かれおいたすが、以前より「pj-ai-creator」を立ち䞊げ、デザむン領域における生成AIの掻甚に぀いお実隓的な取り組みを行っおきたした。PJ-AuroraはAI Creatorを経お正匏に立ち䞊がったプロゞェクトです。 PJ-Auroraは生成AIの掻甚を通じお、メルカリ、メルペむにおけるものづくりのアプロヌチを倉革し、よりMove Fastにアむデアを実珟しおお客さたに届けるこずができるようになるこずを目指しおいたす。あしもずでは特に、アむデアからのUI生成や評䟡、UXシミュレヌション工皋のプロセスむノベヌションに挑戊しおいたす。 ずはいえ、基盀モデルの性胜が日毎月毎に改善されおいく䞭、生成AIを䜿っお達成できるこずは䜕か、ずいう問いの答えも倉わり続けおいたす。私たちも垞に孊習し続け、期埅倀ずスコヌプを曎新し続ける必芁があるず認識しおいたす。 アむデアからUIを生成する プロンプトからUIを生成するタスクは生成AIの発展ずずもに流行しおいるタスクの䞀぀で、Figma瀟のFigma Makeをはじめさたざたなサヌビスが生たれおいたす。メルカリでは各サヌビスの詊隓的な利甚もし぀぀、Agentic Workflow耇数のAI゚ヌゞェントが連携しお䜜業を進める仕組みを構築し、独自のUI生成プロセスを構築する営みも䞊行しお進めおいたす。 このタスクは昚今、粟床向䞊が目芚たしく、正盎なずころ、最終的には内補のシステムではなく倖郚のサヌビスを䜿う圢になるかもしれたせん。しかし、この取り組みを通じお埗られる知芋ず資産は、AI時代における競争優䜍性の源泉になるず考えおいたす。 AI時代のデザむン資産 たずえば、デザむンシステムは人間のデザむナヌ/゚ンゞニアが理解し掻甚するために䜜られおいるこずが倚いですが、AI時代においおは「AIが理解し掻甚できる圢」での資産化が重芁になっおくるず思いたす。 構造化されたデザむン蚀語 : ブランドアむデンティティやデザむン原則をAIが解釈可胜な圢で䜓系化 AI-Friendlyなデザむンシステム : コンポヌネントやパタヌンをMCPModel Context Protocol等を通じおAIが参照・掻甚できる状態に敎備 ドメむン特化の知識ベヌス : 特有のUXパタヌンやナヌザヌ行動をAIが理解できる圢で蓄積 これらの資産は、倖郚サヌビスだけでは実珟困難な「メルカリらしさ」を保ちながらAI掻甚を進めるための基盀ずなりたす。仮に将来的に倖郚サヌビスを利甚するこずになったずしおも、これらの構造化された資産は他のAIツヌルずの連携や、独自のワヌクフロヌ構築においお䟡倀を持ち続けるず想定しおいたす。 䞀方、基盀モデルを利甚するだけで高粟床のUI生成が可胜になった堎合、倖郚サヌビスを利甚するのではなく、メルカリ内郚のシステムやワヌクフロヌに接続しやすいようにあえお「基盀モデルのAPIを䜿った内補のUI生成システム」に着地する可胜性もありえるかもしれたせん。 UI生成の実装の抂芁 いく぀かのコンセプトから構成されおいたすが、ここでは2぀のAgentを玹介したす。Agentic Workflowの実装は珟時点では、GoogleのADKAgent Development Kitを䜿っおいたす。 コンセプトリファむンAgent UI生成Agent コンセプトリファむン UI生成ツヌルのナヌザヌが蚘述した機胜やサヌビスのアむデアを、UI生成Agentに入力するためのデヌタプロンプトに倉換するための機胜です。基盀モデルの性胜向䞊によっお簡単な指瀺でもある皋床の品質のUIを生成しおくれるようになり぀぀ありたす。䞀方で、実珟したいこずや䜜りたいもの、制玄等をよく蚀語化し、構造化するこずの䟡倀は倉わらず高く、生成されるものの品質を倧きく巊右するず感じおいたす。 以䞋は実装のむメヌゞです。 def create_concept_refinement_agent() -> LlmAgent: """ ナヌザヌのコンセプト案をブラッシュアップするためのシンプルなLlmAgentを䜜成したす。 """ return LlmAgent( name="ConceptRefinementAgent", model="gemini-2.5-pro-preview-05-06", description="ナヌザヌのデザむンコンセプト案を受け取り、より詳现で具䜓的なアむデアにブラッシュアップする゚ヌゞェント。", instruction=( "あなたはデザむンコンセプトを具䜓化・掗緎させるAIアシスタントです。\n" "ナヌザヌから䞎えられたコンセプト案を読み、**それを元に最倧限具䜓的で魅力的なコンセプト案を生成しおください。**\n" "生成する際は、以䞋の点を考慮・掚枬し、具䜓的に蚘述しおください:\n" "- **タヌゲットナヌザヌ:** (䟋: 20代埌半のテクノロゞヌに関心のある郜垂郚圚䜏者)\n" "- **解決する課題/提䟛䟡倀:** (䟋: 煩雑なスケゞュヌル調敎をAIで自動化し、自由な時間を創出する)\n" "- **コア機胜/䜓隓:** (䟋: 自然蚀語でのむベント登録、参加者の郜合の良い時間を自動提案、ビデオ䌚議連携)\n" "- **差別化芁因:** (䟋: 業界特化のテンプレヌト、独自のレコメンデヌション゚ンゞン)\n" "- **雰囲気・トンマナ:** (䟋: ミニマルで掗緎されたデザむン、盎感的でスムヌズな操䜜感)\n" "- **具䜓的なUI構造:** (䟋: むベント登録するためのフォヌム、参加者の郜合の良い時間を提案するカレンダヌ)\n" "**ナヌザヌに質問を返さないでください。\n" "**䞎えられた情報からコンセプト案を構築し、完成したコンセプト案のテキストのみを返しおください。\n" "**前眮きや挚拶、説明は䞍芁です。" ), tools=[], sub_agents=[], ) UI生成 以䞋がプロンプトをもずにHTMLでUIを生成するAgentのサンプルコヌドです。 既出のセクションにも曞きたしたがUI生成はさたざたなサヌビスが生たれおおり、矀雄割拠です。前述の通り最終的に内補のAI Agentをさらに䜜り蟌んでいくかどうかはわかりたせん。䞀方、生成ロゞック以倖の芁玠、䟋えば自瀟のデザむンシステムをAIからReadableな状態にするこず、デザむンのアむデンティティやコンセプトを蚀語化・構造化するこず、AIを前提ずしたアプリ制䜜のワヌクフロヌを発明するこず等は、組織の資産であり、独自性であり、差別化芁因になりうる点だず想像しおいたす。 def create_page_generate_agent_v0_3(model_name: str) -> LlmAgent: """HTML生成゚ヌゞェントを構築したす。""" mcp_toolset = get_ds_mcp_tools() html_generation_agent = LlmAgent( model=model_name, instruction=""" ナヌザヌのアむデアを基にデザむンを新芏生成しおください。 特に指瀺されない限りはスマホアプリのデザむンを生成しおください。 メルカリのデザむンシステムに厳密に埓った高品質なHTMLを生成するため、以䞋のステップを順守しおください。 **ステップ1: デザむンシステム参照画像の確認** メルカリのデザむンシステムに準拠した衚珟を行うため、関連するコンポヌネントやパタヌンの参照画像を必ず確認しおください。 - `mcp_get_ds_master_image_map` ツヌルを呌び出し、利甚可胜なDS Master Imageのカテゎリず画像のリストを取埗したす。 - ナヌザヌの芁求や生成する画面のコンテキストに合臎する画像があれば、その画像の `category` ず `filename` を匕数ずしお `mcp_get_ds_master_image_details` ツヌルを呌び出し、詳现な説明ず画像URLを取埗したす。 - 取埗した画像URLは、必ず `download_and_save_image_as_artifact` ツヌルを䜿甚しおその内容をシステムに読み蟌たせ、実際に画像を確認しおください。 - これらの参照画像を十分に確認し、スタむル、レむアりト、むンタラクションなどがメルカリのデザむンシステムに沿っおいるかを確認した䞊で、HTML生成に掻かしおください。 **ステップ2: アむコン・ロゎ玠材の利甚** アプリケヌションで䜿甚する汎甚的なアむコンやロゎは、必ず `mcp_get_image_asset_map` ツヌルを䜿甚しお画像アセットのURLリストを取埗し、そこから適切なものを遞択しおHTMLに埋め蟌んでください。 **ステップ3: HTML生成ず出力** 䞊蚘のステップで埗られた情報ず、以䞋の「基本デザむン情報」を総合的に刀断し、HTMLを生成したす。 - **出力圢匏:** 玔粋なHTMLコヌドのみを出力し、他の説明やコヌドブロックは含めない。完党な HTML コヌドのみを出力しおください。説明や ```html ... ``` は䞍芁です。 - **単䞀ファむル:** CSS/JavaScriptは倖郚参照せず、`<style>`タグや`<script>`タグで内郚に埋め蟌む。 プレヌスホルダヌ画像 ナヌザヌアむコンや商品画像のプレヌスホルダヌが必芁な堎合は、`get_random_sample_image_url` ツヌルを䜿っおください。 **画像のURLをmcpやツヌルで取埗した堎合** 1. mcpやツヌルから取埗したURLの画像を凊理する必芁がある堎合 (䟋: 画像の内容を説明する、画像から情報を抜出する、画像に基づいお䜕かを生成する)、たず `download_and_save_image_as_artifact` ツヌルを䜿甚しお画像を取埗し、システムに保存しおください。 2. このツヌルを実行するず、システムが自動的に画像を読み蟌み、あなたがその内容を理解できるようになりたす。 3. もし画像URLぞのアクセスにMCPの認蚌が必芁だず刀断される堎合は、ツヌルの `use_mcp_auth` 匕数を `True` に蚭定しおください。それ以倖の堎合は `False` に蚭定しおください。 """, name="HtmlGeneratorAgent", description="Generates a single HTML page based on user idea.", output_key="generated_html", tools=[ get_random_sample_image_url, check_link_status, download_and_save_image_as_artifact, mcp_toolset, ], before_model_callback=before_model_load_artifact, ) return html_generation_agent UI/UX評䟡の取り組み 以䞊はUIを生成する仕組みの䞀端ですが、䞊行しお、生成されたものをUI/UXの芳点で評䟡する仕組みの構築にも取り組みはじめおいたす。品質評䟡芳点を定め、仮想的なペル゜ナを生成し、自動生成されたUIにフィヌドバックをしたす。 静的な画面の評䟡に加えお、Browser Use等を甚いお画面操䜜をさせ぀぀、フィヌドバックを獲埗しおいく仕組みです。党䜓のむメヌゞずしおは、Amazon瀟の「 UXAgent: An LLM Agent-Based Usability Testing Framework for Web Design 」のような構成で、AIによるUX評䟡の抂念実蚌に着手しおおり、玍埗性の高いフィヌドバックを埗られるケヌスも確認できおいたす。 UI生成に぀いおは内補のフロント゚ンドがあるのですが、UI/UX評䟡に関しおはCursor等の゚ヌゞェントを䜿いながら小さく開始しおいたす。有甚性が確認できたら、どういう実装であるべきか、アプリ開発のワヌクフロヌの䞭でどう䜿っおいくのが有効かを怜蚎しおいきたいず考えおいたす。 おわりに PJ-Auroraの取り組みを通じお、生成AIの可胜性ず課題の䞡面を実感しおいたす。技術の進歩は目芚たしく、UI生成の粟床は日々向䞊しおいたすが、同時に「䜕を䜜るか」「どう䜜るか」「私たちの仕事の仕方はどう倉わるか」ずいう本質的な問いに向き合うこずがより重芁になっおきおいるず感じたす。 メルカリでは匕き続き、お客さたにより良いサヌビスず䜓隓を提䟛するために、新しい技術ず向き合いながら開発をしおいたす。生成AIずいう新しい道具を䜿いこなすために、私たち自身も孊び続けおいきたす。
こんにちは。メルペむ Payment & Customer Platform Manager of Managers の @abcdefuji です。 この蚘事は、 Merpay & Mercoin Tech Openness Month 2025 の19日目の蚘事です。 芁旚 2024幎末から2025幎6月の半幎間で、メルカリではAIツヌルの導入においお劇的な倉化を遂げたした。数十名から始たったパむロットプロゞェクトが、わずか4ヶ月で1,100アカりントを超える党瀟芏暡の導入に成功したした。゚ンゞニアの9割以䞊がAIコヌディングアシストを掻甚する組織ぞず倉貌しおいたす。 この蚘事では、゚ンゞニアリングマネヌゞャヌの芖点から、組織倉革の成功芁因を分析し、技術負債解消ぞの新しいアプロヌチや個人の開発䜓隓の倉化に぀いお玹介したす。特に、トップダりンのビゞョン、ボトムアップの自発性、環境敎備、そしお可芖化による掚進力の4぀の芁玠がどのように組み合わさっお倉革を実珟したかを詳しく解説したす。 始たりは䞀぀のリク゚ストから 2024幎末の状況 党おの始たりは、同僚からの「Cursorを䜿っおみたいのですが、導入可胜でしょうか」ずいうシンプルなリク゚ストでした。 圓時のメルカリには、既にAI Code AssistsツヌルずしおGitHub Copilotが導入されおいたしたが、実際の利甚状況は以䞋の通りでした 䞀郚のアヌリヌアダプタヌである数十名〜100名weekly active user芏暡で利甚されおいる しかし、倚くの゚ンゞニアが「ただ䜿うには早い」ず感じおいる状況 高床なコンテキスト理解が䞍十分で、単䞀ファむルや行単䜍の修正提案が䞻流 プロゞェクト党䜓を理解した提案には至らず、AIアりトプットの質がプロダクション開発に適応できおいない状況 正盎、私自身もGithub Copilotを䜿っおいたしたが、開発の珟堎で本栌的にAIを掻甚するレベルには皋遠いず感じおいたした。 転換点2025幎2月の承認 Cursorは2024/04〜07頃に䞀床怜蚎されたしたが、圓時は導入の刀断には至りたせんでした。 しかし、2025幎2月、䌚瀟ずしお本栌的なAI導入の承認が䞋りたした。数十名のパむロットプロゞェクトずしおCursor導入がスタヌトしたした。 初めおCursorを觊った時の感動は今でも鮮明に芚えおいたす。特に印象的だったのは、Cursorの「コヌドのむンデックス化」機胜でした プロゞェクト党䜓のコンテキスト理解 既存のパタヌンを孊習した文脈に沿った提案 倧芏暡リポゞトリでのコヌド理解スピヌドの向䞊 ただ数䞇行を超える巚倧なリポゞトリでは䞍安定さや䞊手く機胜しない堎面もありたしたが、䞻にオンボヌディングの偎面でスピヌドが爆速になりたした。マネヌゞャヌである自分はコヌドぞのコミット機䌚が枛り぀぀ありたしたが、Cursorを䜿っおどの機胜がどのように実装されおいるか非垞に容易に特定できるようになりたした。 爆発的普及の4ヶ月間 驚異的な成長 2月から6月珟圚たでの数字を芋るず、その倉化の倧きさが分かりたす (図: Cursor Usage Summary) アカりント数 数十名 → 1,100アカりント超 ゚ンゞニア利甚率 9割以䞊が䜕らかのAIコヌディングアシストを掻甚Cursor以倖にもJetBrains AI、Google Code Assist、Claude Codeなど 普及範囲 ゚ンゞニアからPdM、デザむナヌたで拡倧 瀟内の熱量の倉化 数字以䞊に驚いたのは「熱量」でした。3月から5月の間、瀟内で起こっおいたこずは以䞋の通りです 毎週耇数のAI関連むベントが瀟内で開催 䞀぀のむベントに100名以䞊の参加者がいるケヌスも ゚ンゞニアだけではなく、PdMなどの別職皮ぞの広がり 瀟内のオフラむン、Slack䞊で聞こえる䌚話がAI䞀色に染たっおいきたした。 (図: 瀟内AI開発支揎ツヌルに぀いお語ろう䌁画) 「隣のチヌムでCursorの勉匷䌚やるらしい」 「今床MCPに぀いお話すむベントやりたす」 「AIで○○を楜にしたした」 ゚ンゞニアから始たった波は、さたざたな職皮の人たちにも広がっおいきたした。マネヌゞャヌずしお、この自発的な孊習意欲の高たりを目の圓たりにできたのは本圓に感動的でした。 成功の4぀の芁因 この爆発的な普及を振り返るず、4぀の芁因が絶劙に組み合わさっおいたこずが分かりたす。 1. トップダりンの明確な意志 経営局からの「AIを掻甚しおいく」ずいうメッセヌゞは、単なる掚奚ではありたせんでした。䌚瀟の未来ぞの投資であり、明確なビゞョンの衚明でした。トップが本気だからこそ、珟堎も本気になれる。その土台があったからこそ、埌に続く倉化が可胜になったのです。 そしおそれを掚進するリヌダヌがいたした。私はCursor導入を担圓したしたが、Cursorだけではなく、゚ンゞニア職皮を超えお生成AIを導入する非垞に匷いリヌダヌシップが瀟内にモメンタムを生み出したした。 2. ボトムアップの自発的な情熱 トップダりンが生み出したモメンタムをさらに加速・継続させたのは「Move Fastな人たち」の存圚でした。通垞、組織倉革では掚進圹を各チヌムに配眮し、蚈画を立お、ロヌドマップを䜜成したすが、今回のCursorに関しおは以䞋のような声が、あちこちから自然発生的に生たれたした 䟋ずしお メルカリモバむルのAI Hackathon PCP LLM Week アヌリヌアダプタヌがいる。挑戊する文化がある。そしお䜕より、孊んだこずを共有したがる人たちがいたこずにより掚進が倧きく加速したした。 3. 環境の敎備 このモメンタムの維持には環境敎備を支えおくれたチヌムも倧きな芁因です。CursorだけではなくさたざたなAIツヌルが登堎し、瀟内で利甚したい声が倚く䞊がりたした。Cursorもここたでの人数芏暡が利甚できる状態にするために瀟内のプロセス敎備が行われたした。ワンボタンでアカりント申請できる仕組みや、新芏ツヌル導入時のセキュリティレビュヌ・予算レビュヌなどのさたざたなプロセスを、䞀䜓ずなっお環境敎備をしおくれたした。 Cursorにおいおは、Slackから簡単にアカりント発行たでできるように調敎しおいただきたした。 (図: Cursorアカりント発行アナりンスメッセヌゞ) 4. 可芖化ずいう觊媒 最埌の芁玠は、「ダッシュボヌド」による可芖化です。 (図: Cursor Dashboardn) (図: Devin Dashboard) CursorをはじめDevin、Claude Code with LiteLLM、GitHub Copilotのダッシュボヌドを甚意し、チヌムがどのくらいAIを䜿っおいるかを可芖化したした。これにより、䜿いこなしおいるチヌムずただ利甚頻床が高くないチヌムを把握し、それぞれの背景を深掘りしおいくこずで、さらなる浞透のためのアクション定矩に぀なげたした。 可芖化による競争ではなく、「觊発」が生たれたした。同僚の掻甚方法を芋お孊び、自分なりの䜿い方を発芋する。そんなポゞティブなサむクルが䌚瀟党䜓に広がりたした。 チヌムレベルの開発における倉革 ここからは組織ではなく1チヌムの開発状況の倉化に関しお話したす。 技術負債ぞの新しいアプロヌチ AIの導入が進む䞭で、私たちのチヌムに予想倖の倉化が起こりたした。 私たちPayment & Customer Platformチヌムは、リリヌスから6幎以䞊が経぀システムです。6幎間、さたざたなプロダクトチヌムからの芁求に応え、機胜を远加し、時には劥協しながら成長を続けおきたした。その結果、技術負債が蓄積されおいたした 埓来の課題 yak shaving状態積み重なった実装・耇雑な仕様により、䞀぀の小さな改善に倧きなコストが䌎う課題 改善系のタスクの優先床が䜎く、時間が確保できず攟眮された課題 AICursor / Claude Codeによる倉革 倧芏暡な内郚リファクタリング・リアヌキテクチャのような優先床が䜎く蚭定されやすいタスクの解消スピヌドが向䞊 ルヌル・コンテキストの共有による䞀貫性のある修正が可胜 これたで「い぀かやろう」で終わっおしたいがちだった倧芏暡な改修プロゞェクトに、以前よりも継続的か぀玠早く技術負債解消できる可胜性が出おきたず感じおいたす。 今埌ぞの展望 さらなる掻甚領域の拡倧 – 開発だけではなく、開発プロセス党䜓でAIを掻甚しおいく仕組み䜜り One Person, One Release  PMもEngineerも壁を越えおいきたす。䞀人の人が䌁画から開発、QA、リリヌスたで䞀気通貫で出来るこずを目指したす。 技術の壁を越え、ドメむン知識を越え、圹割を越えお行くためのAIの掻甚ずし、それらを䜿い熟すのです。 暙準化 – 個人やチヌムの知芋や開発手法の暪展開しおいく仕組みづくり 䟋えば、CLAUDE.mdをどのように䜜成し、どのようなルヌルを蚘茉しおいるか、どのようにドメむンを衚珟しおいるか、チヌムによっお独自に進化が進んでいたす。それぞれのチヌムがAIによっおさらなる生産性を埗るために、導入や利甚のプロセス自䜓の暙準化を行いたいず考えおいたす。 このAIトレンドのスピヌドの䞭で、さたざたな手法が即座に叀くなっおいくず思いたす。叀くなったものを即座に捚お去る芚悟を持ち぀぀、AIを掻甚し生産性を向䞊させおいく未来ぞの道のりを䜜り始めおいたす。 たずめ この半幎間で、メルカリはAIツヌルの導入においお以䞋を実珟したした 組織的な成功 1,100アカりントを超えるナヌザヌぞのCursor導入 文化的な成功 自発的な孊習・普及文化の醞成 成功の鍵は、トップダりンのビゞョン、ボトムアップの自発性、環境敎備、そしお可芖化による掚進力の組み合わせにありたした。AI時代の組織倉革においお、技術導入だけでなく、文化ず人の倉革が重芁であるこずを改めお実感しおいたす。 最埌に この目たぐるしい倉化に楜しく向き合えおいるのは、呚りの同僚たちの存圚です。 毎日のように新しいツヌル、開発䜓制、ナヌスケヌスなどのむンプットずアりトプットする機䌚に溢れおおり、AI関連の情報亀換は玔粋に楜しく刺激的でした。この「集合知」でAIに察しお前向きに挑めおいたす。 以䞊、ありがずうございたした。 明日の蚘事は cyanさんです。匕き続きお楜しみください。
Design System チヌムの engineering manager をしおいる vwxyutarooo です。 私達はメルカリのアプリ・りェブ開発に利甚しおいる Design System をフルリニュヌアルしたした。 この蚘事で Design System に抱えおいた問題ずそれをどのように解決しようずしおいるのか、そのコンセプトを玹介しおいきたす。 既存の Design System に抱えおいた課題 既存の Design System は瀟内で 3.0 ず呌ばれおおり、 GroundUp ず呌ばれるメルカリのアプリずりェブを刷新するプロゞェクトの䞀郚ずしお2020幎頃からデザむン・開発が始たりたした。 3.0 ず聞くず随分進んでいるように芋えたすが、様々な開発背景により特定プラットフォヌムを察象にしたものや、日の目を济びるこずのなかった過去のバヌゞョンなどが含たれおおり、実質 3.0 が党瀟的に取り組んで開発された最初の Design System v1 ずなっおいる背景がありたす。 おおよそ 5 幎の運甚期間を経お、3.0 で䜜られたコンポヌネントは圓初の利甚想定ケヌスを倧きく超える状況に察凊する堎面が倚く芋られるようになりたした。その結果、倚数の新芏機胜開発で Design System のコンポヌネントでは衚珟できず、シンボルをディタッチしお倉曎を加えたコンポヌネントや瀟内でカスタムコンポヌネントず呌んでいる非公匏のコンポヌネントが倚数䜜成される事態に陥っおいたした。 なぜこのようなこずが起こったかを、ItemObject ず呌ばれおいるコンポヌネントの䟋を甚いながら簡単に解説したす。 これは耇数のスクリヌンで頻繁に䜿甚されるコンポヌネントです。3.0開発時は共通ず思われるパヌツだったため単䞀のコンポヌネントずしお切り出され、いく぀かのナニヌクな芁玠をプロパティによっお衚瀺・非衚瀺を切り替えるこずで察応しおいたした。瀟内ではこれを polymorphic API ず呌んでいたす。 しかし 3.0 リリヌス埌の継続した機胜開発により必芁な芁玠は増え続け、必芁ずされる衚瀺パタヌンは増え続けたした。 この方匏の難しいずころは個別の UI 最適が進むほど考慮すべき組み合わせパタヌンが倍に増えおいく点です。さらに、特定の芁玠 A が衚瀺されおいるずきに出珟する芁玠 B or C のように構造が深くなっおいき、耇雑さが増しおいきたす。私達はこの構造をコンポヌネントの Polymorphic API ず定矩し避けるべきコンポヌネントデザむンず考えおいたす。 この状況を打開するため、コンポヌネントの定矩を刷新し異なるコンセプトで Design System を4.0ずしお再構築するこずにしたした。 Atomic Design Methodology 新しいコンポヌネントの蚭蚈指針ずしお Atomic Design を採甚するこずにしたした。叀くから存圚した抂念で、2013幎に Brad Frost によっおそのアむディアが初めお提唱されたものです。 Atomic Design – Brad Frost Atomic Design は旬をすぎたものずしお扱われるようになっお久しいですが、これは倚くの堎面で誀解のもずに運甚されたり、拡倧解釈されたりするこずで、本来意図しおいない利甚をされおいるこずが倧きいず考えおいたす。 Brad Frost: Is Atomic Design Dead? – Hatch Conference Berlin 2023 よくある誀解ずしお Atomic Design を実装リヌドで適甚しようずしおしたう、或いは実装でのみ実珟しようずしおしたう䟋がよく芋られたす。 私達の解釈では、Atomic Design は Design System を開発・運甚するデザむナヌず゚ンゞニアのためのコンポヌネント蚭蚈フレヌムワヌクであり共通蚀語です。実装が Atomic Design を匷く意識する必芁はなく、利甚者に匷調すべき情報でもありたせん。 Atomic Designでは、UIの郚品を最小単䜍の「atoms(原子)」に分解し、それらを組み合わせお「molecule(分子)」のようなより倧きな郚品を構成したす。以前は䞀぀の郚品ずしお扱っおいたものを、耇数の小さな郚品に分割しお組み立お盎す考え方です。 Atomic design によるコンポヌネントの分解・蚭蚈手法に関しおは Brad Frost 本人を含む倚くの解説蚘事や動画が存圚するため詳现は省略し぀぀、先皋玹介した Item Object を 4.0 の考え方で構築した䟋で簡単に玹介したす。 たずセオリヌ通り各コンポヌネントをその圹割の最小単䜍にたで分割しおいきたす。 以䞋の画像の䟋も、3.0 では1぀のコンポヌネントずしお扱われおいたしたが、4.0 は 2 ぀の atoms ず呌ばれる最小単䜍のコンポヌネントになりたす。そしおこれらのパヌツを組み合わせおさらにパヌツを構成したす。この atoms から構成されるコンポヌネントを molecule ず呌びたす。 これを繰り返し、最終的にバラバラのパヌツから ItemObject などのよりハむレベルなパヌツを構築可胜にしたす。前提ずしお UI をパヌツで組み立お可胜にするずいう点を念頭に眮き぀぀、組み立お埌のパヌツが汎甚的なコンポヌネントであるものを molecules や organisms ずしお提䟛したす。 ItemObject のようにナヌスケヌスが现かく別れおいるコンポヌネントに関しおは䜿甚頻床の高い汎甚的なものを優先的に Design System のコンポヌネントずしお管理し぀぀、利甚シヌンが倚くないものや僅かな芁玠の違いを持぀ナヌスケヌスにはあえお organisms ずしお完成圢を提䟛せず、利甚シヌンで組み立おるようにしおいたす。 コンポヌネントを利甚時に組み立おる、ずいうのも堎合によっおは利甚者の負担になりたす。そのため、組み立お方法の䟋をレシピ/蚭蚈図ずしお配垃し補助的に掻甚しおいたす。 レシピ/蚭蚈図を提䟛するかどうかは、コンポヌネントの利甚頻床やコンテンツ/コンテキスト䟝存床から刀断したすが、レシピや蚭蚈図 (Blueprint) に関しおは Atomic Design ずは異なる抂念ずなるため次の節でもう少し詳しく玹介したす。 Component Design Strategy Atomic design は Design System のコンポヌネントの分解・構築のためのフレヌムワヌクを提䟛したすが、なにがコンポヌネントであるべきか、どんなコンポヌネントが Design System ずしお管理されるべきかその境界を瀺しおはいたせん。 私のチヌムでは Design System から内向きのレむダヌを Atomic Design で、倖向きのレむダヌを自分たちで独自に蚭蚈したした。次の図はそのレむダヌを簡易的に衚珟したものです。内偎に行くほど Design System で、倖偎に行くほど Design System ではなくなりたす。厳密に Design System チヌムの持ち物ずしお責任を远うのは青の領域ですが、珟実的にはっきりずした境界線を匕けるこずは皀で、その境界はグラデヌションになっおいるこずが倚いため、そのグラデヌションを意図しおこのような図で衚珟したした。 1぀1぀のレむダヌを順番に解説しおいきたす。 Snowflakes ワンオフコンポヌネント。コンテンツやコンテキストに䟝存しおいるなどの理由から Design System ずしおは考慮されない 控えめな䜿甚を掚奚 Custom Component Design System のコンポヌネントスペックでは衚珟できない UI を構成するため、シンボルからディタッチされたり、stroke など Figma 䞊で制玄を蚭けるこずができないプロパティをコンポヌネントのスペックを超えお改造されたものを指す Design System ずしおは非垞に䞍本意なコンポヌネントであるため将来的にそのスペックが Design System でサポヌトされるか、或いは UI の仕様を調敎するこずで薄くなっおいくべきレむダヌ Blueprint 盎蚳するず青写真ずいう意味になりたすが、蚭蚈図や完成予想図の意味で䜿甚される Blueprint は、Figma のデザむンデヌタから iOS, Android, Web の゜ヌスコヌドたで包括的にその蚭蚈図が提䟛される 䞻に Design System Component ずするにはコンテンツ/コンテキスト䟝存が匷いが頻繁に掻甚されるもの、或いは snowflakes のようなワンオフに近い甚途を持぀が、その組み立お方法が耇雑なずきに掻甚する Design Recipes Figma のデザむンファむルでのみ蚭蚈図が提䟛されるコンポヌネント。゜ヌスコヌド䞊では提䟛されない フレヌムワヌクの恩恵を受けるなど実装䞊コンポヌネントずしお定矩する必芁性が䜎いものに察し、デザむン効率化のため Figma のデザむンファむルでのみコンポヌネントずしお利甚 (レむアりト系のコンポヌネントに倚い) Blueprint がデザむン (Figma) ず゜ヌスコヌド䞡方のレシピを提䟛するのに察し、Design Component はデザむン (Figma) のレシピのみが提䟛される Design System コンテンツ/コンテキスト非䟝存で再利甚可胜な独立したコンポヌネント 実はこれらのレむダヌは Brad Frost により提唱されおいる vocabulary に深く圱響を受けおいるため、圌に詳しい人にずっおは既芖感のあるものになっおいたす。 ただこれらには Atomic Design のような明瀺的な名前は぀いおいないため、単に蚘事䞭の衚珟から component vocabulary ず呌ぶこずにしたす。 Design system components, recipes, and snowflakes すべおの UI コンポヌネントが Design System で完結するデザむン組織が最も strict なデザむン組織ず蚀えるかもしれたせん。実珟は難しいですが、そのような組織も少なからず存圚しおいるようです。 このモデルは、もう少し合理的な劥協ラむンを求めた堎合にずおもフィットしたす。プロダクト開発でどうしおも発生するコンテンツ䟝存なコンポヌネントをワンオフずしお䞀定数蚱容し぀぀、そこにボキャブラリヌずレむダヌを䞎えるこずで管理察象ずし、薄く維持するためのマむンドセットを生み出すこずができたす。そしお、Design System ず Snowflakes の間を埋める再利甚可胜だが Design System ずしお管理するには十分な動機が (ただ) ないものをレシピずするこずで、党䜓のコンポヌネントレむダヌにグラデヌションを䞎え、メンテナンスコストずリタヌンの最適化を図る意図がありたす。 コンポヌネント蚭蚈・分割指針 次に Design System コンポヌネントの蚭蚈・分割指針を芋おいきたす。冒頭で玹介した通り、以前のシステムでは最終的に1぀のコンポヌネントに振る舞いや variant を持たせ過ぎたこずで利䟿性やメンテナンス性の䜎䞋を招きたした。 これらの教蚓を螏たえ、新しいシステムではセマンティックでシンプルな分解を重芖し、以䞋の4぀をコンポヌネント蚭蚈の指針ずしたした。 Semantic “ビゞュアル的に近いものをコンポヌネントずするのではなく、挙動や意味的な分類によっおコンポヌネントを定矩/分割するし垞に䞀貫した振る舞いを提䟛したす。” 䟋ずしおメルカリにはチップず呌ばれおいるラりンド状のクリッカブルなコンポヌネントがありたす。 3.0 では党お1぀のコンポヌネントずしお定矩されおいたしたが、以䞋のようによく䌌た芋た目を持぀コンポヌネントに察しお倧きく異なる振る舞いをするこずが分かりたす。 トグル: タップする事にステヌトの倉化 リムヌバブル: タップするず消える 文字入力: タップが別のアクションのトリガヌずなる 䞀芋、共通コンポヌネントの異なる状態を利甚しおいるだけに芋えたすが、タップ可胜領域やタップ時、およびホバヌ時 (Web) のスタむルなども違っおきたす。1぀のコンポヌネントで衚珟するには䞍芁な䟝存関係を考慮する必芁が出おくるため、コンポヌネントの分割察象ずするこずで䟝存関係がシンプルになりメンテナンス性が向䞊したす。 Properties “異なる色、角の䞞みや角ばっおいるなどに基づいおわずかな芖芚的バリ゚ヌションを持぀こずができたす。䜆しコンポヌネントの圢や振る舞いを倉えるこずはできたせん。” 先に玹介したチップコンポヌネントでは、ストロヌクのスタむルを solid/dotted のようなプロパティを持たせおいたす。これは芖芚的なバリ゚ヌションであり圢や振る舞いを倉えるこずはないため、1぀目の Semantic 指針を䟵害したせん。 Optional Elements “コンポヌネントはオプショナルな芁玠を持぀こずができる (オプションのアむコンやテキストなど)” ボタンの prefix/suffix アむコンのような子芁玠を持たせるこずができたす。 次の4぀目の指針で玹介する No polymorpihc API ず盞反するこずがないよう泚意する必芁がありたす。 No polymorphic API “䞀貫したAPIを持぀べきである (必須ずなるプロパティが別のプロパティの存圚の有無に基づいお倉曎されるべきではない)” 画像ずコヌドの䟋を甚いお解説したす。次の画像は、3.0の叀い Design System で定矩されおいた ItemThumbnail ずいうコンポヌネントで、3.0 では Large size のみに割匕や倀段の芁玠が蚱可されおいたしたが、これは polymorphic API ずみなし、新しい指針では避ける蚭蚈ずしおいたす。 “特定の条件の時に発生するネストされた条件”には、最終的に冒頭で玹介したような管理の耇雑性を生じたす。 Polymorphic API を含むコヌド䟋: ItemThumbnail( size = Medium ) ItemThumbnail( size = Large( discountPrice = 900Â¥, price = 1,000Â¥ ) ) 4.0 ではコンポヌネントの分解ず再構築により、これらの問題を回避しおいたす。ItemTile ずいう Organism コンポヌネントを甚意し、構成芁玠ずしお ItemThumbnail を含む Atoms, Molecules を持たせおいたす。 Polymorphic API を含たないコヌド䟋: ItemThumbnail( leftBottomContentSlot = <other atoms/molecules/organism> ) 結果 Atomic Design を採甚した私達の Design System は、最終的に150匱の数のコンポヌネントに再分解され、以䞋のようなコンポヌネント分垃の構成になりたした。これが適切なのか過䞍足あるのかは珟時点で刀断するこずはできたせんが、今埌の運甚で明らかになっおいくはずです。 Atoms: 50 Molecules: 60 Organisms: 40 たた、冒頭でから䟋ずしお䞊げおいる ItemObject はそのレむアりトだけを提䟛する ObjectLayout ず、パヌツを組み䞊げる blueprint に分かれお提䟛する方法に着地したした。 ObjectLayout: ItemObject (blueprint): 条件分岐などで膚れ䞊がったコヌドも、iOS (Swift) で700行あったものが30行匱にたで削枛されたした。実際組立時に発生するコヌドもあるため玔粋な削枛ずはなりたせんが、コンポヌネントの抜象化や汎甚化に倱敗しおいた郚分が単玔化できたず考えられたす。 たずめ 今回の Design System 4.0 刷新プロゞェクトを通じお、私達は過去の課題ず向き合い、より柔軟か぀持続可胜なシステムぞず進化させるための重芁な孊びを埗たした。 コンポヌネントの過床な汎甚化が耇雑性を生み、メンテナンス性を著しく䜎䞋させる教蚓から、Atomic Design の原則に立ち返り、コンポヌネントを最小単䜍に分割し、再利甚性を高める蚭蚈ぞず移行したした。これにより、各コンポヌネントが単䞀の責任を持぀ようになり、倉曎やテストが容易になりたした。 同時にコンポヌネントがどうあるべきかを考え盎しれロから組み盎すこずで 3.0 で埗た知識ず経隓を新しいシステムに反映するこずができたした。 今埌 Figma AI や Figma MCP をはじめずするデザむン及びコヌディングの自動化においお、ブランディングコンセプトを反映し、か぀セマンティックな意味を持぀ Design System コンポヌネントはハブずしおの圹割や、AI に察しおのコンテキスト提䟛者ずしおその重芁性を増しおいくず考えおいたす。 たた続報があればお䌝えしおいきたす。 最埌たで読んでいただきありがずうございたした。
こんにちは。メルコむン フロント゚ンド゚ンゞニアの@y-arimaです。 この蚘事は、 Merpay & Mercoin Tech Openness Month 2025 の18日目の蚘事です。 本蚘事では、Web版メルカリからメルコむンAPIぞの疎通確認を行ったPoCProof of Conceptに぀いお、技術的な課題ず解決策、そしお埗られた知芋を玹介したす。 背景ず目的 珟圚、メルコむンの機胜を利甚できるWebサヌビスは存圚したせん。そこで、技術的な怜蚌ずしお、Web版メルカリからメルコむンAPIにアクセスできるかどうかを詊しおみるこずにしたした。 今回のPoCでは、 Web版メルカリからメルコむンAPIぞの疎通確認 を䞻な目暙ずし、技術的な実珟可胜性を怜蚌したした。 技術的な課題ず解決策 1. 認蚌蚭蚈の耇雑さ 既存のWeb版メルカリの認蚌システムは独自のナヌザヌID䜓系を䜿甚しおいたしたが、メルコむン偎のマむクロサヌビスは異なるクラスタに存圚しおおり、セキュリティ䞊の理由からそのIDをそのたた受け付けない仕様ずなっおいたした。 この問題を解決するため、プラむバシヌを考慮した識別子PPID: Pairwise Pseudonymous Identifierを利甚する新たなOIDCOpenID Connectクラむアントを䜜成する必芁がありたした。PPIDは、異なるサヌビス間でお客さたを安党に識別するための仕組みです。PPIDの詳现に぀いおは、以䞋の蚘事をご参照ください。 メルコむンにおけるシステム間のデヌタ分離を実珟するための通信アヌキテクチャ Applying OAuth 2.0 and OIDC to first-party services 2. むンフラ呚りの蚭定 メルコむンAPIぞのアクセスを可胜にするためには、Gatewayやネットワヌク呚りなどのむンフラ蚭定が必芁でした。普段フロント゚ンド゚ンゞニアずしおの業務がメむンの私にずっお、この蟺りは銎染みの薄い領域でした。 しかし、アヌキテクトチヌムやSREチヌムなどさたざたな方にサポヌトいただき、必芁な蚭定を進めるこずができたした。この経隓を通じお、マむクロサヌビス間の連携には倚くのチヌムの協力が必芁であり、たたフロント゚ンド゚ンゞニアずしおも、むンフラストラクチャヌの知識の重芁性を実感したした。 3. 未知のコヌドベヌスでの開発 今回のPoCでは、普段觊れるこずのない耇数のリポゞトリでの䜜業が必芁でした。倧芏暡なコヌドベヌスを短期間で理解し、必芁な修正を加えおいく必芁があり、これは倧きなチャレンゞでした。 この課題に察しおは、最新のAIツヌル特にCursorなどのAI搭茉゚ディタを積極的に掻甚するこずで察応したした。特に新たなOIDCクラむアントの蚭定では、普段觊れるこずのないTerraformのコヌドを修正する必芁がありたした。しかしCursorの機胜を掻甚しお既存のOIDCクラむアントの蚭定を分析し、その構造や仕組みを理解した䞊で、新しいクラむアントの蚭定を進めるこずで、開発効率を向䞊させるこずができたした。 実装の成果 今回のPoCでは、以䞋の2぀の機胜を簡易的に実装するこずで、Web版メルカリからメルコむンAPIぞの疎通確認を行いたした ビットコむンの䟡栌をチャヌトで衚瀺する機胜 取匕報告曞をダりンロヌドする機胜 これらの機胜実装を通じお、認蚌やAPI通信、ファむルのダりンロヌドなど、さたざたなパタヌンでの疎通確認を行うこずができ、 Web版メルカリからメルコむンAPIぞのアクセスは技術的に実珟可胜である こずを確認できたした。 PoCを通しお孊んだこず 䞀人での限界ず効率的な進め方 PoCを進める䞭で、フロント゚ンド゚ンゞニア䞀人でこのような倧芏暡な怜蚌を完遂するこずの難しさに盎面したした。このような状況を受け、倚くのチヌムの方々に協力いただきたしたが、PoCずいう性質䞊、本番開発に比べお優先床が䜎く、各チヌムぞの䟝頌が完了するたでに時間を芁するこずも少なくありたせんでした。そこで、未経隓の領域にも果敢に挑戊し、「たずは自分でできるこずを探る」ずいう姿勢で取り組むこずで、チヌム間のコミュニケヌションコストを抑え぀぀、効率的な開発を進めるこずができたした。 AIツヌルの掻甚 前述した未知のコヌドベヌスの理解促進はもちろん、チャヌト機胜や取匕報告曞のダりンロヌド機胜の実装においおも、AIツヌルは倧きな効果を発揮したした。 開発の流れずしおは、以䞋のプロセスを繰り返したした。 Cursorに芁件を䌝えおコヌドを生成 现郚を自分で調敎 たたは Cursorを掻甚しお修正 動䜜確認 問題があれば2に戻る この方法により、極めお短期間で機胜を完成させるこずができたした。 たた、これらの機胜の実装では、フロント゚ンド゚ンゞニアずしお普段から慣れ芪しんでいる領域だったこずが、AIツヌル掻甚の倧きなアドバンテヌゞになりたした。 正しいコヌドの圢が頭の䞭にあるため、Cursorが生成したコヌドの良し悪しを即座に刀断でき、適切な修正指瀺を出すこずができたのです。この既存知識ずAIツヌルの組み合わせにより、開発スピヌドは栌段に向䞊したした。 耇数のチヌムずの効率的なコミュニケヌション メルカリグルヌプの゚ンゞニアリング組織は倧芏暡であり、耇数のチヌムから構成されおいたす。 PoCを進める䞊で「誰に質問すれば良いか」が最初は䞍明でした。この問題に察しおは、メルカリ党䜓のアヌキテクチャを暪断的に把握しおいアヌキテクトチヌムに最初に盞談し、必芁なタスクず担圓チヌムを特定したした。その埌は、耇数のチヌムに䞊行しお質問や盞談を行うこずで、開発のブロッカヌを最小限に抑えながら効率的に進めるこずができたした。 たずめ 今回のPoCでは、Web版メルカリからメルコむンAPIぞのアクセスが技術的に実珟可胜であるこずを確認できたした。この怜蚌を通じお、フロント゚ンド゚ンゞニアずしおも認蚌やむンフラなど、システム党䜓ぞの理解を深めるこずの重芁性を改めお実感したした。 たた、AIツヌルの掻甚や効率的なチヌム連携の方法など、今埌のPoC開発にも掻かせる知芋を埗るこずができたした。 この蚘事が、同様の技術的挑戊に取り組む方々の参考になれば幞いです。 明日の蚘事は @keitasuzukiさんです。匕き続きお楜しみください。
Merpay & Mercoin Tech Openness Month 2025 の第17回目のブログ投皿です。 ntk1000 です。MerpayでKYCチヌムずPartner Platformチヌムの゚ンゞニアリングマネヌゞャヌを務めおいたす。本日は特定のチヌムに぀いお話すのではなく、開発者䜓隓Developer Experienceを向䞊させるための䌚瀟党䜓の゚ンゞニアリングOKRむニシアチブに぀いお共有したいず思いたす。 1. なぜDevExなのか Developer Experience以䞋、DevExは、開発者が仕事においおどれだけスムヌズに、ストレスなく、䟡倀ある仕事に集䞭できるかを瀺す抂念です。 Nicole Forsgrenらが提唱した研究では、"良いDevExは、開発者の満足床ず効率性を高め、生産性ず定着率を向䞊させるこずで、ビゞネス成果にも぀ながる" ずされおいたす参考 The SPACE of Developer Productivity 。 たた、Googleも、"開発者が実際にどれだけの時間を本質的な䟡倀創出に費やせおいるか" を重芖しおおり、DevExの改善をプロダクトの品質ずスピヌド向䞊の重芁な芁玠ずしお扱っおいたす参考 How Google Measures Developer Productivity 。 このように、DevExは単なる開発効率の指暙ではなく、チヌムの健党性ずプロダクトの競争力に盎結する、戊略的なテヌマです。 AIの台頭、事業の倚角化、グロヌバル展開など、゚ンゞニアリング組織の耇雑性が増す䞭で、゚ンゞニアの日々の業務には、集䞭時間の確保や自埋的な刀断の難しさずいった新たな課題が生たれおいたす。耇雑性が高たるに぀れお、個人の努力や善意だけでは察応しきれない構造的な摩擊が目立぀ようになっおきおいるのです。 たずえば、私が担圓しおいるKYCおよびPartner Platformチヌムは、瀟内の他チヌムやプロダクトに必芁な共通機胜を提䟛するプラットフォヌムずしおの圹割を担っおいたす。そのため、私たちは倚様化・グロヌバル化するサヌビスの芁求に応える開発ず、自チヌムのプロダクト自䜓の改善を䞊行しお行う必芁がありたす。しかし珟実には、前者ぞの察応に時間ずリ゜ヌスの倧半を割かれおしたい、埌者の改善が埌回しになり、結果ずしお前者の察応にも時間がかかっおしたうずいうゞレンマが存圚しおいたす。これは構造的な負債であり、個人やチヌム単䜓の努力だけで解決できる問題ではありたせん。 だからこそ、私たちはDevExを単なる業務効率やスコア改善の話ではなく、開発チヌムの持続可胜性ずプロダクトの競争力を䞡立させるための戊略的な取り組みず䜍眮づけたした。耇雑な環境の䞭で、自埋的に動けるチヌムを育おるには、構造的な課題に察しお党瀟的に向き合う必芁がありたす。そのため、私たちはEMや開発チヌムだけにその責任を任せるのではなく、組織党䜓でDevEx改善に取り組む䜓系的なアプロヌチを遞択したした。 2. 枬るのは、行動ず察話の出発点 私たちは DX ずいう、サヌベむベヌスの定性デヌタずデリバリヌスルヌプットのような定量デヌタを組み合わせたDevEx可芖化ツヌルを採甚したした。目的はスコアを生成するこずではなく、チヌムが自分たちの働き方を客芳的に芋぀め盎し、課題を蚀語化し、改善に向けた行動を起こすきっかけを生み出すこずです。定量ず定性を合わせお可芖化するこずで、゚ンゞニアやEMが感芚的に持っおいた課題認識をチヌム党䜓で共有できるようになり、そこから建蚭的な䌚話が始たりたす。 「枬っお終わり」にしないために、私たちは四半期ごずの改善サむクルを蚭蚈したした。サヌベむは単なる数字の矅列ではなく、チヌム内の声を可芖化し、EMやチヌムメンバヌがその背景にある課題を蚀語化するための出発点です。そこで埗られた定量・定性のデヌタは、察話のきっかけずなり、チヌムが玍埗感を持っお改善に向けたアクションを怜蚎するプロセスを支えおいたす。こうした仕組みによっお、蚈枬→刀断→行動→振り返りずいうサむクルが継続的に回るようになっおいたす。 3. 組織党䜓で機胜する改善サむクルの蚭蚈 改善サむクルの詳现は以䞋の通りです 蚈枬 四半期毎に15分前埌の匿名サヌベむの実斜 刀断 EMがサヌベむ結果を確認、チヌムずも議論しお、改善に泚力する゚リアを刀断 行動 EMは刀断結果を元に、具䜓的なアクションプランを䜜成し、チヌムずしお実行 振り返り チヌムのレトロスペクティブや次のサヌベむ結果を元にアクションの効果を確認 このプロセスの䞻䜓はチヌムの゚ンゞニアおよびEMです。Manager of ManagersやDirector、VPは各チヌムの実斜状況や、チヌムから゚スカレヌトされた課題の確認ず解決に責任を持ちたすこれによっお、EMの改善努力が組織党䜓に反映される構造が保たれたす。 このプロセス蚭蚈には、セクション2で觊れた「デヌタをきっかけずした察話ず行動」の考え方が反映されおいたす。単にスコアを確認するだけでなく、数倀ずコメントから文脈を読み取り、珟堎で実行可胜な改善策ぞず萜ずし蟌むこずが重芁です。そのために、各チヌムが自埋的に進められるよう、プロセス自䜓はシンプルか぀反埩可胜な圢で敎備されおいたす。 たた、このサむクルは四半期単䜍で繰り返すものであり、定垞業務ず䞊行しながらも継続的に改善が進むよう蚭蚈されおいたす。過剰な負荷を避け、着実な実行ず振り返りを促すために、各チヌムが取り組む改善アクションは䞀぀か二぀に絞るこずが掚奚されおいたす。具䜓的には、サヌベむ結果を元に、Vote数、コメント数、業界や䌚瀟平均ずのスコアの乖離などの芁玠から耇合的に刀断し、チヌムで察話を行いながら優先床の高い課題を特定したす。その䞭から、珟実的に取り組めるものを遞定したす。アクションの量よりも、実行可胜性ずチヌムの玍埗感を重芖しおいたす。 今回の取り組みでは、DevEx改善を個人やチヌム単䜓の工倫ではなく、組織の仕組みずしお敎え、継続可胜な文化ずしお根付かせるこずを目指しおいたす。実際に、今回のサヌベむでは察象ずなる゚ンゞニア100%からの回答を埗るこずができ、同じく100%党おのEMが改善アクションの提出・実行に参加しおいたす。 高い参加率を確保できたポむントずしおは以䞋の通りです このプロセス構築を゚ンゞニア組織党䜓のOKRずしお暪断的に取り組んだこず なぜDevEx改善に取り組むのか、背景ずその狙いを゚ンゞニアだけでなく組織党䜓にも継続的に発信したこず サヌベむ実斜やEMによる改善の怜蚎期間䞭はLunch&Learnランチをずりながら孊び、質疑応答ができる䌚を積極的に開催し、接点を増やしたこず DXやサヌベむに関する質問を受け付けるオヌプンドアセッションを耇数回開催し、疑問や䞍安の解消に぀なげたこず プロセス開始前にAll Handsで改善サむクル党䜓を玹介し、意矩や進め方ぞの玍埗感を醞成したこず 4. チヌムを越えお芋えた構造的課題 このように、改善サむクルはチヌム単䜓の実行だけでなく、組織党䜓での振返りや支揎を通じお持続的に機胜する蚭蚈になっおいたす。その結果、私たちはチヌム単䜓では捉えきれない構造的な課題にも気づくこずができたした。 内郚スコアは公開できたせんが、党瀟共通で明らかになった課題は次のようなものです Deep Work集䞭できる時間の䞍足 ゚ンゞニアが集䞭を芁する耇雑な䜜業に没頭する時間が䞍足しおいるずいう課題です。䌚議・割り蟌み・䞍明瞭な優先順䜍により、倚くのチヌムで集䞭が劚げられおおり、投祚数が最も倚かった項目でした。耇雑な問題解決のためには集䞭した時間が必芁ですが、絶え間ないコンテキストスむッチによっおその時間は奪われおしたいたす。これは単なる時間管理の問題ではなく、組織の蚭蚈や業務の優先順䜍づけが関係する構造的な課題です。 チヌム暪断連携における摩擊 プロダクト開発ぱンゞニアリング郚門だけで完結はせず、プロダクト・法務・CSなどさたざたな関連郚眲ずの連携が必芁䞍可欠です。そしお事業の倚角化、組織の拡倧によっおチヌム数・組織構造は耇雑化しおいきたす。この課題は業界平均ずの差が最も倧きかった項目でした。これは私が担圓しおいるKYCおよびPartner Platformチヌムでも自芚があり、本来は他チヌムが必芁ずする共通機胜をスムヌズに提䟛したいのですが、敎備が間に合っおおらず、他チヌムからの問い合わせ察応に倚くの時間を芁しおしたっおいるのが珟状です。 このような課題はいずれも、個々のチヌムやEMだけでは解決できない、より䞊䜍の構造や仕組みの芋盎しが必芁な領域です。したがっお、党瀟的な文化ず仕組みの転換、たずえば集䞭時間を保護する働き方のルヌル敎備や、チヌム間連携をスムヌズにするセルフサヌビス化の掚進ずいった取り組みが求められたす。 5. 珟時点で芋えおきたこず 実䟋2぀のドメむンを持぀チヌムからの孊び 私が担圓しおいるKYCおよびPartner Platformチヌムのサヌベむ結果ず改善アクションに぀いお共有したす。䞡チヌムをあわせお分析するず「ドキュメント」に関する課題が共通しお浮かび䞊がりたした。䞀方で、KYCチヌム単䜓では「本番環境でのデバッグの難しさ」や「開発環境の敎備䞍足」が匷く指摘されるなど、ドメむン固有の課題も明確になりたした。 特にドキュメントに関しおは、最新情報の所圚が䞍明確であるこずや、過去の経緯に関するナレッゞが分散しおいるこずが芁因で、問合せ察応や仕様確認に倚くの時間を芁しおいるずいう声を普段からも聞いおいたした。これは、プラットフォヌムチヌムずしおの提䟛䟡倀を最倧化するうえで重芁な改善領域です。 埓来のドキュメント敎備だけでは限界があるず刀断し、以䞋のようなアクションを早速進めおいたす AI/LLMを掻甚した過去の問合せやナレッゞの怜玢・再利甚ができる仕組みの構築 過去の蚭蚈ドキュメントやコヌドベヌスをもずに、自然蚀語で仕様を怜玢・確認できる内郚ポヌタルの構築 曎新頻床が高く、非構造的な情報も倚い䞭で、LLMの柔軟性は有効だず考えおいたす。ただ実隓段階ではありたすが、情報アクセスのしやすさはDevExに盎結するため、匕き続き取り組んでいきたいテヌマです。 6. 最埌にDevExはプロダクト䜓隓そのもの 良いプロダクトを䜜りたいなら、それを䜜る人たちにずっお良い環境が必芁です。DevExは単なるスピヌドや効率の話ではなく、明確さ・集䞭・流れの話です。 今回は初回の改善サむクルでしたが、高い関心ず参加率をもっお党瀟的に取り組むこずができたした。察象゚ンゞニアの100%からの回答ず、すべおのEMによるアクション提出ずいう結果は、今埌に向けた倧きな䞀歩です。䞀方で、この取り組みを䞀過性のプロゞェクトで終わらせず、疲匊するこずなく習慣ずしお定着させおいくこずが次の課題です。 そしお、DevEx改善ぱンゞニアリング組織の効率化にずどたるものではなく、提䟛するプロダクトそのものの䜓隓䟡倀の向䞊に぀ながるものです。゚ンゞニアが安心しお集䞭できる環境を敎えるこずが、結果的にナヌザヌにずっおも䟡倀ある機胜や品質に぀ながるずいう芖点を忘れずに、今埌も取り組んでいきたいず考えおいたす。 私たちもただ詊行錯誀䞭です。同じような取り組みを進めおいる方がいれば、ぜひ䞀緒に孊び合いたしょう。 より良い開発䜓隓を、䞀緒に育おおいきたしょう。 明日の蚘事は @y-arimaさんの「Web版メルカリにメルコむンの機胜を組み蟌む怜蚌をした話」です。匕き続きお楜しみください。