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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
740
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
270
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
250
Press start. Python's next generation.
willingc
PRO
3
270
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
210
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.9k
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.2k
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
130
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
41
26k
リアルな遅延を測る仕様
kota_yata
1
130
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
350
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
270
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
A Tale of Four Properties
chriscoyier
163
24k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Automating Front-end Workflow
addyosmani
1369
210k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Code Reviewing Like a Champion
maltzj
528
40k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.6k
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/