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.3s;
}
#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コード読み取り機能の活用を考えてみましょう。
そうすることにより、ユーザーエクスペリエンスの向上と新しいサービスの提供が可能になるはずです。


