読み込み中...

PythonでQRコードを生成する方法と活用例8選

QRコード 徹底解説 Python
この記事は約31分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●PythonでQRコード生成

今や私たちの日常生活に欠かせないQRコード。

スマートフォンで簡単にスキャンできるこの四角い模様は、実はPythonを使って自分で作ることが可能です。

PythonでQRコードを生成する方法を学べば、ビジネスや個人プロジェクトに活用できる幅広い可能性が広がります。

○QRコードとは?その仕組みと重要性

QRコードは「Quick Response」の略で、1994年に日本の自動車部品メーカーによって開発されました。

バーコードの進化版とも言えるQRコードは、縦横両方向に情報を持つことができるため、より多くのデータを小さなスペースに格納できます。

QRコードの構造は複雑に見えますが、基本的には黒い正方形のパターンで構成されています。

QRコードの3つの隅にある大きな正方形は位置検出パターンと呼ばれ、スキャナーがQRコードの向きを認識するのに役立ちます。

中央の小さな正方形は、アライメントパターンと呼ばれ、コードの歪みを補正します。

QRコードの重要性は、その多様な用途にあります。

製品情報の提供、支払い処理、ウェブサイトへの誘導など、QRコードは様々な場面で活用されています。

特にスマートフォンの普及により、QRコードの利用はますます身近なものになりました。

○Pythonを使用するメリット

PythonでQRコードを生成することには、大きな利点があります。

まず、Pythonは初心者にも扱いやすい言語です。

シンプルな文法と豊富なライブラリにより、複雑な処理も比較的少ないコードで実現できます。

また、Pythonは多くのプラットフォームで動作するため、WindowsやMac、LinuxなどのOSに関係なくQRコード生成プログラムを作成できます。

さらに、PythonにはQRコード生成に特化したライブラリが存在するため、ゼロからコードを書く必要がありません。

加えて、Pythonは機械学習や画像処理など、他の分野との連携も容易です。

QRコード生成を学ぶことは、より高度なプログラミングスキルの習得への第一歩となり得るのです。

○必要なライブラリと環境設定

PythonでQRコードを生成するには、主に「qrcode」というライブラリを使用します。

このライブラリはPyPIで提供されており、pipコマンドを使って簡単にインストールできます。

環境設定の手順は次の通りです。

  1. Pythonがインストールされていることを確認します。ターミナルやコマンドプロンプトで「python –version」と入力し、バージョン情報が表示されれば問題ありません。
  2. pipがインストールされていることを確認します。「pip –version」でバージョン情報が表示されればOKです。
  3. qrcodeライブラリをインストールします。次のコマンドを実行します。
pip install qrcode[pil]

[pil]オプションを付けることで、画像処理に必要なPillowライブラリも同時にインストールされます。

  1. インストールが完了したら、Pythonの対話型シェルやお好みのIDEで次のコードを実行して、ライブラリが正しくインポートできることを確認します。
import qrcode
print(qrcode.__version__)

バージョン番号が表示されれば、環境設定は完了です。

●QRコード生成の基本テクニック

QRコードの基本を理解し、必要な環境を整えたら、いよいよQRコード生成の実践に入ります。

まずは最もシンプルなQRコードの生成方法から始めましょう。

○サンプルコード1:シンプルなQRコード生成

最も基本的なQRコードを生成するには、次のようなコードを使用します。

import qrcode

# QRコードに埋め込む情報
data = "https://www.example.com"

# QRコードの生成
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data(data)
qr.make(fit=True)

# 画像の生成
img = qr.make_image(fill_color="black", back_color="white")

# 画像の保存
img.save("simple_qrcode.png")

このコードを実行すると、「simple_qrcode.png」というファイル名でQRコード画像が保存されます。

生成されたQRコードをスマートフォンなどでスキャンすると、「https://www.example.com」というURLにアクセスできます。

コードの説明

  • qrcode.QRCode()でQRコードのインスタンスを作成します。versionはQRコードのサイズ、box_sizeは各マスの大きさ、borderは余白のサイズを指定します。
  • add_data()で埋め込む情報を追加し、make()でQRコードを生成します。
  • make_image()で画像オブジェクトを作成し、save()で画像ファイルとして保存します。

