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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
whatasoda
October 08, 2024
Programming
400
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
急速に利用拡大を続ける飲食店向けサービスで 店内端末同士のローカル通信を追加設定なしで実現した話
https://asoview.connpass.com/event/331535/
whatasoda
October 08, 2024
More Decks by whatasoda
See All by whatasoda
バランスを見極めよう!実装の意味を明示するための型定義 TSKaigi 2025 Day2 (5/24)
whatasoda
3
1.2k
NestJS で 重たい処理と軽い処理が 干渉しないようにデプロイするには
whatasoda
2
1.1k
ReactNative アプリ同士の通信のために型情報をサクッと共有した話 #TSKaigi サブイベント
whatasoda
1
1.3k
GraphQL でネストしたクエリを書いたら Apollo Client が無限に計算し続けるようになった話
whatasoda
0
750
Other Decks in Programming
See All in Programming
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
640
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
高専キャリア LT 発表内容
crysta1221
6
5.3k
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
500
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
220
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
620
Oxlintはいいぞ(続)
yug1224
1
510
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.4k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
AIの中の人になってみる
htkym
0
150
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
140
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
160
Featured
See All Featured
Bash Introduction
62gerente
615
220k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
590
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Faster Mobile Websites
deanohume
310
32k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
510
Into the Great Unknown - MozCon
thekraken
41
2.7k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
30 Presentation Tips
portentint
PRO
1
380
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Transcript
© 2024 Dinii Inc. Shota Hatada 2024/10/08 急速に利用拡大を続ける飲食店向けサービスで 店内端末同士のローカル通信を追加設定なしで実現した話 「現場」を支えるシステム開発の難所と実践
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 自己紹介 2020 -
2022 SWE (Frontend) at mercari 2022 - SWE (Platform Team) at Dinii Inc. Shota Hatada (@whatasoda) やっていること • Google Cloud を使ったインフラ整備 • NestJS / React Native アプリの基盤実装 • サービス安定性・拡張性向上に向けた活動 すきなもの/こと • TypeScript • スパラクーア • アニメ・ゲーム
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ダイニーについて(1/2)
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ダイニーについて(2/2)
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ダイニーPOS について
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ダイニーPOS はオンラインPOS(1/3) すべての端末がインターネットを通じてサーバーと通信し、連携している。
ダイニーPOS はオンラインPOS
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ダイニーPOS はオンラインPOS(2/3) サーバー・ネットワーク機器に問題が発生したときにはオフライン環境で機器同士が通信・連携する。
オンラインリソースへの依存が強い
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ダイニーPOS はオンラインPOS(3/3) •
互いを検出できたとしても識別ができない • 設置済みの機器に追加設定を行うのはコスト が高すぎる • 新規セットアップ時のコストは上げたくない • これらのコストはビジネスのスピードに 影響を与える可能性がある オフラインでの接続をする前提で 機器をセットアップしていない
追加設定無しでオフライン連携する
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 通信内容・方法について • レジは単体で注文管理と会計処理が可能
• レジはキッチンプリンターに直接印刷する • ハンディからレジに直接注文情報を送信する • 通信はすべて TCP 通信 → IPアドレスが必要 (図の簡略化のためルーターとの通信は省略) レジを中心に通信網を構築 キッチンプリンター ハンディ レジ ルーター
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 解決にむけたアプローチ プリンター →
ゴリ押し総当たり作戦 ハンディ→ mDNS でスマート解決
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 プリンターを追加設定無しで識別する(1/2) • 焼鳥の伝票は焼き場に、
ビールの伝票はドリ場に印刷する必要がある • SDK で IP アドレスと MAC アドレスは手に 入るが、プリンターの場所はわからない • オンラインのときはサーバーがそれぞれの プリンターを識別できるように設定している 狙ったプリンターに印刷する 焼き場 ドリ場 焼鳥 ビール
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 プリンターを追加設定無しで識別する(2/2) • 設定を取得するための情報はオンライン時に
集めておく • 同ネットワークにあるプリンターに総当りで 設定取得を試みる • MAC アドレスをキーとして設定情報を キャッシュしておく(IP アドレスは変わるが MAC アドレスは変わらない!) 総当りで内部の設定を取得する
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ハンディを追加設定無しで識別する(1/2) • ホスト名に対して
IP アドレスを解決し、追加で付与されたペイロードも取得できる • AirPlay などでデバイスを認識するために用いられている技術 • ローカルネットワーク内で自身が提供できるサービスを宣言することができる mDNS(マルチキャストDNS) 出典: フリー百科事典『ウィキペディア(Wikipedia)』
株式会社 ダイニー © 2024 Dinii Inc. • レジは店舗IDを含むレコードを mDNS で
登録しつつ TCP サーバーを立ち上げる • ハンディは mDNS レコードをクエリして レジの IP を特定 • ハンディがレジにコネクションを貼る 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 ハンディを追加設定無しで識別する(2/2) mDNS で TCP サーバーへの経路を スマートに提示
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 未解決の課題 • 機器設置における要件が増えてしまった
• トラブル発生時に Wi-Fi を切り替えたままにしてしまい疎通できなくなることも… • テザリングなどでインターネットに繋がっていればなんとかなるようにしたい • もし達成できたらモバイルオーダーもオフライン対応できるかも? ローカルネットワークを越えた連携ができない • そもそも複数台レジ運用は非推奨だが要望としては存在している • どちらかをメインに据えないと注文情報が分散してしまい正確な請求が困難になる • 現状はどちらに注文が入っているか不透明なため適切なサポートが出来ない可能性も 複数台レジでの課題
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 まとめ • 最初からオフライン接続を想定した仕込みを
するのが難しい場合もある • ビジネスの減速を防ぐためにも追加設定なし を目指したい • 解決方法はいろいろある。 まずは試してみることが大事 オンライン前提のサービスに 後付けでオフライン機能を 追加設定なしで実現できた キッチンプリンター ハンディ レジ ルーター
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 お知らせ https://dinii.connpass.com/event/332124/
株式会社 ダイニー © 2024 Dinii Inc. 急速に利用拡大を続ける飲食店向けサービスで店内端末同士のローカル通信を追加設定なしで実現した話 お知らせ https://dinii.connpass.com/event/332130/