【jQuery】QRコードを生成する完全ガイド|qrcode.js・リアルタイム生成・PNG保存・カスタマイズまで

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

WebページでQRコードを動的に生成するには、JavaScriptライブラリを使う方法が最も手軽です。この記事では最も広く使われている qrcode.js をメインに、リアルタイム生成・PNG保存・カラーカスタマイズ・エラー訂正レベルの選択まで実務で使えるパターンを体系的に解説します。

この記事でわかること

  • qrcode.jsで静的QRコードを生成する基本
  • テキスト入力からリアルタイムにQRコードを生成する
  • QRコードをPNG画像としてダウンロードする
  • サイズ・カラー・エラー訂正レベルのカスタマイズ
  • 現在のページURLのQRコードを自動生成する
  • jQuery不要で動作するかどうかの違い
スポンサーリンク

使用するライブラリの選択

WebでQRコードを生成する主なライブラリを比較します。

ライブラリ jQuery依存 出力形式 特徴
qrcode.js 不要 Canvas / Table 最も広く使われ軽量。jQueryプロジェクトでも単体で使用可
jquery.qrcode.js 必要 Canvas / Table jQuery向けプラグイン。現在はメンテナンスが少ない
qrious 不要 Canvas Canvasのみ。シンプルなAPIで使いやすい
Google Charts API 不要 画像(PNG) 外部APIのためオフライン不可。URLパラメーターで指定するだけ

この記事では qrcode.js をメインで解説します。jQuery不要で動作し、jQueryプロジェクトにも組み合わせて使えます。

qrcode.jsで基本的なQRコードを生成する

CDNでの読み込み

<!-- qrcode.js をCDNから読み込む -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>

<!-- QRコードを表示するコンテナ -->
<div id="qrcode"></div>
// 基本的なQRコードの生成
var qr = new QRCode(document.getElementById('qrcode'), {
  text:          'https://codingls.com/',  // QRコードに埋め込むテキスト/URL
  width:         200,                      // 幅(px)
  height:        200,                      // 高さ(px)
  colorDark:     '#000000',               // 暗い部分の色
  colorLight:    '#ffffff',               // 明るい部分の色
  correctLevel:  QRCode.CorrectLevel.M    // エラー訂正レベル
});
jQueryと組み合わせる場合
qrcode.jsはjQueryに依存しませんが、jQueryプロジェクトで使うにはdocument.getElementById("qrcode") の代わりに$("#qrcode")[0] でネイティブDOM要素を渡してください。$(fn) の中でインスタンスを生成するとDOMが確実に読み込まれた後に実行されます。

テキスト入力からリアルタイムにQRコードを生成する

フォームに入力された内容を即座にQRコードに反映するパターンです。URLやWi-Fiのパスワードを入力してQRコードを生成するツールで使われます。

<input type="text" id="qr-input" placeholder="URLまたはテキストを入力" style="width:300px;">
<button id="qr-generate-btn">QRコード生成</button>
<div id="qr-output" style="margin-top:16px;"></div>
$(function () {
  var qrInstance = null;

  function generateQR(text) {
    if (!text.trim()) return;

    var $output = $('#qr-output');
    $output.empty();  // 前のQRコードを消去

    qrInstance = new QRCode($output[0], {
      text:         text,
      width:        200,
      height:       200,
      colorDark:    '#000000',
      colorLight:   '#ffffff',
      correctLevel: QRCode.CorrectLevel.H
    });
  }

  // ボタンクリックで生成
  $('#qr-generate-btn').on('click', function () {
    generateQR($('#qr-input').val());
  });

  // Enterキーでも生成
  $('#qr-input').on('keydown', function (e) {
    if (e.key === 'Enter') generateQR($(this).val());
  });
});
再生成前に必ずempty()でコンテナをクリアする
qrcode.jsは既存のQRコードを上書きする clear() メソッドを持っていますが、再生成には $output.empty() でコンテナの内容を削除してから新しいインスタンスを作成するのが確実です。

QRコードをPNG画像としてダウンロードする

qrcode.jsはCanvas要素にQRコードを描画しているため、CanvasのデータURLを使ってPNG画像としてダウンロードできます。

<div id="qr-canvas-output"></div>
<button id="download-btn">PNG画像をダウンロード</button>
$(function () {
  // Canvasモードで生成(PNG保存にはCanvas必須)
  var qr = new QRCode($('#qr-canvas-output')[0], {
    text:         'https://codingls.com/',
    width:        300,
    height:       300,
    correctLevel: QRCode.CorrectLevel.H
  });

  $('#download-btn').on('click', function () {
    // Canvas要素を取得
    var canvas = $('#qr-canvas-output canvas')[0];
    if (!canvas) {
      alert('QRコードが生成されていません');
      return;
    }

    // Canvasの内容をDataURLとして取得してaタグでダウンロード
    var dataURL = canvas.toDataURL('image/png');
    var $a = $('<a>').attr({
      href:     dataURL,
      download: 'qrcode.png'
    });
    $('body').append($a);
    $a[0].click();
    $a.remove();
  });
});
CanvasとTableモードについて
qrcode.jsはデフォルトでCanvas要素を使います(環境によりTableにフォールバック)。Canvas出力の場合のみ toDataURL() でPNG保存が可能です。ブラウザがCanvasをサポートしていない場合はTableとして出力されるため、ダウンロードボタンを使う場合は canvas 要素の存在確認が必要です。

カラー・サイズ・エラー訂正レベルのカスタマイズ

エラー訂正レベルの選択

エラー訂正レベルが高いほどQRコードが欠けても読み取れますが、コードが複雑(密度が高い)になります。

