この記事だけでOK!PythonでQRコードを扱う完全ガイド【保存版】
この記事の目次
QRコードは情報を手軽に伝えるツールとして、Webやモバイルアプリ、マーケティングまで幅広く活用されています。
この記事では、Pythonを使ったQRコード生成と解析方法を完全網羅し、初心者でも使えるように徹底解説し、WEBアプリの制作方法までガイドします。
QR作成ツールや、Canvaなどでもツールが用意されていますが、もちろんローカル環境でもっと多彩なアレンジや生成が可能になりますので、是非最後まで読んでいってくださいね。
必要なライブラリの紹介とインストール方法
PythonでQRコードを扱うために、以下のライブラリが必要です。
- qrcode:QRコードの生成を簡単に行えるライブラリ
- Pillow:生成したQRコードに加工やカスタマイズを加えるためのライブラリ
- OpenCV:QRコードを画像ファイルから読み取り、解析するのに最適なライブラリ
以下のコマンドでインストール可能です。
pip install qrcode[pil] opencv-python
PythonでのQRコード生成
基本的なQRコードの生成
qrcode
ライブラリを使えば、QRコード生成はとても簡単です。
次のコードではURLをQRコードに変換して生成します。
import qrcode
# QRコード生成
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data("https://example.com")
qr.make(fit=True)
# 画像として生成
img = qr.make_image(fill_color="black", back_color="white")
img.show()
version: QRコードの大きさやデータ量を決定。
1から40までの値があり、値が大きいほど容量が多い。
error_correction: 読み取りエラーの補正レベル。
4段階で設定可能。box_size: QRコードの1ボックスのサイズ(ピクセル単位)。
border: QRコード周りの余白のサイズ。
カスタマイズ方法
以下は、カスタムQRコードの作成方法です。
カラーやエラーレベル、ロゴの埋め込みなどが可能です。
import qrcode
from PIL import Image
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data("https://example.com")
qr.make(fit=True)
# カラー設定
img = qr.make_image(fill_color="blue", back_color="yellow")
img = img.convert("RGBA")
# ロゴの埋め込み
logo = Image.open("path/to/logo.png")
logo = logo.resize((50, 50))
pos = ((img.size[0] - logo.size[0]) // 2, (img.size[1] - logo.size[1]) // 2)
img.paste(logo, pos, logo)
img.show()
QRコードを画像ファイルとして保存
img.save()
メソッドを使えば、生成したQRコードをPNGやJPEG形式で保存できます。
img.save("qrcode.png", format="PNG")
QRコードの読み取りと解析
QRコードの読み取りには、OpenCV
ライブラリを使用します。
import cv2
# QRコード画像の読み込み
img = cv2.imread("qrcode.png")
detector = cv2.QRCodeDetector()
data, vertices, rectified_qr_code = detector.detectAndDecode(img)
if data:
print("QRコード内容:", data)
動的QRコード
QRコードには、**「動的QRコード」と呼ばれる、後から中身のURLや内容を変更できるタイプがあります。
この動的QRコードと従来の「静的QRコード」**にはいくつか違いがあり、特にビジネス用途での利便性が注目されています。
動的QRコードでは、QRコード自体が固定のURLや情報ではなく、中間サーバーを経由してリダイレクト先を決める仕組みが導入されています。
QRコードに含まれるURLは、データベース上の短縮URLやリダイレクトURLになっており、後からリダイレクト先のURLを自由に変更できるため、QRコード自体を再発行する必要がありません。
- QRコードに短縮URLまたはリダイレクトURLが含まれる。
- QRコードをスキャンすると中間サーバー(短縮URLサービスなど)を経由する。
- 中間サーバーで設定されたリダイレクト先にユーザーが転送される。
- 必要に応じて管理画面などでURLを変更すれば、QRコードはそのままでリンク先のみが変わる。
動的QRコードのメリット
- 情報の更新が可能:
- URLやコンテンツが変わった場合でも、QRコードを再印刷せずに内容を更新できます。
- アクセス解析が可能:
- 中間サーバーでトラッキングすることで、スキャン数や利用時間帯などの分析が可能です。
- 柔軟な運用ができる:
- キャンペーンURLや一時的なプロモーションページにリンクする場合、動的QRコードは非常に便利です。
種類 | 特徴 | メリット | デメリット |
---|---|---|---|
静的QRコード | 一度生成すると情報の変更ができない固定型QRコード |
– 無料で利用可能なサービスが多い – 情報が埋め込まれるため、中間サーバー不要でスキャン時に直接リンク |
– URLや情報の変更にはQRコードの再発行が必要 – アクセス解析などのトラッキング機能は非対応 |
動的QRコード | リダイレクトURLで情報管理し、リンク先を後から変更できるQRコード |
– リンクの変更やアクセス解析が可能 – 企業プロモーションなどで効果的な運用が可能 |
– 中間サーバーが必要でコストがかかることが多い – リダイレクトの管理と運営に技術的な構築が必要 |
ただし動的QRコードのサービスリリースは、運用が求められ複雑な技術と運用コストがかかります。
リアルタイムQRコード生成Webアプリをつくる
ここから、せっかくなので、リアルタイムQRコード生成Webアプリの構築を学びましょう。
このプロジェクトでは、PythonのWebフレームワーク「Flask」と「qrcode」ライブラリを使用し、Webページ上でQRコードを生成・表示するシンプルなアプリを作成します。
必要なツール・ライブラリ
- Flask:Pythonの軽量Webフレームワーク。Webアプリのフロントエンドとバックエンドを結ぶ役割を果たします。
- qrcode:QRコード生成に特化したライブラリ。
- Pillow:qrcodeの生成したQRコードを画像として処理・保存します。
以下のコマンドで必要なライブラリをインストールします。
pip install Flask qrcode[pil]
Flaskアプリの基本構成をおさらい
まずは、基本的なFlaskアプリの構成を作成します。
qr_code_app/
├── app.py # Flaskアプリのメインファイル
├── static/ # 静的ファイル(QRコード画像など)
├── templates/ # HTMLテンプレート
│ └── index.html # QRコード生成ページ
└── qr_codes/ # QRコード画像を保存するフォルダ
Flaskアプリのセットアップ
app.pyファイルを作成し、Flaskアプリの基本設定を行います。
from flask import Flask, render_template, request, send_file
import qrcode
import os
app = Flask(__name__)
# QRコード画像の保存先ディレクトリ
QR_CODE_FOLDER = "qr_codes"
os.makedirs(QR_CODE_FOLDER, exist_ok=True)
@app.route("/", methods=["GET", "POST"])
def index():
qr_code_path = None
if request.method == "POST":
# フォームからQRコードに変換するテキストを取得
text = request.form.get("text")
# QRコード生成
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(text)
qr.make(fit=True)
# QRコードを画像として保存
img = qr.make_image(fill_color="black", back_color="white")
qr_code_path = os.path.join(QR_CODE_FOLDER, "qr_code.png")
img.save(qr_code_path)
return render_template("index.html", qr_code_path=qr_code_path)
# 画像表示用ルート
@app.route("/qr_code")
def qr_code():
qr_code_path = os.path.join(QR_CODE_FOLDER, "qr_code.png")
return send_file(qr_code_path, mimetype="image/png")
if __name__ == "__main__":
app.run(debug=True)
HTMLテンプレートの作成
QRコードを生成するページのHTMLテンプレートindex.html
を作成します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>リアルタイムQRコード生成</title>
</head>
<body>
<h1>リアルタイムQRコード生成アプリ</h1>
<form method="post">
<label for="text">QRコードに変換するテキスト:</label>
<input type="text" id="text" name="text" required>
<button type="submit">QRコード生成</button>
</form>
{% if qr_code_path %}
<h2>生成されたQRコード:</h2>
<img src="{{ url_for('qr_code') }}" alt="QR Code">
{% endif %}
</body>
</html>
アプリの実行とテストとAzureへのデプロイ方法
applicationを実行してみてください。
ローカルサーバーが起動し、http://127.0.0.1:5000
にアクセスするとアプリが表示されます。
テキスト入力フォームに変換したいテキストを入力し、「QRコード生成」をクリックすると、指定したテキストのQRコードがリアルタイムで生成され、ページに表示されます。
もちろんAzureなどにデプロイして使用することも可能。
こちらの記事でも詳細を解説しています。
Azureへのデプロイは必要なファイルを用意するところから始まります。
以下のファイルをFlaskアプリのフォルダに追加してください。
それぞれのファイルには必要なコードを記載するようにしてください。
- requirements.txt:必要なPythonライブラリを記載
Flask
qrcode[pil]
gunicorn
- startup command:Azure上でFlaskアプリを起動するコマンドを指定
web: gunicorn -w 4 -b 0.0.0.0:8000 app:app
- Procfile(オプション):プロセスを指定するファイル
Azure App ServiceでWebアプリを作成
- Azureポータルにログインし、「リソースの作成」→「Web App」を選択します。
- 必要な情報を入力します。
- App Serviceプラン: サーバーの規模を選択
- ランタイムスタック: Python 3.xを選択
- オペレーティングシステム: Linuxを推奨
- 設定が完了したら、**「確認および作成」**ボタンを押し、Webアプリを作成します。
4. FlaskアプリをAzureにデプロイ
Azure CLIまたはGitを使ってアプリをデプロイする方法があります。
ここでは、Gitを利用した方法を説明します。
- デプロイの準備: デプロイしたいアプリのフォルダでGitリポジトリを初期化します。
git init
git add .
git commit -m "Initial commit"
Azureリモートリポジトリを追加: Azureポータルの「デプロイセンター」で、デプロイ方法として「ローカルGit」を選択します。
表示された「GitリモートURL」をコピーします。
git remote add azure <AzureのGit URL>
Azureへプッシュ: リモートリポジトリにコードをプッシュします。
git push azure master
デプロイの確認とテスト
デプロイが完了すると、Azureポータルの「概要」ページにWebアプリのURLが表示されます。
このURLにアクセスし、アプリが動作していることを確認します。
QRコード生成Webアプリを別サーバーにホスティングし、iFrameで自身のサイト内に埋め込む方法もあります。
<iframe src="https://yourapp.azurewebsites.net" width="600" height="800" frameborder="0"></iframe>
QRコード生成アプリはリクエストがあった時点でQRコードを生成するため、**「常時実行が必要」**です。
常時実行するためには、Azure App Serviceのようなホスティングサービスでアプリを起動し続ける必要があります。
また、自前のサーバーで「gunicorn
」や「uwsgi
」などのアプリサーバーを使ってFlaskを常時起動させる構成もあります。
自前サーバーで常時実行する場合
自分のVPSやオンプレミスのサーバーでFlaskアプリを常時実行する場合、例えば月額500円~1000円のVPSをレンタルし、「gunicorn
」などのアプリサーバーで常時稼働させる方法もあります。
- おすすめVPSサービス:
- ConoHa、さくらインターネット、GCPやAWSの無料枠など
サービス | メリット | デメリット | 月額料金 | おすすめ用途 |
---|---|---|---|---|
ConoHa VPS |
– 初心者向けでセットアップが簡単 – SSD搭載で高速な処理 – 安価で手軽にサーバー運用が可能 |
– リソースが他社より少なめ – トラフィックの増加に対応するには追加費用が発生 |
¥900~ (月額) | 低トラフィックな個人Webアプリ、学習用途 |
さくらインターネット VPS |
– 長年の実績で安定稼働 – 価格帯が幅広く、初心者から上級者まで利用可能 – 日本国内のデータセンターで信頼性が高い |
– 初心者にはやや複雑な設定 – 高トラフィック時にパフォーマンスの低下がある |
¥600~ (月額) | 国内向けWebアプリ、セキュリティ重視のサービス |
GCP (Google Cloud Platform) 無料枠 |
– 1年間の無料枠と無料クレジット – 高トラフィックに対応できる柔軟な拡張性 – 高性能で、AI/MLの統合が容易 |
– 無料枠が1年のため継続利用にはコスト発生 – 設定が高度で、学習が必要 |
無料 (1年間)、その後従量課金制 | 高負荷アプリ、学術研究、長期的なプロジェクト |
AWS 無料枠 |
– 初年度無料枠あり – 豊富なサービスと連携可能でスケーラビリティが高い – グローバル展開が容易 |
– 設定が複雑で、初心者にはハードルが高い – 無料枠超過時の課金に注意が必要 |
無料 (初年度)、その後従量課金制 | 大規模プロジェクト、企業向けアプリケーション |