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
atsumo
October 08, 2024
Programming
4
2.3k
メルカリ ハロ アプリの技術スタック
メルカリハロの技術スタックに関する資料
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
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
110
Leading Effective Engineering Teams in the AI Era
addyosmani
7
680
Researchlyの開発で参考にしたデザイン
adsholoko
0
100
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
110
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
3
900
Migration to Signals, Resource API, and NgRx Signal Store
manfredsteyer
PRO
0
130
CSC305 Lecture 09
javiergs
PRO
0
330
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
840
contribution to astral-sh/uv
shunsock
0
570
業務でAIを使いたい話
hnw
0
210
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
210
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
Site-Speed That Sticks
csswizardry
13
940
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How GitHub (no longer) Works
holman
315
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
650
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
900
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
The Language of Interfaces
destraynor
162
25k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
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