○サンプルコード2:カスタマイズされたQRコード

基本的なQRコードの生成ができたら、次は色やサイズなどをカスタマイズしてみましょう。

次のコードでは、QRコードの色や形状を変更します。

import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer

# QRコードに埋め込む情報
data = "https://www.example.com"

# QRコードの設定
qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
qr.add_data(data)
qr.make(fit=True)

# カスタマイズされた画像の生成
img = qr.make_image(fill_color="blue", back_color="yellow", image_factory=StyledPilImage, module_drawer=RoundedModuleDrawer())

# 画像の保存
img.save("custom_qrcode.png")

このコードを実行すると、青色のQRコードが黄色の背景に描画され、各モジュール(QRコードの最小単位の四角形)が丸みを帯びた「custom_qrcode.png」が生成されます。

コードの説明

  • error_correctionパラメータで、QRコードの誤り訂正レベルを設定できます。
  • StyledPilImageRoundedModuleDrawerを使用することで、QRコードのデザインをカスタマイズしています。
  • fill_colorback_colorで、QRコードと背景の色をそれぞれ指定しています。

○サンプルコード3:ロゴ入りQRコード

QRコードに会社のロゴや画像を埋め込むことで、より視覚的に魅力的で、ブランドを印象づけるQRコードを作成できます。

次のコードでは、QRコードの中央にロゴを配置します。

import qrcode
from PIL import Image

# QRコードに埋め込む情報
data = "https://www.example.com"

# QRコードの生成
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data(data)
qr.make(fit=True)

# QRコード画像の作成
qr_image = qr.make_image(fill_color="black", back_color="white").convert('RGB')

# ロゴ画像の読み込みとリサイズ
logo = Image.open("logo.png")
logo_size = 60
logo = logo.resize((logo_size, logo_size), Image.ANTIALIAS)

# ロゴの配置位置を計算
qr_size = qr_image.size[0]
position = ((qr_size - logo_size) // 2, (qr_size - logo_size) // 2)

# ロゴの貼り付け
qr_image.paste(logo, position, logo)

# 画像の保存
qr_image.save("logo_qrcode.png")

このコードを実行する前に、「logo.png」というファイル名でロゴ画像を準備しておく必要があります。

生成された「logo_qrcode.png」は、中央にロゴが配置されたQRコードとなります。

コードの説明

  • PIL(Python Imaging Library)を使用して画像処理を行っています。
  • qr_image.paste()メソッドを使ってQRコード画像にロゴを貼り付けています。
  • ロゴのサイズや位置は、QRコードの読み取りに影響を与えない範囲で調整可能です。

●高度なQRコード生成テクニック

PythonでQRコードを生成する基本的な方法を理解したら、もっと高度なテクニックに挑戦してみましょう。

動的なQRコード、エラー訂正レベルの調整、複数のQRコードを一括生成する方法など、より複雑で実用的な技術を学ぶことで、QRコードの可能性を最大限に引き出すことができます。

○サンプルコード4:動的QRコード生成

動的QRコードは、コンテンツを後から変更できる柔軟性を持っています。

例えば、短縮URLサービスを利用して、QRコードの内容を動的に変更することが可能です。

import qrcode
import pyshorteners

# 短縮URLの生成
long_url = "https://www.example.com/very/long/url/that/might/change/later"
shortener = pyshorteners.Shortener()
short_url = shortener.tinyurl.short(long_url)

# QRコードの生成
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data(short_url)
qr.make(fit=True)

# 画像の生成と保存
img = qr.make_image(fill_color="black", back_color="white")
img.save("dynamic_qrcode.png")

print(f"Short URL: {short_url}")

コードの説明

  1. pyshortenersライブラリを使用して長いURLを短縮します。
  2. 短縮されたURLをQRコードに埋め込みます。
  3. 生成されたQRコードを画像として保存します。

動的QRコードの利点は、QRコード自体を変更することなく、リダイレクト先のURLを変更できることです。

マーケティングキャンペーンやイベント情報の更新に便利です。

○サンプルコード5:エラー訂正レベルの調整

QRコードには4つのエラー訂正レベル(L、M、Q、H)があります。

レベルが高いほど、QRコードが部分的に損傷しても正しく読み取れる可能性が高くなります。

import qrcode

data = "https://www.example.com"

# エラー訂正レベルの設定
error_correction_levels = [qrcode.constants.ERROR_CORRECT_L,
                           qrcode.constants.ERROR_CORRECT_M,
                           qrcode.constants.ERROR_CORRECT_Q,
                           qrcode.constants.ERROR_CORRECT_H]

for i, level in enumerate(error_correction_levels):
    qr = qrcode.QRCode(version=None, error_correction=level, box_size=10, border=4)
    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"qrcode_error_level_{i+1}.png")

