Back

QRコードの生成と埋め込み方法

QRコードの生成と埋め込み方法

Webアプリケーションに QRコードを追加する必要があります。決済フロー、共有可能なリンク、イベントチケットなど、用途はさまざまです。問題は QRコードを使うかどうかではなく、スキャンの問題やセキュリティ上の問題を引き起こすことなく、ブラウザ内で確実に生成する方法です。

本記事では、JavaScript によるクライアントサイドの QRコード生成について説明し、SVG と Canvas 出力をいつ使用すべきかを解説し、スキャンの信頼性に影響する実用的な制約について取り上げます。

重要なポイント

  • 確立されたライブラリを使用して JavaScript で QRコードを生成する—エンコードロジックをゼロから構築しない
  • スケーラブルな Web 埋め込みには SVG を、プログラマティックな画像操作には Canvas を選択する
  • クワイエットゾーンを尊重し、コントラストを維持し、実際のスキャンデバイスでテストする
  • アクセシビリティとセキュリティのために、視覚的なフォールバックを提供する

QRコード生成とスキャンの理解

コードを書く前に、生成スキャンという2つの別々の問題を区別してください。

生成は完全にあなたの制御下で行われます。JavaScript ライブラリを使用してデータを QRコード画像にエンコードします。これはすべての最新ブラウザで確実に動作します。

スキャンは異なります。QRコードを読み取るためのネイティブブラウザ API(Barcode Detection API など)は実験的なままであり、普遍的なサポートが不足しています。アプリケーションでスキャンが必要な場合は、フォールバックを計画してください—通常はカメラベースの JavaScript ライブラリまたは手動入力フィールドです。

本記事は生成に焦点を当てています。実装を計画する際に、この2つを混同しないでください。

JavaScript で QRコードを生成する方法

フロントエンド作業用の QRコード生成を処理する JavaScript ライブラリがいくつかあります。一般的な選択肢には、クライアントサイドとサーバーサイドの両方の生成をサポートする qrcode、軽量な純粋 JavaScript エンコーダーである qrcode-generator、そして古いながらも広く使用されている、シンプルな Canvas または DOM 出力用の QRCode.js があります。これらのどれも「標準」ではありません—それぞれバンドルサイズ、出力形式、カスタマイズオプションにトレードオフがあります。

一般的なパターンは次のようになります:

  1. 選択したライブラリをインポートする
  2. エンコードしたいデータ(URL、テキスト、vCard データ)を渡す
  3. 出力形式と寸法を指定する
  4. DOM 要素にレンダリングするか、データ URL として抽出する

ほとんどのライブラリは、エラー訂正レベル(L、M、Q、H)の設定を受け付けます。レベルが高いほど、コードがスキャン可能な状態を保ちながら損傷を受けられる範囲が広がります—ロゴをオーバーレイしたり、テクスチャのある表面に印刷したりする場合に便利です。

QRコード:SVG vs Canvas

Web に QRコードを埋め込む場合、通常は SVG、Canvas、PNG/データ URL の3つの出力形式から選択します。

SVG 出力

SVG は通常、Web 埋め込みに最適な選択肢です。ベクター形式は無限にスケールしてもピクセル化せず、レスポンシブレイアウトや印刷アプリケーションに理想的です。表示寸法に関係なくファイルサイズは小さいままです。CSS スタイリングも自然に機能します。

SVG を使用する場合:

  • QRコードがさまざまなサイズで表示される
  • 印刷品質が重要
  • CSS ベースのスタイリングやアニメーションが必要

Canvas 出力

Canvas は特定の解像度でビットマップにレンダリングします。これは、ピクセルレベルの制御が必要な場合や、QRコードを他のグラフィックスとプログラマティックに合成する予定がある場合に適しています。

Canvas を使用する場合:

  • ダウンロード用の画像を生成している
  • ピクセルを直接操作する必要がある
  • 他の Canvas ベースのグラフィックスと統合している

PNG/データ URL

データ URL を使用すると、QRコードを base64 エンコードされた画像文字列として埋め込むことができます。これにより追加の HTTP リクエストが不要になりますが、HTML ペイロードサイズが増加します。メールテンプレートや外部リソースが信頼できないコンテキストで便利です。

スキャンの信頼性に影響する実用的な制約

