QRコードの誤り訂正(L・M・Q・H)を解説:実際にはどのレベルを使うべきか?
QRコード生成ツールを開くと、必ず L・M・Q・H と表示された 4 つの選択肢があります。多くの人はデフォルトのまま先へ進みます——印刷したコードがスキャンできない状態で戻ってくるか、マーケティングチームが中央にロゴを載せてコード全体が読み取れなくなるまでは。誤り訂正レベルは見た目の設定ではありません。コードがどれだけの物理的損傷に耐えられるかを決定し、収容できるデータ量と直接トレードオフの関係にあります。
この記事では、QR 仕様(ISO/IEC 18004)の内部でこれらのレベルが実際に何を行っているのか、実際の数値とともに容量がどう変わるのか、そしてユースケースに合ったレベルの選び方を解説します。
誤り訂正とは実際何なのか
QRコードはデータをエンコードするだけでなく、リーダーがコードの損傷部分や読み取れない部分を復元できるようにする冗長情報もエンコードします。その仕組みは リード・ソロモン誤り訂正 で、CD、DVD、Blu-ray ディスク、深宇宙通信で使われているものと同じ系統のアルゴリズムです。
QRコードが生成されるとき、データペイロードはブロックに分割され、各ブロックについてエンコーダーが誤り訂正コードワードのセットを計算します。その後リーダーが読み取れないモジュール(白黒のマス目)を見つけた場合——傷、コーヒーの染み、悪い照明、重ねられたロゴなどが原因で——その冗長コードワードを使って、失われたコードワードを数学的に再構築します。
リード・ソロモン符号には便利な性質があります:位置が不明な t 個の誤りコードワードを訂正するには、2t 個の冗長コードワードが必要です(損傷したコードワードの位置が分かっている場合——「消失(イレージャー)」と呼ばれます——冗長コードワード 1 個で 1 個を修復できます)。誤り訂正レベルは、コードワード全体の予算のうち、どれだけを冗長性に、どれだけをペイロードに割くかを制御するだけのものです。
4 つのレベル、数字で見る
ISO/IEC 18004 仕様では、次のような概算の復元能力を持つ 4 つの誤り訂正レベルが定義されています——損傷しても完全に復元できるコードワードの割合です:
| レベル | 名称 | 復元能力 |
|---|---|---|
| L | Low | コードワードの約 7% |
| M | Medium | コードワードの約 15% |
| Q | Quartile | コードワードの約 25% |
| H | High | コードワードの約 30% |
単一のパーセンテージが隠している重要なニュアンスが 2 つあります:
- パーセンテージはモジュール面積ではなくコードワードに適用されます。 「レベル H ならコードの 30% が覆われても耐えられる」という一般的な経験則は、実際には損傷が連続していることが多いためおおむね正しいのですが、正式な制限は損傷したコードワードに対するものです。空間的にまとまった損傷(ロゴなど)は、同数の誤りがランダムに散らばっている場合よりも耐えやすいことが多いのです。位置の分かっている消失は、位置不明の誤りより訂正コストが低いからです。
- 高いレベルは容量を犠牲にします。 冗長性が増えるほど、同じバージョン(サイズ)でのペイロードの余地が減ります。データが収まらない場合、エンコーダーはより大きなバージョンに移行しなければならず、モジュールが増え、印刷が密になり、遠距離からスキャンしにくくなります。
容量:実際にレベルが奪うもの
QRコードには バージョン と呼ばれる 40 種類のサイズがあります。バージョン 1 は 21×21 モジュールで、以降バージョンが 1 つ上がるごとに一辺が 4 モジュールずつ増え、バージョン 40 では 177×177 になります。下の表は、代表的な 3 種類のペイロードについて、4 つのレベルそれぞれの最大文字容量を仕様から示したものです(バイトモードは任意の UTF-8 的なバイナリデータや典型的な URL をカバーし、英数字モードは 0–9 A–Z スペース $%*+-./:、数字モードは数字のみをカバーします)。
| バージョン | モジュール | レベル | 数字 | 英数字 | バイト |
|---|---|---|---|---|---|
| 1 | 21×21 | L | 41 | 25 | 17 |
| 1 | 21×21 | M | 34 | 20 | 14 |
| 1 | 21×21 | Q | 27 | 16 | 11 |
| 1 | 21×21 | H | 17 | 10 | 7 |
| 5 | 37×37 | L | 255 | 154 | 106 |
| 5 | 37×37 | M | 202 | 122 | 84 |
| 5 | 37×37 | Q | 144 | 87 | 60 |
| 5 | 37×37 | H | 106 | 64 | 44 |
| 10 | 57×57 | L | 652 | 395 | 271 |
| 10 | 57×57 | M | 513 | 311 | 213 |
| 10 | 57×57 | Q | 364 | 221 | 151 |
| 10 | 57×57 | H | 288 | 174 | 119 |
| 20 | 97×97 | L | 2061 | 1249 | 858 |
| 20 | 97×97 | M | 1600 | 970 | 666 |
| 20 | 97×97 | Q | 1120 | 679 | 466 |
| 20 | 97×97 | H | 861 | 521 | 358 |
| 40 | 177×177 | L | 7089 | 4296 | 2953 |
| 40 | 177×177 | M | 5596 | 3391 | 2331 |
| 40 | 177×177 | Q | 3993 | 2420 | 1663 |
| 40 | 177×177 | H | 3057 | 1852 | 1273 |
バージョン 1 をよく見てください:L から H にするとバイト容量が 17 から 7 に減り、59% の削減です。このトレードオフは印刷用途では通常見合う価値がありますが、実際のコストです。レベル M でバージョン 4 のコードに余裕で収まる長い URL が、レベル H ではバージョン 6 を強制するかもしれません。そしてコードが大きくなるほど、同じ印刷サイズではモジュールが小さくなります。
短いペイロードは常に強い誤り訂正に勝ります。 低バージョン・レベル H の短い URL は、高バージョン・レベル L の長い URL より、ほぼ必ずスキャン性能が上です。URL をエンコードするなら、短いドメインかリダイレクトを使ってください。これは他のどんな最適化よりも重要です。
印刷サイズとスキャン距離:10:1 ルール
誤り訂正は、単に小さすぎて解像できないコードを救うことはできません。広く使われている現場のルールは 10:1 の比率 です:スキャン距離はコードの幅の約 10 倍以内にすべきです。10:1 を保守的とし、良好なカメラと照明で 15:1 近くでもスキャンできた例を挙げる文献もありますが、設計の基準にすべき数字は 10:1 です。
- 名刺のコード、幅 2 cm → 約 20 cm まで確実
- ポスターのコード、幅 10 cm → 約 1 m まで確実
- 看板のコード、幅 1 m → 約 10 m まで確実
関連する制約が 2 つ:
- モジュールサイズ。 スマートフォンのカメラが解像できるよう、各モジュールは少なくともおおむね 0.4 mm 必要です(2 ミル程度では小さすぎ、0.4 mm が一般的な印刷の下限です)。バージョン 10 のコード(57 モジュール)なら、データ領域だけで最低約 2.3 cm の物理サイズが必要です。
- クワイエットゾーン。 仕様ではコードの周囲に少なくとも 4 モジュール分の余白が必要です。クワイエットゾーンを切り落とすのは、印刷コードが失敗する最も一般的な理由の一つで、どんな誤り訂正レベルでも修復できません——リーダーはクワイエットゾーンを使ってコードの端を検出するからです。
なぜロゴにはレベル H が必要なのか
QRコードの中央にロゴを埋め込むことは、レベル H が存在する典型的な理由です。ロゴは物理的にモジュールを覆い、その下のコードワードを破壊します。レベル H の約 30% の復元予算があるからこそ、これに耐えられるのです。
ロゴオーバーレイの実践ルール:
- H を使う。 常に。M(約 15%)では、控えめなサイズのロゴでも予算の大半を使い果たします。
- ロゴはコード全面積の約 30% 未満に抑える——できればかなり下回るように。覆われた領域がコードワードブロック全体にきれいに分散することは滅多にないからです。レベル H で面積の 20% を覆うロゴは快適な設計ですが、28% はギャンブルです。
- 中央に置く。 3 つのファインダーパターン(隅の大きな四角)とタイミング/アライメントパターンは、誤り訂正が同じようには保護しない構造データを担っています。中央配置はこれらを避けられます。
- 実際のスマートフォンで、実際の距離で、悪い照明でテストする。 机上のフラッグシップ機だけでなく。カメラが平凡な古い Android 端末が、あなたの設計が想定すべき下限です。
なお、レベルを尋ねることなくコードにロゴを載せられる生成ツールは、暗黙にあなたが別の場所で選んだレベルに賭けています。L を設定してロゴを追加すると、頻繁に失敗するが常に失敗するわけではないコードができあがります——最悪の結果です。カジュアルなテストでは通り、現場で失敗するからです。
実際の選び方
レベル L(約 7%) — 画像が完璧にレンダリングされるデジタル専用のコンテキスト:アプリ間の受け渡し、画面表示、スマートフォンに表示する生成チケット。きれいなピクセルはほぼ何も問題を起こさないので、予算は容量と小さいサイズに使いましょう。それ以外で正しい選択になることは稀です。
レベル M(約 15%) — きれいな印刷物の一般的なデフォルト:名刺、製品パッケージ、書類。通常の取り扱いによる摩耗、軽微な印刷欠陥、映り込みに耐えます。多くの生成ツールのデフォルトがここに設定されているのには正当な理由があります。
レベル Q(約 25%) — ロゴオーバーレイのない過酷な物理環境:産業用ラベル、倉庫の棚、機器タグ、天候にさらされる屋外標識。表面が通常の使用で傷つき、汚れ、部分的に隠れる場合、Q が働き者です。
レベル H(約 30%) — ロゴオーバーレイ、非常に過酷な環境、またはスキャン失敗のコストが高い状況(決済コード、安全上重要なラベル)。非常に小さく印刷する必要があり、低品質なカメラを想定する場合にも正しい選択です。
決定木は次のように要約できます:デジタル → L または M、きれいな印刷 → M、過酷な環境 → Q、ロゴまたは重要な信頼性 → H。 そしてレベルに関わらず:ペイロードは短く、クワイエットゾーンは確保し、10:1 の距離ルールを守りましょう。
自分で検証してみる
理論も良いですが、QR の誤り訂正は実際にテストするのが簡単です。当サイトの QRコード生成ツール で同じ URL を各レベルで生成し、比較してみてください:
- レベル L、続いて M、Q、H でコードを生成します。モジュール密度が増えていくのが分かります——あの視覚的な密度こそが冗長性です。
- H レベルのバージョンを印刷し、中央をコインやステッカーで覆い(面積の約 20%)、スキャンします。まだ読み取れるはずです。
- L レベルのバージョンで同じことを試します。読み取れません。
- H レベルのコードを使い、スキャンが失敗するまで徐々に覆う面積を増やします——実用的な限界が理論上の約 30% に近いことが分かるでしょう。
容量のトレードオフも直接確認できます:長い URL を貼り付けて、各レベルがどのバージョン(サイズ)を必要とするか見てみてください。この実験は、どんな表よりも速くトレードオフを教えてくれます。
まとめ
- QRコードの誤り訂正はリード・ソロモン冗長性であり、レベルはコードワード予算のうち冗長性に割く割合を決めます:復元能力は L ≈ 7%、M ≈ 15%、Q ≈ 25%、H ≈ 30%。
- 高いレベルは容量を削ります——バージョン 1 では、H は L の半分以下のバイト数しか収容できません。
- 短いペイロードは強い訂正に勝ります。レベルを上げる前に URL を短縮しましょう。
- 印刷サイズは 10:1 の距離ルールで設計し、4 モジュールのクワイエットゾーンは絶対に切り落とさない。
- ロゴオーバーレイ ⇒ レベル H、ロゴは面積の約 30% 未満、中央配置、安価なスマートフォンでテスト。
QRコード生成ツール でいくつかのバリエーションを生成すれば、あなたのユースケースに適したレベルは 5 分以内に自明になるでしょう。