Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メルカリ ハロ アプリの技術スタック
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
atsumo
October 08, 2024
Programming
4
2.4k
メルカリ ハロ アプリの技術スタック
メルカリハロの技術スタックに関する資料
atsumo
October 08, 2024
Tweet
Share
More Decks by atsumo
See All by atsumo
Component System
atsumo
0
180
Other Decks in Programming
See All in Programming
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
500
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
170
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
110
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
360
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
15
3k
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.8k
TipKitTips
ktcryomm
0
160
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
330
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.2k
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
540
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
69
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
310
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
140
AI: The stuff that nobody shows you
jnunemaker
PRO
3
370
Test your architecture with Archunit
thirion
1
2.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
190
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
89
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Deep Space Network (abreviated)
tonyrice
0
88
Designing for Performance
lara
611
70k
Transcript
1 メルカリ ハロ アプリの技術スタックの紹介 @atsumo
2 自己紹介 atsumo Mercari Hallo Mobile EM サイバーエージェントにて新卒エンジニアとしてキャリアをス タートし、アメーバピグやスマホゲーム、アプリ開発などでTLや EMを務める。その後、スタートアップでPdM兼TLとしてアプリ開
発に携わる。現在はメルカリでメルカリ ハロのユーザーインター フェース開発に注力している。 @atsumo
3 メルカリ ハロについて
4 4
Confidential ライフスタイルに合わせて多様化する働き方ニーズ デザイン進める
6 技術スタックの紹介
7 https://engineering.mercari.com/blog/entry/20240606-mercari-hallo-app-tech-stacks/
8 • Monorepo • API: GraphQL • 状態管理 • デザインシステム
Summary
9 • Monorepoを採用 ◦ バックエンドやフロントエンド・アプリのコード全 てを一つのリポジトリで管理 ◦ Dart・Go・TypeScriptなど言語ごとにディレ クトリを分けている ◦
CI/CDのなどはスコープを対象のディレクトリ に対して行う • メリット ◦ システム全体の見通しが良い ◦ GraphQLスキーマファイルの共有が楽 ◦ バックエンドなどの修正が追いやすい ◦ 一緒に開発している感が強まる Monorepo
10 • 使用パッケージ ◦ graphql_flutter ◦ graphql_codegen • メリット ◦
スキーマ定義による型の安全性 ◦ キャッシュ機能による状態管理の簡素化 ◦ 宣言的UIとの相性が良い API: GraphQL
11 • アプリケーションステート ◦ サーバーリクエスト・キャッシュ ▪ graphql_flutter(graphql) ◦ グローバルステート ▪
riverpod • ローカルステート ◦ flutter_hooks 状態管理 参考: https://docs.flutter.dev/data-and-backend/state-mgmt/ephemeral-vs-app
12 • graphql_flutter ◦ graphql_flutterはgraphqlを使いや すくするためのAPIやWidgetを提供し ているラッパーのパッケージ • Apollo Clientをモデルとした
GraphQLクライアント ◦ Query / MutationなどのOperation がある ◦ 正規化してキャッシュする サーバーリクエスト・キャッシュ 参考: https://graphql.org/learn/caching/
13 • riverpod • 複数画面で使われるようなデータ ◦ ハロの場合はサーバからのデータは GraphQLのCacheで管理しているの でそれ以外のステートを管理 •
例えば ◦ 認証用トークン グローバルステート
14 • flutter_hooks • スクリーンやコンポーネント内で完結 するデータの管理 ◦ ローディングのステータス ◦ ボタンの有効・無効の切り替え
ローカルステート 参考: https://riverpod.dev/docs/concepts/about_hooks
15 • 独自のデザインシステム ◦ デザイントークン ◦ UIコンポーネント • Figma 上で設定されたプ
ロパティをコード側でも同 じようなプロパティになる ように実装 ◦ 画面実装する際にコードと 紐付きがわかりやすい デザインシステム
16 UIカタログ(Widgetbook) • Widgetbook • デザインシステムとして定 義したUIコンポーネントや Widgetなどをカタログ化 • 特定条件でしか表示され
ないUIの確認などにも重 宝
17 • 複雑な画面でない限りコン ポーネントを並べることで 画面が出来上がる 画面実装
18 • メルカリ ハロでは、Monorepoを採用し、APIにはGraphQLを使用 • 状態管理では graphql_flutter、flutter_hooks、riverpod を採用していま す •
デザインシステムはFigmaのコンポーネントプロパティを活用し、 Widgetbookでカタログ化することで、効率的なUI開発を行うことができました • まだまだシステム改善の余地があり、常にサービスやチーム状況にあった改善 をしていければと思っております まとめ
19 ありがとうございました。 @atsumo