2024年最新!WebブラウザでQRコードを読み取る方法

2024年最新!WebブラウザでQRコードを読み取る方法 プログラミング

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 &amp;&amp; !(err instanceof ZXing.NotFoundException)) {
                    console.error('エラー:', err);
                    resultElement.textContent = 'エラー: ' + err;
                }
            });
        })
        .catch((err) => {
            console.error('エラー:', err);
            alert('カメラへのアクセス中にエラーが発生しました。');
        });
};

startButtonElement.addEventListener('click', startScan);

このJavaScriptコードでは、以下の機能を実装しています。

  1. ZXingライブラリを使用してQRコードリーダーを初期化
  2. リアカメラを優先的に選択
  3. QRコードの読み取り結果を表示
  4. 読み取り時に音声フィードバックを再生
  5. エラーハンドリング

動作確認

すべて同じディレクトリに保存します。

下記ページで実際に動きを確認できます。

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

タイトルとURLをコピーしました