print("4つの異なるエラー訂正レベルのQRコードが生成されました。")

コードの説明

  1. 4つのエラー訂正レベルをリストで定義します。
  2. それぞれのレベルでQRコードを生成し、別々の画像として保存します。

エラー訂正レベルを調整することで、QRコードの耐久性と情報密度のバランスを取ることができます。

例えば、屋外で使用するQRコードには高いエラー訂正レベルを選択し、印刷物に使用する場合は低いレベルを選ぶといった具合です。

○サンプルコード6:複数QRコードの一括生成

大量のQRコードを生成する必要がある場合、一括生成の手法が役立ちます。

import qrcode
import csv
from pathlib import Path

def generate_qr_codes(data_file, output_dir):
    Path(output_dir).mkdir(parents=True, exist_ok=True)

    with open(data_file, 'r') as file:
        reader = csv.reader(file)
        next(reader)  # ヘッダーをスキップ

        for row in reader:
            id, data = row
            qr = qrcode.QRCode(version=1, box_size=10, border=5)
            qr.add_data(data)
            qr.make(fit=True)

            img = qr.make_image(fill_color="black", back_color="white")
            img.save(f"{output_dir}/qrcode_{id}.png")

    print("全てのQRコードが生成されました。")

# 使用例
generate_qr_codes('qr_data.csv', 'output_qrcodes')

コードの説明

  1. CSVファイルからデータを読み込みます。
  2. 各行のデータを使ってQRコードを生成します。
  3. 生成したQRコードを指定されたディレクトリに保存します。

CSVファイル(qr_data.csv)の例

id,data
1,https://www.example1.com
2,https://www.example2.com
3,https://www.example3.com

一括生成は、例えば従業員IDカードやイベントチケットなど、大量のユニークなQRコードが必要な場合に非常に便利です。

●QRコードの実践的な活用例8選

QRコードの基本的な生成方法と高度なテクニックを学んだところで、実際にどのように活用できるか、具体的な例を見ていきましょう。

QRコードは、ビジネスや日常生活のさまざまな場面で役立つ便利なツールです。

○ビジネスカードのデジタル化

従来の紙の名刺に加えて、QRコードを活用したデジタル名刺を作成することで、より多くの情報を効率的に共有できます。

QRコードをスキャンすると、詳細な連絡先情報、ソーシャルメディアプロフィール、ポートフォリオなどにアクセスできるようになります。

import qrcode
import vcard

# vCard情報の作成
v = vcard.vCard()
v.add('n').given = '太郎'
v.add('n').family = '山田'
v.add('org').value = '株式会社Python'
v.add('title').value = 'シニアエンジニア'
v.add('email').value = 'taro.yamada@example.com'
v.add('tel').value = '090-1234-5678'
v.add('url').value = 'https://www.example.com/profile'

# QRコードの生成
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data(v.serialize())
qr.make(fit=True)

# 画像の生成と保存
img = qr.make_image(fill_color="black", back_color="white")
img.save("digital_business_card.png")

print("デジタルビジネスカードのQRコードが生成されました。")

○イベント参加登録の効率化

イベントの参加登録にQRコードを活用すると、受付プロセスを大幅に簡素化できます。

参加者は事前に送られたQRコードを提示するだけで、スムーズに入場できます。

import qrcode
import uuid

def generate_event_qr(event_name, attendee_name):
    unique_id = str(uuid.uuid4())
    data = f"イベント名: {event_name}\n参加者: {attendee_name}\nID: {unique_id}"

    qr = qrcode.QRCode(version=1, box_size=10, border=5)
    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"event_ticket_{attendee_name}.png")

    print(f"{attendee_name}さんのイベントQRコードが生成されました。")

