SMS・位置情報QRコードをブラウザだけで作る仕組み(SMSTO/geo URIとqrcode.js)
「QRコードを読み取ったらSMSの作成画面が宛先入りで開く」「読み取ったら地図アプリがその座標を開く」——こうした挙動は特別なアプリを作らなくても、QRに埋め込む文字列(URIスキーム)を正しく組み立てるだけで実現できる。QRコード自体はただの文字列エンコーダで、読み取り側のOS/アプリがその文字列を解釈して動く。
自分が運用しているツールサイト「ハシトシステム」では、この仕組みで動く単機能ツールを増やしている。今日は SMS 用の SMS QRコード生成 と、緯度経度用の 位置情報QRコード生成 を追加した。どちらも入力からQR生成・ダウンロードまで完全にブラウザ内(クライアント)で完結し、入力内容をサーバーに送らない。ここではその中核だけを取り出して解説する。
鍵は「どのURIスキームを埋め込むか」
QRに入れる文字列を、読み取り側が知っている書式にするのがすべてだ。代表的なものは次のとおり。
- SMS:
SMSTO:<番号>:<本文>— 多くの端末で「宛先と本文が入ったSMS作成画面」が開く。実際の送信はユーザー操作が必要で、勝手には送られない。 - 位置情報:
geo:<緯度>,<経度>— 対応する地図アプリがその地点を開く。ピン名を付けたいときはgeo:<緯度>,<経度>?q=<緯度>,<経度>(ラベル)にする。 - 参考: WiFiは
WIFI:T:WPA;S:<SSID>;P:<パス>;;、電話はtel:<番号>、メールはmailto:<宛先>。
番号のサニタイズや座標の範囲チェックさえ入れれば、あとはこの文字列をQR化するだけだ。
実際に試す
前提: モダンブラウザ(Chrome/Firefox/Safari)と、QR生成ライブラリ qrcode(qrcode@1.5.1)をCDNから読むだけ。ビルド不要で、以下のHTMLをローカルに保存して開けば動く。
1 | |
保存して開くと、SMSTO:09012345678:お問い合わせします と geo:35.681236,139.767125?q=35.681236,139.767125(%E6%9D%B1%E4%BA%AC%E9%A7%85) が表示され、SMS用のQRが描画される。スマホのカメラでそのQRを読み取ると、宛先と本文が入ったSMS作成画面が開くはずだ(挙動は端末により差がある)。
SVGで欲しい場合は toCanvas の代わりに次を使う。印刷や大判掲示ではベクターのSVGが劣化しない。
1 | |
ポイントは3つ
- 入力の正規化: 電話番号はハイフンや空白を除去し、座標は範囲を検証する。壊れた文字列をQRにしても読めない。
- 誤り訂正レベルと余白: 汚れ・印刷を想定するなら余白は4モジュール以上、誤り訂正はM〜Qが無難。
- 完全クライアント処理: 生成をブラウザ内で完結させれば、個人情報(番号・座標)をサーバーに送らずに済む。
同じ発想で WiFi・vCard・メール・SMS・位置情報のQRはすべて「URIを組み立ててエンコードするだけ」で作れる。実際に動くツールとして SMS QR・位置情報QR を公開しているので、挙動を確かめたいときに使ってほしい。