レベル 定数 復元可能な損傷 用途
L(低) QRCode.CorrectLevel.L 約7% データ量を減らしたい場合
M(中) QRCode.CorrectLevel.M 約15% 一般的な用途(デフォルト推奨)
Q(中高) QRCode.CorrectLevel.Q 約25% 屋外掲示・印刷物
H(高) QRCode.CorrectLevel.H 約30% ロゴを重ねたい場合・汚れやすい環境

カラーカスタマイズ例

// ブランドカラーを使ったQRコード
new QRCode($('#qr-brand')[0], {
  text:         'https://codingls.com/',
  width:        200,
  height:       200,
  colorDark:    '#0284c7',  // ブランドカラー(青)
  colorLight:   '#f0f9ff',  // 背景色(薄い青)
  correctLevel: QRCode.CorrectLevel.H
});
カラーQRコードは読み取り確認が必須
コントラストが低い配色にするとスマートフォンで読み取れなくなります。必ず実機でスキャンして読み取れることを確認してください。暗い色(colorDark)と明るい色(colorLight)のコントラスト比は十分に確保してください。

現在のページURLのQRコードを自動生成する

Webサイトに「このページのQRコード」を表示する機能の実装例です。現在のページURLを取得してQRコードにします。

$(function () {
  var currentURL = window.location.href;

  new QRCode($('#page-qr')[0], {
    text:         currentURL,
    width:        200,
    height:       200,
    correctLevel: QRCode.CorrectLevel.M
  });

  // URLをテキストとして表示する
  $('#page-url-text').text(currentURL);
});
URLが長すぎるとQRコードが読み取りにくくなる
QRコードに含む情報が多いほどパターンが複雑になり、小さく表示すると読み取りにくくなります。URLが長い場合は短縮URLサービス(Bitly など)を経由した短いURLをQRコードに使うことを検討してください。URLの操作についてはURLを取得・操作する完全ガイドも参照してください。

Google Charts APIでQRコードを生成する(サーバーサイド不要)

JavaScriptライブラリを使わずに、Google Charts APIのURLに画像リクエストを送るだけでQRコードを表示できます。ただし外部APIへの依存と通信が必要です。

<!-- imgタグのsrcにGoogle Charts APIのURLを設定するだけ -->
<img id="google-qr"
     src="https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=https%3A%2F%2Fcodingls.com%2F&choe=UTF-8"
     alt="QRコード">
// jQueryでURLエンコードしてからimgのsrcに設定する
$(function () {
  var url     = 'https://codingls.com/';
  var apiBase = 'https://chart.googleapis.com/chart';
  var qrUrl   = apiBase + '?chs=200x200&cht=qr&chl=' +
                encodeURIComponent(url) + '&choe=UTF-8';

  $('#google-qr').attr('src', qrUrl);
});
Google Charts APIの利用に関する注意
Google Charts APIは公式に「廃止の予定はない」と述べていますが、サービス継続の保証はありません。また、外部通信が発生するためプライバシーポリシーの観点からも注意が必要です。重要なシステムや個人情報を含むURLには qrcode.js のようなクライアントサイドで完結するライブラリを推奨します。

まとめ

WebページでQRコードを生成する最もおすすめの方法は、CDNから qrcode.js を読み込んで使う方法です。jQuery不要で動作し、Canvas出力によるPNG保存やカラーカスタマイズも対応しています。

  • 基本生成: new QRCode(element, { text, width, height })
  • 再生成: コンテナを empty() してから新しいインスタンスを作成
  • PNG保存: canvas.toDataURL("image/png") でDataURL取得 → aタグでダウンロード
  • エラー訂正: 印刷・屋外には CorrectLevel.H、通常は M

関連記事: URLを取得・操作する完全ガイド / 要素の表示・非表示を切り替える完全ガイド

よくある質問(FAQ)

QQRコードが生成されますが何も表示されません。
Aコンテナ要素(div)にCSSで幅・高さが指定されていない場合や、display:none になっている場合に表示されないことがあります。また、$(function(){...}) の外でDOMが読み込まれる前に実行している可能性があります。DevToolsで要素を確認し、canvas要素またはtable要素が生成されているかチェックしてください。
Q日本語テキストをQRコードに含めたいです。
Aqrcode.jsは日本語(全角文字)のQRコード生成に対応しています。読み取るアプリ側が日本語(Shift-JIS / UTF-8)を正しく解釈できるかは端末依存です。URLに日本語を含める場合は encodeURIComponent(text) でエンコードしてください。
QQRコードにロゴを重ねたいです。
Aqrcode.jsはロゴ重ねの機能を持っていませんが、Canvas APIで描画した後にctx.drawImage(logoImg, x, y, w, h) でロゴ画像を重ね描きできます。ロゴを重ねる場合はエラー訂正レベルを H(約30%の損傷まで復元)に設定してください。
Q生成したQRコードをスマートフォンで読み取れません。
A①QRコードが小さすぎる(最低200×200px推奨)、②カラーのコントラストが低い、③URLや文字列が長すぎる(URLの場合は短縮URLを使用)、④エラー訂正レベルが低い、の4つが主な原因です。まずサイズを300×300pxに増やしてモノクロで試してみてください。
Q印刷物に使うQRコードを生成したいです。
ACanvas出力のQRコードは解像度がピクセル固定です。印刷物に使う場合は少なくとも600×600pxで生成することをおすすめします。より高品質な印刷物には、JavaScriptで生成したQRコードをそのままPNG保存するか、サーバーサイド(PHPのqr codeライブラリなど)でSVGまたは高解像度PNGを生成する方法があります。