Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ReactNative アプリ同士の通信のために型情報をサクッと共有した話 #TSKaigi...
Search
whatasoda
August 06, 2024
Technology
1.3k
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.2k
急速に利用拡大を続ける飲食店向けサービスで 店内端末同士のローカル通信を追加設定なしで実現した話
whatasoda
0
410
GraphQL でネストしたクエリを書いたら Apollo Client が無限に計算し続けるようになった話
whatasoda
0
770
Other Decks in Technology
See All in Technology
クラウドエージェントの先駆け Devin。今も最先端を走る、他との違い
kinopeee
1
500
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
320
キヨさん67歳 AIコーディングエージェント物語
happysamurai294
0
120
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
420
正解のない研修に放り出されて / Being thrown into a training program with no right answers
ohnoeight
1
160
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
360
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
3
480
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
2
160
Devin プロモコードの受け取りと適用(2026.10.27)
kinopeee
1
660
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
540
Snowflake でできることが増えたら、 ABAC が必要になった
kaeton
0
110
Claude Code をローカルとサーバー上で利用した際の Bedrock 利用料をユーザー単位で一本化してみる
ohorig
0
180
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Google's AI Overviews - The New Search
badams
0
1.6k
30 Presentation Tips
portentint
PRO
1
440
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
880
Building Applications with DynamoDB
mza
96
7.3k
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