# 使用例
generate_event_qr("PythonDeveloperConference2024", "山田太郎")

○商品情報へのクイックアクセス

店頭や広告に表示されたQRコードをスキャンすることで、商品の詳細情報、レビュー、在庫状況などにすぐにアクセスできます。

import qrcode
import json

def generate_product_qr(product_info):
    data = json.dumps(product_info, ensure_ascii=False)

    qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=4)
    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"product_{product_info['id']}_qr.png")

    print(f"商品ID: {product_info['id']}のQRコードが生成されました。")

# 使用例
product = {
    "id": "P001",
    "name": "超軽量ノートPC",
    "price": 99800,
    "description": "重さわずか1kg、バッテリー寿命24時間の革新的ノートPC",
    "url": "https://www.example.com/products/P001"
}

generate_product_qr(product)

○位置情報の共有

地図上の特定の場所やナビゲーション情報をQRコードに埋め込むことで、簡単に位置情報を共有できます。

import qrcode

def generate_location_qr(latitude, longitude, location_name):
    map_url = f"https://www.google.com/maps/search/?api=1&query={latitude},{longitude}"
    data = f"場所: {location_name}\n座標: {latitude}, {longitude}\nマップ: {map_url}"

    qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"location_{location_name.replace(' ', '_')}.png")

    print(f"{location_name}の位置情報QRコードが生成されました。")

# 使用例
generate_location_qr(35.6812362, 139.7671248, "東京タワー")

○Wi-Fi接続の簡素化

Wi-Fiネットワークの情報をQRコードに埋め込むことで、パスワードを手動で入力することなく、簡単にWi-Fiに接続できます。

import qrcode

def generate_wifi_qr(ssid, password, security_type="WPA"):
    wifi_config = f"WIFI:T:{security_type};S:{ssid};P:{password};;"

    qr = qrcode.QRCode(version=1, box_size=10, border=5)
    qr.add_data(wifi_config)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"wifi_{ssid}.png")

    print(f"{ssid}のWi-Fi接続QRコードが生成されました。")

# 使用例
generate_wifi_qr("MyHomeWiFi", "SecurePassword123")

○決済システムの導入

QRコードを使用した決済システムは、特に小規模ビジネスや屋台など、従来の決済端末の導入が難しかった場所でも簡単に導入できます。

import qrcode
import random

def generate_payment_qr(merchant_id, amount):
    transaction_id = ''.join([str(random.randint(0, 9)) for _ in range(10)])
    payment_data = f"MERCHANT:{merchant_id};AMOUNT:{amount};TXN:{transaction_id}"

    qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4)
    qr.add_data(payment_data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"payment_{transaction_id}.png")

    print(f"決済用QRコード(取引ID: {transaction_id})が生成されました。")

# 使用例
generate_payment_qr("SHOP123", 5000)

○マーケティングキャンペーンの追跡

QRコードを使用することで、マーケティングキャンペーンの効果を追跡し、どの広告媒体が最も効果的かを分析できます。

import qrcode
import urllib.parse

def generate_campaign_qr(campaign_id, source, medium):
    base_url = "https://www.example.com/landing-page"
    utm_params = urllib.parse.urlencode({
        "utm_source": source,
        "utm_medium": medium,
        "utm_campaign": campaign_id
    })
    full_url = f"{base_url}?{utm_params}"

    qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=4)
    qr.add_data(full_url)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"campaign_{campaign_id}_{source}_{medium}.png")

    print(f"キャンペーンQRコード(ID: {campaign_id}, ソース: {source}, メディア: {medium})が生成されました。")

# 使用例
generate_campaign_qr("SUMMER2024", "billboard", "qr")

○デジタル名刺の作成

従来の紙の名刺に加えて、QRコードを活用したデジタル名刺を作成することで、より多くの情報を効率的に共有できます。

QRコードをスキャンすると、詳細な連絡先情報、ソーシャルメディアプロフィール、ポートフォリオなどにアクセスできるようになります。

import qrcode
import json