正しく見える QRコードでも、スキャンに失敗する可能性があります。次の問題に注意してください:

クワイエットゾーン: QRコードは境界線の周りに空白スペースが必要です—通常は4モジュール幅です。このマージンをトリミングするとスキャンが機能しなくなります。

コントラスト: 仕様では、明るい背景に暗いモジュールを想定しています。反転色や低コントラストの組み合わせは信頼性を低下させます。少なくとも 4:1 のコントラスト比を目指してください。

サイズ: スキャン可能な最小サイズは、視距離とカメラの品質に依存します。画面表示の場合、最新デバイスでは小さいサイズでも機能する可能性がありますが、結果は視距離とカメラの品質に依存します。印刷の場合は、予想されるスキャン距離に基づいて計算してください。

ロゴのオーバーレイと過度なスタイリング: 中央にロゴを追加することはエラー訂正を利用します—スキャナーはロゴを損傷として扱い、データを再構築します。これは高いエラー訂正レベル(Q または H)でのみ機能し、積極的なスタイリングは回復可能な限界を超える可能性があります。徹底的にテストしてください。

セキュリティと UX の考慮事項

URL をエンコードする QRコードはフィッシングの機会を生み出します。ユーザーはスキャンする前に宛先を検査できません。アプリケーションがユーザー入力から QRコードを生成する場合は、その入力を検証およびサニタイズしてください。コードと並べてエンコードされた URL を視覚的なテキストとして表示することを検討してください。

アクセシビリティのために、常にエンコードされた情報を代替形式で提供してください。QRコードの横に表示されるリンクは、スキャンできない、またはスキャンしないユーザーに役立ちます。

サーバーサイド生成

本記事はクライアントサイドのアプローチに焦点を当てていますが、サーバーサイド生成には正当な用途があります:クライアントバンドルサイズの削減、生成されたコードのキャッシュ、または JavaScript のない環境でのコード生成です。Node.js、Python、Go、およびその他のほとんどのバックエンド言語用のライブラリが存在します。出力形式の考慮事項は同じままです。

結論

QRコード生成の技術的な実装は簡単です。エンコードロジックをゼロから構築するのではなく、確立された JavaScript ライブラリを使用してください。スケーラブルな Web 埋め込みには SVG を、プログラマティックな画像操作には Canvas を選択してください。QRコードの信頼性は制約を尊重することから生まれます:クワイエットゾーンを維持し、適切なコントラストを確保し、実際のスキャンデバイスでテストしてください。アクセシビリティとセキュリティの両方の目的で、常に視覚的なフォールバックを提供してください。

よくある質問

エラー訂正レベルは、QRコードがスキャン可能な状態を保ちながらどれだけの損傷に耐えられるかを決定します。L は約 7% の損傷を回復し、M は 15%、Q は 25%、H は 30% を回復します。ロゴのオーバーレイを追加したり、テクスチャのある表面に印刷したりする場合は、高いレベル(Q または H)を使用してください。スキャナーはこれらの変更を損傷として扱い、欠落データを再構築します。

一般的な原因には、トリミングされたクワイエットゾーン(コードの周りの空白の境界線)、暗いモジュールと明るいモジュール間の不十分なコントラスト、またはスキャン距離に対して小さすぎるサイズが含まれます。境界線の周りに少なくとも4モジュールの空白スペースを確保し、最低 4:1 のコントラスト比を維持し、実際のデバイスで実際の視距離でテストしてください。

クライアントサイド生成はほとんどの Web アプリケーションで適切に機能し、サーバー負荷を軽減します。サーバーサイド生成は、クライアントバンドルサイズを削減したり、生成されたコードを再利用のためにキャッシュしたり、JavaScript のない環境でコードを生成したりする必要がある場合に意味があります。両方のアプローチは同一の出力を生成します—アーキテクチャのニーズに基づいて選択してください。

はい、ただし高いエラー訂正レベル(Q または H)でのみ可能です。スキャナーはロゴを損傷として扱い、エラー訂正を使用してデータを再構築します。ロゴは小さく、中央に配置し、複数のスキャンアプリで徹底的にテストしてください。積極的なスタイリングや大きすぎるロゴは、回復可能な限界を超え、スキャンを完全に壊す可能性があります。

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay