QRコード完全ガイド:原理、一括生成、アートQRコード

工具教程

QRコードはもうどこにでもある、でも本当に作れますか?

決済、微信追加、Wi-Fi接続、領収書発行——QRコードは日常生活に完全に浸透している。ところがいざ「自分でQRコードを作らなきゃ」となると、適当なサイトで生成した結果、デザインが悪かったり、スマホを近づけても読み取れなかったり、さらには「入力したデータがサーバーに送られるのでは?」と不安になる人も少なくない。

私たちがツールライブラリのQRコードツールを開発してきた中で最も多く寄せられた質問は「どうやって作るか」ではなく「なぜ作ったコードが読み取れないのか」だった。この記事ではQRコードの仕組みをしっかり解説し、あなたが作るコードが美しく、かつ必ず読み取れるようにする。

とりあえず普通のQRコードをさっと生成したいだけなら、QRコードジェネレーターへ。しかし原理を理解してトラブルを避けたいなら、以下を読んでほしい。


QRコードとは何か:過小評価されたエンジニアリングの傑作

QRコード(Quick Response)は1994年に日本のデンソーウェーブ(トヨタグループ)が自動車部品の追跡用に発明した。最大の特長は高速認識——一次元バーコードと違い、任意の方向・部分的な破損状態でもスマホカメラが瞬時に解析できる。

あの小さな黒白の四角は「モジュール」と呼ばれる。主要な構造は以下の通り:

構造 位置 役割
ファインダパターン(Finder) 3隅の大きな四角 カメラがコードの位置・大きさ・角度を判断
アライメントパターン(Alignment) 右下付近の小さな四角 大サイズコードの歪み・曲面での補正
タイミングパターン(Timing) 縦横各1本 モジュールの座標グリッドを確定
フォーマット情報 ファインダパターンの隣 誤り訂正レベルとマスクを格納
データ領域 中央大部分 実際のエンコード内容
クワイエットゾーン(静区) 周囲の余白 カメラが境界を見つけるのを補助

重要な数字:

  • バージョン1–40:容量を決める。バージョン1は21×21モジュールで、1バージョン上がるごとに縦横4モジュール増加。バージョン40は177×177。バージョンが高いほど多くの情報を格納でき、コードも密になる。
  • エンコードモード:数字モード(0–9)が最も省スペースで、次に英数字モード(A–Z、0–9と一部記号)、バイトモード(中文、絵文字、バイナリはこれ、最もスペースを消費)。
  • 誤り訂正符号:QRコードの最も賢い仕組み。Reed-Solomon符号を使い、コードが汚れたり一部隠れたりしても情報を復元できる。

豆知識:QRコードの基本特許はすでに公開無償化されており、デンソーウェーブが権利行使を放棄したことが、世界的な普及の一因となっている。


Reed-Solomon誤り訂正:なぜ汚れても読み取れるのか

簡単に言えば、Reed-Solomonは元のデータの後ろに「冗長チェックブロック」を追加する。元データが100モジュールだとすると、誤り訂正レベルHではさらに約30モジュールの冗長データが追加される。スマホでコードを読み取るとき、この30モジュールの一部がコーヒーシミで隠れていても、残った情報から数学的に内容を復元できる。

つまり、同じように「一部が隠れている」状態でも、読み取れるコードと読めないコードがある——その差は誤り訂正レベルが十分かどうかにある。


本当に「読み取れるかどうか」を決める4つの要素

多くの人はコードが読めないとスマホのせいにするが、たいていは生成時に埋め込まれた問題が原因だ。

1. 誤り訂正レベル L / M / Q / H

レベル 復元可能面積 モジュール密度 用途
L 約7% 最も疎 印刷がきれいで汚れない環境
M 約15% 適度 ほとんどのシーン(デフォルト推奨)
Q 約25% やや密 屋外や汚れやすい場所に貼る場合
H 約30% 最も密 コード中央にロゴを重ねる、長期屋外設置

経験則:日常使いならMで十分。コード中央にロゴを置くなら最低Q以上。長期屋外やコードにアート処理を施すならHを使用。

2. クワイエットゾーン(静区)

コードの周囲には必ず空白領域が必要で、標準では最低4モジュール分の幅が必要。多くの人がコードをポスターの端ギリギリに配置したり、狭い枠に詰め込んだりして、カメラが境界を見つけられず読み取れなくなる。余白は思っている以上に重要——多めに取ることに越したことはない。

3. コントラスト

前景は濃く、背景は薄く——これが鉄則。薄灰色の背景に白いモジュール、あるいはコントラストの低いブランドカラーを使うと、少しでも反射がある環境でスマホが認識できなくなる。最も安定しているのは黒モジュール+白背景。

4. コンテンツ量

URL数十文字なら問題ないが、vCardの全フィールドを詰め込むとバージョンが一気に上がり、モジュールが密になりすぎて手元のスマホでは読み取れなくなる。内容は短ければ短いほどコードは安定する。可能なら短縮URLを使おう。

5. 印刷サイズとスキャン距離

よく見落とされる関係:最小印刷辺長 ≈ スキャン距離 ÷ 10。例えばユーザーが30cm離れてスキャンするなら、コードは最低3cm四方必要。屋外広告を2m離れてスキャンさせるなら、コードは20cm以上必要。モジュールが小さすぎると、どんなに誤り訂正が強力でも復元できない。


用途別、記述形式の違い

  • URLhttps://example.com をそのまま入れればよい。余計なテキストは不要。短縮URLがあれば短くする。

  • プレーンテキスト:キャッチフレーズや説明文、短く。

  • Wi-Fi:形式は WIFI:S:ネットワーク名;T:WPA;P:パスワード;;。手動で組み立てると特殊文字のエスケープを間違えやすい。Wi-Fi QRコードツールを使えば、ゲストがスキャンするだけで接続でき、パスワードを口頭で伝える必要がない。

  • vCard(電子名刺):履歴書やメール署名に最適。完全な形式例:

    BEGIN:VCARD
    VERSION:3.0
    N:張;三;;;
    FN:張三
    TEL;TYPE=CELL:13800000000
    EMAIL:zhangsan@example.com
    ORG:某公司
    END:VCARD
    

    フィールドを入れすぎるとバージョンが上がり、コードが密になるので注意。

  • メール / SMSmailto:someone@example.com?subject=HiSMSTO:13800000000:内容。スキャン後、対応するアプリが直接開く。

  • 位置情報geo:39.9042,116.4074、マップアプリがその位置を表示する。


一括生成:100個作るとき

一度に何十何百というQRコードが必要になるシーンは珍しくない:

  • イベント入場券、参加者ごとに専用コード
  • 商品トレーサビリティ、ロットごとにコード
  • レストランのテーブル番号、会議の席札、設備資産管理タグ

1つずつブラウザで開いて手入力していたら、3つ目でキーボードを投げたくなる。私たちのツールは複数のコンテンツを一度に生成し、画像を一括エクスポートまたはZIPでダウンロードできる。数分で何百個も処理可能。単一QRコード生成はその場で1つ作るのに便利で、一括生成はリスト(1行1リンク/テキスト)を貼り付けてワンクリックで出力する。

実戦:100個の商品トレーサビリティコード

CSVを用意:各行=商品リンク
  → 一括モードに貼り付け
  → 誤り訂正レベルQ(倉庫環境は汚れやすい)
  → 統一サイズ300×300、ZIPでエクスポート
  → 印刷所でそのまま製版

アートQRコード:見た目を犠牲にせず、読み取りも確保

ブランド素材に無骨な黒い四角を置くと、デザイナーは眉をひそめる。そんなときにアートQRコードツールが役立つ:丸ドットスタイル、グラデーション配色、中央ロゴ、前景色・背景色のカスタマイズが可能だ。

ただし「アート」と「読み取り」の間には一線があり、越えると失敗する:

  • ロゴを3つのファインダパターンに被せない:あの3つの大きな四角はカメラの位置認識用で、1つでも隠れるとほぼ読み取れなくなる。ロゴは中央に配置し、3隅を避ける。
  • コントラストを失わない:グラデーションが美しくても、前景と背景の明暗差は確保する(濃色モジュール+薄色背景)。
  • 誤り訂正レベルを上げる:アート処理自体が認識を妨げるため、訂正レベルをQまたはHにすると安定する。
  • モジュールに淡色を使わない:淡灰色のモジュールは白背景ではほぼ読み取れない。前景は必ず濃色にする。

開発者向け:コードで生成

Pythonの qrcode ライブラリでほとんどのパラメータを制御できる:

import qrcode

qr = qrcode.QRCode(
    version=None,            # 最小バージョンを自動選択
    error_correction=qrcode.constants.ERROR_CORRECT_H,  # 高誤り訂正、ロゴ用の余裕を確保
    box_size=10,
    border=4,               # クワイエットゾーン、最低4
)
qr.add_data("https://example.com")
qr.make(fit=True)

img = qr.make_image(fill_color="black", back_color="white")
img.save("qrcode.png")

