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
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.2k
GraphQL でネストしたクエリを書いたら Apollo Client が無限に計算し続けるようになった話
whatasoda
0
730
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
600
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
380
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.6k
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
100
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
670
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
Foundation Models frameworkで画像分析
ryodeveloper
1
600
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
460
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
860
Exploring anti-patterns in Rails
aemeredith
3
460
Raft: Consensus for Rubyists
vanstee
141
7.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Done Done
chrislema
186
16k
Optimizing for Happiness
mojombo
378
71k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
570
A better future with KSS
kneath
240
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Typedesign – Prime Four
hannesfritz
42
3.1k
The Cost Of JavaScript in 2023
addyosmani
55
10k
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/