QRコード作成
入力した内容が保存・記録・共有されることはありません。
URL・テキスト・Wi-Fi情報のQRコードを作成し、PNGまたはSVGで保存できます。処理はすべてブラウザ内で行われるため、データは送信されず、コードが失効することもありません。
使い方
- エンコードしたいURLまたはテキストを入力します。
- 必要に応じて誤り訂正レベル・色・余白を調整します。
- 資料用にはPNG、印刷用にはSVGでダウンロードします。
パターンの中身
QRコードは、決まった構造を持つモジュールの格子です。3つの角にある大きな正方形はファインダパターンで、スキャナーはこれでコードの位置を見つけ、どんな角度でも向きを判断します。大きなバージョンでは、曲面や傾いた面に印刷されたコードを撮影したときのゆがみを補正するために、小さなアライメントパターンが加わります。ファインダパターンの間の点線はタイミングパターンで、スキャナーにモジュールの格子を教えます。ファインダパターンの周囲には、誤り訂正レベルとマスクを示す形式情報があります。
それ以外はすべて、データと誤り訂正符号が交互に並んだものです。バージョンは21×21モジュールから177×177モジュールまで40種類あり、内容が収まる最小のものが自動的に選ばれます。入力するにつれてコードが目に見えて細かくなるのはそのためです。
エンコードモードは、思っている以上に重要です。数字は1桁あたり約3.3ビット、英数字は約5.5ビットで収まりますが、英数字モードの文字集合は大文字といくつかの記号だけです。それ以外はすべて1文字8ビットのバイトモードになり、日本語などのマルチバイト文字はさらに多くのビットを使います。HTTPS://EXAMPLE.COM/PATHが、同じURLを小文字で書いた場合より目に見えて単純なコードになるのはこのためです。スキームとホストは大文字・小文字を区別しないので大文字にしても問題なく、その差でバージョンが1つか2つ変わることがあります。
確実に読み取れるコードを作る
クワイエットゾーンを残してください。仕様では四辺すべてに4モジュール分の余白が必要で、レイアウトに収めるためにこれを削るのが、印刷したコードが読み取れない最も多い原因です。スキャナーはそもそもコードを見つけるためにこの余白を使います。
明暗を反転させないでください。明るい背景に暗いモジュールというのが、すべてのスキャナーの前提です。反転したコードは読めるスキャナーと読めないスキャナーがあります。コントラストを高く保ち、モジュールの背後にグラデーションや写真の背景を置かないでください。色を付けるなら、暗い色を明るくするのではなく、暗い色のまま色味を変えましょう。
読み取る距離に合わせた大きさにしてください。実用的な目安は、コードの幅を読み取り距離のおよそ10分の1にすることです。30cmの距離でスマートフォンをかざすなら約3cm、部屋の反対側から読むポスターなら思っているよりずっと大きくする必要があります。印刷物では、モジュールが約0.4mmを下回らないようにし、画面上の校正ではなく実際に刷り上がったもので確認してください。
中央にロゴを置くなら、まず誤り訂正レベルをHに上げてください。これで約30%の冗長性が確保され、隠れた部分を補えます。ただし、ロゴはファインダパターンから離しておく必要があり、1,000枚印刷する前に2〜3種類のスマートフォンで読み取りを試しておく価値があります。
ペイロードの形式
QRコードが運ぶのはテキストで、スキャナーがそのテキストをどう扱うかは慣習によって決まります。URLなら開きます。それ以外は、既知の形式に一致しない限り、たいていプレーンテキストとして表示されます。
Wi-FiはWIFI:T:WPA;S:ネットワーク名;P:パスワード;;の形式で、TにはWPA、WEP、nopassのいずれかを指定します。セミコロンは必須で、ネットワーク名やパスワードに含まれる特殊文字はバックスラッシュでエスケープする必要があります。電話番号はtel:、メールは件名と本文を通常のクエリ構文で指定するmailto:、位置情報は緯度と経度を指定するgeo:です。連絡先にはvCardを使います。冗長ですが、非常に広く対応しています。
アプリ固有のスキームに頼るものは、そのアプリがインストールされている環境でしか動きません。凝った独自のスキームより、リダイレクトする普通のhttps URLのほうがたいてい堅牢なのはそのためです。
静的コードと動的コード
ここで生成するコードは静的です。内容がモジュールに直接エンコードされます。いつまでも使え、オフラインでも動き、どのサービスにも依存せず、誰にも何も報告しません。その代わり変更もできません。指し示すURLが移転すれば、印刷したものはすべて使えなくなります。
動的コードは、提供事業者が所有する短いリダイレクトURLをエンコードすることでこれを解決します。事業者はそのURLを、あなたが現在指定している行き先に転送し、その途中で読み取り回数を数えます。行き先が変わるキャンペーンには本当に便利ですが、その代償ははっきり理解しておくべきです。事業者はすべての読み取りを把握し、アカウントが失効したりサービスが終了したりするとコードは動かなくなります。そして、多くの無料生成ツールは、そうとは言わずに動的コードを作ります。
柔軟性が欲しいなら、誠実な方法は、自分が管理するドメインの短いURLを指す静的コードを作り、サーバー側でリダイレクトすることです。行き先を変える自由を保ちつつ、ほかの誰も経路に入り込みません。
誤り訂正が傷ついたコードを読ませる仕組み
QRコードはリードソロモン符号を使っています。CDのデータを守ってきたのと同じ系統の誤り訂正符号で、深宇宙通信でも使われているものです。考え方としては、データを多項式の係数とみなし、その曲線上の余分な点を一緒に送ります。十分な数の点が生き残っていれば、元のデータを正確に復元できるというわけです。
レベルは4段階あります。Lはコードワードの約7%、Mは約15%、Qは約25%、Hは約30%を復元でき、冗長性はシンボル全体に分散して配置されます。一か所の角が傷んでもたいてい問題にならないのはそのためです。レベルを上げても良好な条件で読みやすくなるわけではなく、より悪い条件に耐えられるようになるだけで、同じ内容ならパターンが密になるという代償を伴います。
画面表示やきれいな印刷ならMが妥当な既定値です。Hは曲面に印刷される、屋外で風雨にさらされる、あるいはロゴで一部が覆われるコード向けです。レベルを上げるとモジュール数が増えるため、長いURLをHレベルにすると、同じ内容のMレベルより目に見えて細かくなります。印刷サイズが決まっている場合、これは不利に働きます。
容量と、内容を短くすることの効果
容量はバージョン、誤り訂正レベル、符号化モードの組み合わせで決まります。バージョン10、つまり57×57のグリッドでMレベルの訂正を使う場合、収まるのはおおよそ英数字271文字またはバイナリ213バイトです。最大のバージョン40では数千の単位になりますが、それほど大きなシンボルは印刷に向かず、読み取りも遅くなります。
多くの人が見落としているのが符号化モードです。数字のみの内容は1桁あたり約3.3ビット、英数字モードは1文字あたり5.5ビットで詰め込め、それ以外はすべて1文字8ビットにフォールバックします。英数字モードの文字集合は大文字、数字、そして9種類の記号なので、HTTPS://EXAMPLE.COM/PATH は小文字の形よりずっと効率よく符号化されます。スキームとホスト名は大文字小文字を区別しないので、大文字にしても何も失いません。
もう一つのてこがURLを短くすることで、これは上記すべてに先立って効きます。文字数が減ればバージョンが下がり、同じ印刷サイズならモジュールが大きくなり、より遠くから、より暗い場所でも読み取れるコードになります。
クイッシングと、スキャナーが見せるべきもの
QRコードは、読み取る人にとって中身の見えない不透明なものです。今クイッシングと呼ばれているものは、まさにこの性質の上に成り立っています。パーキングメーターや飲食店のテーブルにある正規のコードの上に貼られたシール、画像であるためリンクスキャナーをすり抜けるメール内のコード、それらしい決済ページに誘導するポスター上のコードです。
防御策は地味なものです。開く前にURLをプレビューするスキャナーを選ぶ価値があり、現行のスマートフォンのカメラはどれもこれを行います。ページそのものではなくドメインを見てください。決済ページの複製など造作もないからです。何かの上から貼り付けられたように見える物理的なコードは疑ってかかりましょう。印刷されたコードの上に貼られたシールは、近くで見るとまさにそう見えます。
コードを公開する側にとって有効な対応は、短縮URLではなく、自分たちのものだと認識してもらえるドメインに向けることです。そうすればプレビューに意味が生まれます。見覚えのない短縮ドメインに解決されるコードは、攻撃者のものと見分けがつきません。
コードを他社に預けずにスキャンを計測する
スキャン数を数えたりリンク先を変更したりする一般的な方法は、事業者が提供する動的コードですが、その代償は現実的なものです。事業者はすべてのスキャンを把握し、契約が切れればコードは機能しなくなり、無料の生成サービスの中には動的コードだと明示せずに作るものもあります。つまり、印刷したコードが、自分で選んだわけでもないサービスに依存することになるのです。
自分で制御できる方式は、自社ドメインの短いパスを指す静的コードにして、リダイレクトを自分のサーバーで行うやり方です。リンク先の変更は設定変更で済み、アクセス解析は自分のログに残り、経路に他者は介在しません。キャンペーンごとにパスを分ければ、動的コードを買う目的であることが多い掲出先別の集計も自前で得られます。
どちらの方式でも、コード自体は何も報告しません。スキャンはリンク先が要求された時点で数えられます。つまり、ポスターに印刷されたコードを撮影しただけで開かなければ計測には現れず、URLを手で入力した人もスキャンした人と同じように数えられます。
印刷に回す前のチェックリスト
デザインデータではなく、実物をテストしてください。最終サイズで、実際に使う素材に印刷し、古いAndroid端末を含む3台以上のスマートフォンで読み取ってみましょう。コードが置かれる照明条件でも試すことです。薄暗いバーの黒い壁にあるコードは、同じコードが机の上にある場合とはまったく別の問題になります。
クワイエットゾーンがレイアウトの中で確保されているか確認してください。四方に4モジュール分の余白を取ることは仕様上の要件であり、印刷したコードが読めない最も多い原因は、デザイナーが構図を整えるためにその余白へ文字や罫線を寄せてしまうことです。
印刷前にリンク先を確認し、その後も生きた状態に保ってください。コードは、それを生んだキャンペーンより長く残ります。ランディングページを廃止するときは、コードが指すURLが404を返すのではなくリダイレクトするようにしておきましょう。印刷されたコードは後から編集できず、その複製は何年も出回り続けるからです。
よくある質問
- このコードは後から使えなくなりませんか?
- なりません。データはパターンそのものに埋め込まれるため、コードは永続的に機能し、維持のためのサービスも不要です。無料生成サービスの多くは自社のリダイレクトURLを指すコードを発行しており、スキャン数を追跡できる代わりに、アカウント失効や有料プラン移行で読めなくなることがあります。本ツールはどこにもリダイレクトしません。
- 誤り訂正レベルは何を変えるのですか?
- コードのどれだけが汚れたり隠れたりしても読み取れるかを決めます。おおよそLで7%、Mで15%、Qで25%、Hで30%です。レベルが高いほど同じ情報量でもコードは密になります。中央にロゴを重ねるならH、きれいな状態で使うならLが適しています。
- テキストを増やすとコードが細かくなるのはなぜですか?
- QRコードには21×21から177×177まで40のバージョンがあり、データが収まる最小のバージョンが自動的に選ばれます。そのため内容が長いほど格子は細かくなります。URLを短くするのが、読み取りやすさを保つ最も効果的な方法です。
- PNGとSVGはどちらを選ぶべきですか?
- スライドや文書など、通常の画像として扱う場合はPNGです。印刷や大判出力にはベクター形式のSVGが適しており、どのサイズでも鮮明さを保てます。
- コードの周囲の余白は必要ですか?
- 規格では四辺すべてに4モジュール分の余白が必要とされています。読み取り機はこの余白を手がかりにコードを検出するため、余白を削ることは印刷したコードが読めなくなる最も多い原因のひとつです。
- 日本語などのマルチバイト文字にも対応していますか?
- はい。内容はUTF-8としてエンコードされるため、日本語・中国語・韓国語・絵文字も正しく往復変換されます。バイト列をLatin-1として扱う生成ツールでは、これらが静かに文字化けすることがあります。
最終更新:
操作手順、期待した結果、実際の結果を記載してください。秘密情報や個人情報は削除してください。
