QRコードは、スマートフォンアプリで読み取ることが一般的です。
しかし、Webブラウザ上でもQRコードを読み取ることができます。
本記事では、WebブラウザでQRコードを読み取る技術について解説します。
使用する技術は、以下。
- ZXingライブラリ
- HTML
- CSS
- JavaScript
ZXingライブラリについて
ZXingは、バーコードやQRコードの読み取りを行うためのオープンソースのマルチフォーマットライブラリです。
Java、C++、Python、Goなど、さまざまなプログラミング言語で利用できます。
このライブラリは、WebブラウザでQRコードを読み取るために、JavaScriptポートも提供しています。
ZXingライブラリは、以下の特徴を持っています。
- 多様なバーコード及びQRコードフォーマットに対応
- マルチプラットフォーム対応(デスクトップ、モバイル、Webブラウザ)
- 高速で accurate な読み取り性能
- オープンソースで、商用利用も可能
本記事では、ZXingライブラリのJavaScriptポートを使用して、WebブラウザでQRコードを読み取る方法を説明します。
HTMLファイルの作成
まず、HTMLファイルを作成し、必要なライブラリとスタイルシートを読み込みます。
ZXingライブラリは、@latestを指定することで、常に最新のバージョンを読み込むようにします。
<! DOCTYPE html> < html > < head > < meta charset = "UTF-8" > < title >QRコードリーダー</ title > < meta name = "viewport" content = "width=device-width, initial-scale=1" > < script src = "https://unpkg.com/@zxing/library@latest/umd/index.min.js" ></ script > < link rel = "stylesheet" href = "styles.css" > </ head > < body > < h1 >QRコードスキャナー</ h1 > < video id = "video" ></ video > < button id = "startButton" >スキャン開始</ button > < p id = "result" >結果: 未検出</ p > < script src = "script.js" ></ script > </ body > </ html > |
CSSファイルの作成
次に、CSSファイル(styles.css)を作成し、ページのスタイルを定義します。
body { font-family : Arial , sans-serif ; display : flex ; flex-direction : column; align-items : center ; margin : 20px ; } #video { width : 100% ; height : auto ; max-width : 400px ; } #startButton { padding : 15px 30px ; font-size : 20px ; margin-top : 20px ; background-color : #007BFF ; color : white ; border : none ; border-radius : 5px ; cursor : pointer ; transition : background-color 0.3 s; } #startButton:hover { background-color : #0056b3 ; } #result { margin-top : 20px ; font-size : 18px ; color : #333 ; word-break : break- all ; max-width : 100% ; } |
JavaScriptファイルの作成
最後に、JavaScriptファイル(script.js)を作成し、QRコードの読み取り機能を実装します。
const codeReader = new ZXing.BrowserQRCodeReader(); const audio = new Audio( 'beep.mp3' ); const videoElement = document.getElementById( 'video' ); const resultElement = document.getElementById( 'result' ); const startButtonElement = document.getElementById( 'startButton' ); const getBackCamera = (devices) => { return devices.find((device) => device.label.toLowerCase().includes( 'back' )); }; const startScan = () => { codeReader.listVideoInputDevices() .then((videoInputDevices) => { if (videoInputDevices.length === 0) { alert( 'カメラが見つかりませんでした。' ); return ; } const backCamera = getBackCamera(videoInputDevices); const selectedDeviceId = backCamera ? backCamera.deviceId : videoInputDevices[videoInputDevices.length - 1].deviceId; codeReader.decodeFromVideoDevice(selectedDeviceId, videoElement, (result, err) => { if (result) { resultElement.textContent = '結果: ' + result.text; audio.play(); codeReader.reset(); } if (err && !(err instanceof ZXing.NotFoundException)) { console.error( 'エラー:' , err); resultElement.textContent = 'エラー: ' + err; } }); }) . catch ((err) => { console.error( 'エラー:' , err); alert( 'カメラへのアクセス中にエラーが発生しました。' ); }); }; startButtonElement.addEventListener( 'click' , startScan); |
このJavaScriptコードでは、以下の機能を実装しています。
- ZXingライブラリを使用してQRコードリーダーを初期化
- リアカメラを優先的に選択
- QRコードの読み取り結果を表示
- 読み取り時に音声フィードバックを再生
- エラーハンドリング
動作確認
すべて同じディレクトリに保存します。

下記ページで実際に動きを確認できます。
QRコードの作成については、次の記事を参考にしてください。
ただし、WebブラウザでQRコードを読み取るためには、HTTPSを使用する必要があります。
HTTPSは、通信を暗号化することでセキュリティを向上させます。
多くのブラウザは、セキュリティ上の理由から、HTTPSを使用しない場合にカメラへのアクセスを制限しています。
したがって、QRコードリーダーを実装する際は、以下の点に注意してください。
- Webサーバー上でHTTPSを設定する
- SSL/TLS証明書を取得し、Webサーバーに適用する
- QRコードリーダーのページをHTTPSで提供する
まとめ
本記事では、WebブラウザでQRコードを読み取る技術について解説しました。
HTML、CSS、JavaScript、およびZXingライブラリを組み合わせることで、簡単にQRコードリーダーを実装できます。
ZXingライブラリは、多様なバーコードやQRコードフォーマットに対応し、高速で正確な読み取りが可能です。
この技術を応用することで、WebアプリケーションにQRコード読み取り機能を追加することができます。
ただし、以下の点に注意が必要です。
- カメラへのアクセスにはユーザーの許可が必要であり、すべてのブラウザで動作するとは限りません。
- QRコードリーダーを実装する際は、HTTPSを使用する必要があります。
- QRコードの内容を適切に検証し、セキュリティ面での配慮も忘れないようにしましょう。
これらの点に留意しながら、WebブラウザでのQRコード読み取り機能の活用を考えてみましょう。
そうすることにより、ユーザーエクスペリエンスの向上と新しいサービスの提供が可能になるはずです。