JavaScriptでは qrcode ライブラリがブラウザ/Nodeの両方で動作する。ツールライブラリのQRコードジェネレーターも内部で同様のロジックを使用しており、違いは処理がすべてローカルで行われ、データがアップロードされない点だ。


逆も:コード画像から内容を読み取る

生成だけでなく、QRコードのスクリーンショットがあってその中身を知りたいこともある。そんなときはQRコード認識ツールに画像をアップロードすれば、テキストやリンクを解析できる。スマホでスクリーンに向けてスキャンする必要はない。こちらもブラウザのカメラ/画像認識アルゴリズムでローカル処理される。


静的QRコード vs 動的QRコード

ここでよく混同される概念がある:

タイプ 原理 内容変更 統計
静的コード 内容を直接コードにエンコード ❌ 変更不可、再生成が必要
動的コード コード内に短縮URLのみ格納し、実際のURLはサーバー側で設定 ✅ いつでも変更可能 ✅ スキャン数統計可

ツールライブラリのQRコードツールが生成するのは静的コード——サーバー不要、外部サービスに依存しない、永久有効、完全プライベート。もし「内容を変えても古いコードが使える」機能やスキャン統計が必要なら、それはサーバーを伴う別の方式であり、ローカルツールの対象外だ。


プライバシーについて

QRコードの生成は、テキストを画像にエンコードするだけの処理で、サーバー参加は一切不要。ツールライブラリのQRコードツールはすべてブラウザのローカルで計算され、入力したURL・パスワード・名刺情報がアップロードされることはない。特にWi-Fiコードには平文のパスワードが含まれるため、ローカル生成が安心——自宅のWi-Fiパスワードを生成のために知らないサーバーに送信するのは避けたい。


よくあるエラー一覧

エラー 結果 正しい方法
コードを端に寄せて余白なし 読み取れない 周囲に≥4モジュール分の余白を確保
薄色背景に薄色モジュール 認識が遅いまたは失敗 濃色前景+薄色背景
ロゴがファインダパターンを隠す 完全に読み取れない ロゴは中央に、3隅を避ける
長文を詰め込む モジュールが密になり小画面で読み取れない 短縮URLを使い、内容を絞る
誤り訂正レベルが低すぎてオーバーレイ 汚れると即アウト ロゴ重ねや装飾はQ/Hに
印刷サイズが小さすぎる 距離を置くと読み取れない 辺長 ≥ スキャン距離 ÷ 10

よくある質問

誤り訂正レベルは高ければ高いほど良い? いいえ。レベルが高いほどモジュールが密になり、同じ内容でもコードが大きくなる。日常使いはMで十分。ロゴ重ねや屋外設置でのみQ/Hが必要。

アートQRコードは読み取りにくくならない? ファインダパターンを保護し、コントラストを保ち、十分な誤り訂正レベルを確保すれば、スマホで問題なく読み取れる。失敗するのはこの3点をないがしろにした場合だけだ。

QRコードにどれだけ保存できる? 理論上の最大値は約7089桁の数字/4296文字の英数字/2953バイト(バージョン40+L)。だが正直なところ、これだけ詰め込めばまず読み取れない。実用上は数百文字を超えない方がよい。

生成したコードは期限切れになる? ならない。静的QRコードは静的な画像であり、どのサーバーにも依存しない。生成後は永久に有効——印刷した紙がダメにならない限り。

円形や変形でも読み取れる? 丸ドットスタイルなら可能(モジュールの形状を変えてもファインダパターンを維持すればOK)。ただし角を切り落としたりファインダパターンを壊す「異形」はほぼ読み取れない。アート処理は3つの基本線を守ること。


ワンライナー判断フロー

QRコードを作りたい?
├── 普通のリンク/テキスト → /encode/qr
├── ゲストにWi-Fi接続させる → /encode/wifi-qr
├── ブランド感・見た目重視 → /utils/art-qr(誤り訂正はQ以上に、ロゴは3隅を避ける)
├── 100個まとめて → /encode/qr の一括モード
└── 画像から中身を読み取りたい → /encode/qr-decode

次回QRコードを作る際は、まず用途を明確にし、上のフローに沿ってツールを選べば、美しくかつ必ず読み取れるコードを10分で納品できる。関連する画像フォーマット処理(透過PNGでQRコードを書き出してポスターに重ねるなど)については画像圧縮ガイドを参照。

ブラウザローカルツールを無料で試す →

#二维码#QR Code#批量生成#艺术二维码#Wi-Fi二维码#隐私