def create_digital_business_card(name, title, company, email, phone, website, linkedin):
    card_data = {
        "name": name,
        "title": title,
        "company": company,
        "email": email,
        "phone": phone,
        "website": website,
        "linkedin": linkedin
    }

    json_data = json.dumps(card_data, ensure_ascii=False)

    qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=10, border=4)
    qr.add_data(json_data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"digital_business_card_{name.replace(' ', '_')}.png")

    print(f"{name}さんのデジタル名刺QRコードが生成されました。")

# 使用例
create_digital_business_card(
    "山田花子",
    "マーケティングマネージャー",
    "テックイノベーション株式会社",
    "hanako.yamada@techinnovation.co.jp",
    "03-1234-5678",
    "https://www.techinnovation.co.jp",
    "https://www.linkedin.com/in/hanakoyamada"
)

PythonとQRコード生成ライブラリを組み合わせることで、様々な実用的なアプリケーションを作成できます。

上記の例は、ビジネスや日常生活でQRコードを活用する方法のほんの一部にすぎません。

創造力を働かせれば、さらに多くの革新的な使用方法を見出すことができるでしょう。

QRコードの活用は、単なる情報の共有だけでなく、ユーザー体験の向上やビジネスプロセスの効率化にも貢献します。

例えば、イベント参加登録にQRコードを使用することで、長い列や煩雑な手続きを避けることができます。

また、商品情報へのクイックアクセスを提供することで、顧客の購買意欲を高めたり、より詳細な情報提供が可能になります。

位置情報の共有は、観光地や大規模施設での案内に役立ちます。

訪問者は複雑な地図を読み解く必要がなく、スマートフォンで直接ナビゲーションを開始できます。

Wi-Fi接続の簡素化は、カフェやホテルなどで特に便利です。

長くて複雑なパスワードを手動で入力する必要がなくなり、顧客満足度の向上につながります。

●QRコード生成時のよくあるエラーと対処法

PythonでQRコードを生成する際、時として予期せぬエラーに遭遇することがあります。

しかし、落胆する必要はありません。

多くの場合、エラーには共通のパターンがあり、適切な対処法を知っていれば簡単に解決できます。

ここでは、QRコード生成時によく発生するエラーとその対処法について詳しく説明します。

○ライブラリのインポートエラー

QRコード生成に必要なライブラリがインストールされていない、あるいは正しくインポートされていない場合に発生するエラーです。

例えば、次のようなエラーメッセージが表示されることがあります。

ImportError: No module named 'qrcode'

対処法としては、まずpipを使用して必要なライブラリをインストールします。

pip install qrcode[pil]

インストール後、Pythonスクリプトの冒頭で正しくライブラリをインポートしているか確認しましょう。

import qrcode
from PIL import Image

ライブラリのインポートエラーは、開発環境の設定に起因することもあります。

仮想環境を使用している場合は、正しい環境が有効になっているか確認してください。

○QRコードサイズの調整ミス

QRコードのサイズを調整する際、不適切な値を設定してしまうとエラーが発生することがあります。

例えば、次のようなコードでサイズを指定する際に問題が起きる可能性があります。

qr = qrcode.QRCode(version=1, box_size=10, border=5)

ここで、versionbox_sizeborderの値が不適切だとエラーが発生します。

対処法としては、このパラメータを適切な範囲内で設定することです。

  • version: 1から40の整数値を使用します。値が大きいほどQRコードのサイズが大きくなります。
  • box_size: 各QRコードのモジュール(最小単位の四角形)のピクセルサイズを指定します。通常は1から10の範囲で設定します。
  • border: QRコードの周囲の余白を指定します。通常は4または5に設定します。

適切な値の例

qr = qrcode.QRCode(version=None, box_size=10, border=4)
qr.add_data("https://www.example.com")
qr.make(fit=True)

この例では、version=Nonefit=Trueを使用することで、データ量に応じて自動的に適切なサイズが選択されます。

○文字コードの問題

QRコードに埋め込む文字列に日本語などの非ASCII文字が含まれる場合、文字コードの問題でエラーが発生することがあります。

例えば、次のようなエラーメッセージが表示されるかもしれません。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

対処法としては、文字列をUTF-8エンコーディングで明示的に指定します。

