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
ReactNative アプリ同士の通信のために型情報をサクッと共有した話 #TSKaigi...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
whatasoda
August 06, 2024
Technology
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ReactNative アプリ同士の通信のために型情報をサクッと共有した話 #TSKaigi サブイベント
https://typescript-jpc.connpass.com/event/325001/
whatasoda
August 06, 2024
More Decks by whatasoda
See All by whatasoda
バランスを見極めよう!実装の意味を明示するための型定義 TSKaigi 2025 Day2 (5/24)
whatasoda
3
1.2k
NestJS で 重たい処理と軽い処理が 干渉しないようにデプロイするには
whatasoda
2
1.1k
急速に利用拡大を続ける飲食店向けサービスで 店内端末同士のローカル通信を追加設定なしで実現した話
whatasoda
0
400
GraphQL でネストしたクエリを書いたら Apollo Client が無限に計算し続けるようになった話
whatasoda
0
720
Other Decks in Technology
See All in Technology
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
データエンジニアリングとドメイン駆動設計
masuda220
PRO
14
2.3k
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
450
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.5k
発表と総括 / Presentations and Summary
ks91
PRO
0
180
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
510
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
250
生成 AI 時代にいま一度「問い合わせ」について考えてみる
kazzpapa3
1
110
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
100
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
380
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
590
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
210
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
410
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Visualization
eitanlees
152
17k
Six Lessons from altMBA
skipperchong
29
4.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The SEO Collaboration Effect
kristinabergwall1
1
510
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
HDC tutorial
michielstock
2
750
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Transcript
ReactNative アプリ同士の通信のために 型情報をサクッと共有した話 1 Shota Hatada / whatasoda 1
株式会社dinii Platform Team / Software Engineer ex. mercari / Frontend
Engineer • Google Cloud でのインフラの整備・メンテ • Backend(NestJS)や Client (React, React Native)の基盤実装 好きなこと・もの • TypeScript • スパラクーア(サウナ・岩盤浴) • アニメ Shota Hatada / whatasoda
アプリ同士で通信する理由 3 3
ダイニーが目指す世界 4 “飲⾷”をもっと 楽しくおもしろく Mission すべての⼈の “飲⾷”インフラになる Vision 全ての中心に ID-POS
がある
障害が起きても動いている必要がある 5
6 普段はインターネット経由で注文をサーバーに送信 (モバイルオーダー・ハンディ・レジ) インターネット経由でキッチンに注文を伝達
普段はインターネット経由で注文をサーバーに送信 (モバイルオーダー・ハンディ・レジ) インターネット経由でキッチンに注文を伝達 7 障害発生時には… 店舗内ネットワークだけでどうにかする必要がある • キッチンプリンター → SDK
で通信できる • ハンディ → 独自で通信方法が必要
HTTP vs TCP 8 8
HTTP vs TCP HTTP ☺ 慣れ親しんだ HTTP くん。雑に JSON を送って
JSON を受け取れる 😭 実用に足るライブラリがなかったので内製が必要 ☺ API の型情報を共有する方法は多い(OpenAPI, GraphQL, etc.) TCP 😭 データのチャンクをどのようにパースするかは自力での実装が必要 ☺ ライブラリがあったのでそのまま使える (Rapsssito/react-native-tcp-socket) 😭 API の型情報の共有も自力でどうにかする必要がある 9
同じ型、違う実装 10 10
無理やり同じインターフェイスにしてしまう 11 • ハンディがレジ内部の関数をそのまま呼び出すような体験にしたい(間の TCP 通信を感じさせない) • レジの実装のインターフェイスをハンディの実装に上から被せてしまう(Type Cast) •
Swatinem/rollup-plugin-dts でバンドルされた型ファイルを生成する
12
13 • 1つの関数として定義をまとめることで、 追加のアクションが実装されても基盤部分への変更が不要になる • DispatcherType を抽出してハンディ側に共有 • ハンディでも TCP
通信を利用してリクエストを送る実装を 似た形で記述して上から型を被せてしまう
14
rollup-plugin-dts vs dts-bundle-generator 15 他の類似ツールはこちらでも紹介されています https://github.com/Swatinem/rollup-plugin-dts#alternatives timocov/dts-bundle-generator • 完全に単体で動作するため簡単にセットアップできてスッキリ •
rollup-plugin-dts とほぼ同じことができるが、他のツールとの組み合わせはコマンドの組み合わせになる • ダイニーでは hono client にサーバー側の型情報を伝えるとき、クライアント側で余計な依存をインストール しないで済むように型だけ抽出していた(PoC 的な開発で使っていました) Swatinem/rollup-plugin-dts • 複数ファイルに定義されたものを1つの .d.ts ファイルに • rollup のインストールや config ファイルの作成が必要 • prettier などの他のプラグインと組み合わせることができ る
https://dinii.connpass.com/event/325689/
https://zenn.dev/dinii/articles/82681cabc82809