お店の機器とシステムをつなぐ仕事をしています。
最近、モバイルオーダーを作る会社さんがどんどん増えています。お客さんがお店の QR を読んで、自分のスマホで注文する仕組みです。アプリを入れてもらうより Web で完結させるほうが手軽なので、Web で作る会社さんが多いんですよね。
ところが、Web で作ると意外なところで壁に当たります。注文が入ったらキッチンでレシートを出したい、レジのプリンターで伝票を刷りたい。そこで「ブラウザからプリンターにつなげない」問題が出てきます。
この記事では、その壁がどこにあるのかと、メーカーが公開している手段を整理します。
内容は、MDN・Chrome for Developers・各メーカーの公開マニュアルの範囲です。対応機種や細かい仕様は、必ず公式のドキュメントで確認してください(2026 年 10 月時点)。
なぜブラウザからは直接つなげないのか
ネイティブアプリなら、プリンターの IP とポートにソケットを張ってバイト列を送れます。ブラウザでは、これがそのままではできません。
1. 普通の Web ページには TCP ソケットが無い
Chrome には Direct Sockets(TCPSocket)という API がありますが、Isolated Web Apps 向けの機能で、厳しい CSP や cross-origin isolation が前提です。一般の Web ページから気軽に使えるものではありません。
2. HTTPS のページから http の機器へは Mixed Content になる
モバイルオーダーは当然 HTTPS で公開します。一方、店内のプリンターは http://192.168.x.x のような宛先になりがちです。HTTPS のページから http へ投げる fetch() は Mixed Content としてブロックされます。
3. 公開サイトから LAN への通信そのものが制限されている
Chrome は Chrome 94 で、公開かつ http のページからプライベートネットワークへの通信を止めました(Private Network Access)。現在は後継の Local Network Access として、公開サイトから LAN へ通信するときにユーザーの許可を求める方式に移っています。
スター精密の WebPRNT のマニュアルにも、https でないサイトからは Chrome 94 以降で印刷できないことが書かれています。
ブラウザの API で直接つなぐ
| API | 何とつなぐか | 対応の目安 |
|---|---|---|
| Web Serial | シリアル(USB シリアル含む) | Chrome / Edge。Android Chrome や Firefox も新しい版で対応が進んでいる |
| WebUSB | USB 機器 | Chrome / Edge / Android Chrome |
| Web Bluetooth | BLE 機器 | Chrome / Edge / Android Chrome(Linux は既定で無効) |
どれも secure context(HTTPS)必須で、ユーザーが機器を選んで許可する形です。
ここで大事なのが Safari / iOS Safari はどれも非対応という点です。お店の端末が iPad なら、この方法は使えません。Android の WebView でも使えないので、アプリに Web を埋め込む作りでも注意が要ります。
メーカーが公開している手段
ここからは、スター精密とエプソンが公開している手段です。大きく 3 つの型に分かれます。
型 1:ブラウザ → LAN のプリンターへ HTTP(S) で送る
スター精密 WebPRNT
ブラウザの JavaScript から、プリンターの /StarWebPRNT/SendMessage へ直接リクエストを送ります。プリンターは状態を返してくれます。
公式の注意として、Web アプリを https で公開するなら、プリンターへも https で送る必要があります。プリンター側とブラウザ側の両方に証明書の設定が要り、自己署名証明書なら端末にインポートします。
エプソン ePOS SDK for JavaScript
ブラウザから、プリンターの中にある ePOS のサービスへ XML を送ります。対応は有線・無線 LAN です(USB / Bluetooth は対象外)。HTTPS では、プリンターの自己署名証明書の扱いがやはり課題になります。
👉 向いている場面:店内の LAN で動く Web POS。HTTPS と証明書の運用を自分たちで持てるなら有力です。
型 2:プリンターがサーバーを見に行く(クラウド起点)
スター精密 CloudPRNT
プリンターがサーバーへ定期的に POST して状態を伝え、ジョブがあれば GET で受け取り、刷り終わったら DELETE で完了を知らせます。MQTT を使う方式もあります。
エプソン Server Direct Print
TM-Intelligent プリンターが Web サーバーへ定期的にリクエストを送り、返ってきた XML を印刷します。
👉 向いている場面:モバイルオーダーと一番相性がいい型です。注文はサーバーに入るので、そこからプリンターに取りに来てもらえば、ブラウザと LAN の壁を通らずに済みます。そのかわり、対応機種が必要で、ポーリングの間隔ぶんの遅れが出ます。
型 3:アプリに渡して印刷してもらう
スター精密 PassPRNT
URL スキーム(Android は Intent)で PassPRNT アプリを呼び出し、HTML や PDF を渡して印刷します。
エプソン TM Print Assistant
Web やアプリから XML / PDF を渡すと、アプリがプリンターのコマンドに変換して、Bluetooth・LAN・USB のプリンターへ送ります(Android では URL スキームで渡すデータは 200KB 以下)。
👉 向いている場面:タブレットやスマホに Bluetooth のプリンターをつなぐお店。端末にアプリを入れてもらう必要はありますが、Web 側はかなり楽になります。
まとめ:どれを選ぶか
| 状況 | まず検討したい型 |
|---|---|
| 注文がサーバーに入る(モバイルオーダー・EC) | 型 2:クラウド起点 |
| 店内 LAN の Web POS で、証明書を運用できる | 型 1:ブラウザ → LAN |
| iPad / スマホ + Bluetooth プリンター | 型 3:アプリに渡す |
| PC の Chrome + USB プリンター | ブラウザの API(WebUSB / Web Serial) |
プリンターや決済端末のような店内の機器とつなぐところは、Web だとネイティブと同じ感覚では進みません。設計の早い段階で「どの型でつなぐか」を決めておくと、あとで慌てずに済みます。
参考(公式)
- MDN:Mixed content / Web Serial API / WebUSB API / Web Bluetooth API
- Chrome for Developers:Direct Sockets / Private Network Access update / Local Network Access
- スター精密:WebPRNT / CloudPRNT / PassPRNT
- エプソン:ePOS SDK for JavaScript 概要 / ePOS-Print ユーザーズマニュアル / TM Print Assistant 概要