data = "こんにちは、世界!"
encoded_data = data.encode('utf-8')
qr = qrcode.QRCode(version=None, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
qr.add_data(encoded_data)
qr.make(fit=True)

この方法を使用すると、日本語を含む文字列でもQRコードに正しく埋め込むことができます。

●Pythonで生成したQRコードの応用例

QRコードの基本的な生成方法を習得したら、より実践的なアプリケーションに挑戦してみましょう。

ここでは、WebアプリケーションでのQRコード生成と、QRコードを使用した簡易認証システムという2つの応用例を紹介します。

○サンプルコード7:WebアプリケーションでのQRコード生成

Webアプリケーションで動的にQRコードを生成する例を見てみましょう。

ここでは、FlaskというPythonのWebフレームワークを使用します。

from flask import Flask, render_template, request, send_file
import qrcode
import io

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def generate_qr():
    if request.method == 'POST':
        data = request.form['data']
        img = qrcode.make(data)
        img_io = io.BytesIO()
        img.save(img_io, 'PNG')
        img_io.seek(0)
        return send_file(img_io, mimetype='image/png')
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)

このコードは、Webフォームからユーザーが入力したデータを受け取り、QRコードを生成して表示します。

index.htmlテンプレートは次のようになります。

<!DOCTYPE html>
<html>
<head>
    <title>QRコード生成</title>
</head>
<body>
    <h1>QRコード生成</h1>
    <form method="POST">
        <input type="text" name="data" placeholder="QRコードにしたいデータを入力">
        <input type="submit" value="生成">
    </form>
</body>
</html>

このWebアプリケーションを実行すると、ブラウザ上でQRコードを動的に生成できます。

ユーザーはテキストボックスにデータを入力し、「生成」ボタンをクリックすると、対応するQRコードが表示されます。

○サンプルコード8:QRコードを使用した簡易認証システム

QRコードを使用した簡易的な認証システムを作成してみましょう。

このシステムでは、ユーザー固有のQRコードを生成し、そのQRコードをスキャンすることで認証を行います。

import qrcode
import uuid
import json
from flask import Flask, request, jsonify

app = Flask(__name__)

# ユーザーデータを保存する辞書
users = {}

@app.route('/generate_qr', methods=['POST'])
def generate_qr():
    user_id = str(uuid.uuid4())
    qr = qrcode.QRCode(version=1, box_size=10, border=5)
    qr.add_data(user_id)
    qr.make(fit=True)
    img = qr.make_image(fill_color="black", back_color="white")
    img.save(f"user_{user_id}.png")
    users[user_id] = {"authenticated": False}
    return jsonify({"user_id": user_id, "qr_code": f"user_{user_id}.png"})

@app.route('/authenticate', methods=['POST'])
def authenticate():
    user_id = request.json.get('user_id')
    if user_id in users:
        users[user_id]["authenticated"] = True
        return jsonify({"status": "success", "message": "認証成功"})
    return jsonify({"status": "error", "message": "無効なユーザーID"})

@app.route('/check_auth', methods=['GET'])
def check_auth():
    user_id = request.args.get('user_id')
    if user_id in users:
        return jsonify({"authenticated": users[user_id]["authenticated"]})
    return jsonify({"status": "error", "message": "無効なユーザーID"})

if __name__ == '__main__':
    app.run(debug=True)

このシステムは次の3つのエンドポイントを提供します。

  1. /generate_qr: 新しいユーザーIDを生成し、対応するQRコードを作成します。
  2. /authenticate: QRコードがスキャンされたときに呼び出され、ユーザーを認証します。
  3. /check_auth: ユーザーの認証状態を確認します。

実際の使用例として、モバイルアプリがQRコードをスキャンし、/authenticateエンドポイントを呼び出すことで認証を行います。

その後、Webアプリケーションが定期的に/check_authを呼び出して認証状態を確認し、認証が成功したらユーザーにアクセスを許可するという流れになります。

まとめ

Pythonを使用したQRコード生成は、単純なテキストの埋め込みから高度なWebアプリケーションまで、幅広い用途に適用できる強力な技術です。

基本的なQRコード生成から始まり、カスタマイズ、エラー処理、そして実践的なアプリケーション開発まで、段階的に理解を深めることで、QRコード技術の可能性を最大限に引き出すことができます。

今回学んだ知識を基に、さらなる探求と実践を重ね、QRコード技術のエキスパートを目指してください。