QRコードは情報を簡単に共有できる便利なツールです。
しかし、オンラインツールやアプリを使う際には、セキュリティ面での懸念があります。
個人情報や機密情報が含まれるQRコードを生成する際をイメージしてみてください。
オンラインツールやアプリを使用すると、情報漏洩のリスクが高まりますよね。
そこで、Pythonを使ってQRコード生成ツールを自作しようということです。
 さらにPyinstallerを使ってexeファイルにすることで、セキュリティと利便性を両立させる方法をご紹介します。
必要なライブラリのインストール
QRコードの生成には「segno」、GUIの作成には「tkinter」、画像処理には「PIL(Pillow)」を使用します。
 exe化には、Pyinstallerを利用することになります。
- segno
- PIL(Pillow)
- Pyinstaller
最低限で上記をインストールする必要があります。
なお、tkinterはデフォルトで利用可能です。
QRコード生成ツールのプログラム
QRコード生成ツールのコードは、以下。
qr_tool.py
import segno
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
def create_qr():
    # ユーザー入力を取得
    user_input = text_input.get("1.0", tk.END).strip()
    if user_input:
        # QRコードを生成
        qr = segno.make(user_input, error='H')
        temp_file = "temp_qrcode.png"
        qr.save(temp_file, scale=10, dark='black', light='white')
        # QRコードをリサイズして表示
        image = Image.open(temp_file)
        resized_image = image.resize((250, 250), Image.Resampling.LANCZOS)
        photo = ImageTk.PhotoImage(resized_image)
        label_image.config(image=photo)
        label_image.image = photo  # 参照を保持
def save_qr():
    # ファイル保存ダイアログを開く
    file_path = filedialog.asksaveasfilename(defaultextension='.png',
                                             filetypes=[("PNG files", '*.png')],
                                             title="保存する場所を選択してください")
    if file_path:
        # ファイルを指定した場所に保存
        Image.open("temp_qrcode.png").save(file_path)
        print("QRコードが保存されました:", file_path)
def center_window(root, width=400, height=550):
    # 画面サイズを取得
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    # 画面中央に配置
    x = (screen_width - width) // 2
    y = (screen_height - height) // 2
    root.geometry(f'{width}x{height}+{x}+{y}')
# GUIの設定
root = tk.Tk()
root.title("QRコード生成器")
# ウィンドウサイズと位置の設定
center_window(root)
# テキスト入力用テキストエリア
text_input = tk.Text(root, height=8, width=30)
text_input.pack(pady=10)
# 生成ボタン
button = tk.Button(root, text="QRコードを生成", command=create_qr)
button.pack(pady=5)
# 画像表示用ラベル、サイズを250x250ピクセルに調整
label_image = tk.Label(root, width=250, height=250)
label_image.pack(pady=10)
# 保存ボタン
save_button = tk.Button(root, text="QRコードを保存", command=save_qr)
save_button.pack(pady=5)
# GUIを表示
root.mainloop()
コメントにより、ある程度はわかると思います。
 簡単にですが、説明しておきます。
QRコード生成関数の作成
ユーザーが入力したテキストをもとにQRコードを生成し、一時的なファイルとして保存します。
 このとき、QRコードのサイズやエラー訂正レベルを指定できます。
GUIの作成
生成したQRコードを表示するためのGUIを作成します。
 tkinterを使用して、テキスト入力エリア、生成ボタン、画像表示用ラベル、保存ボタンを配置します。
 生成ボタンをクリックすると、QRコードが生成され、画像表示用ラベルに表示されます。
保存機能の実装
保存ボタンをクリックすると、ファイル保存ダイアログが開きます。
 生成したQRコードを指定した場所にPNG形式で保存できます。
ウィンドウの設定とツールの起動
GUIのウィンドウサイズと位置を設定します。
 そして、メインループを実行してツールを起動します。
exeファイルへの変換
Pyinstallerを使ってPythonスクリプトをexeファイルに変換します。
 Pyinstallerをインストールした後、以下のコマンドを実行します。
pyinstaller --onefile --noconsole --icon=qr.ico qr_tool.py
このコマンドにより、単一のexeファイルが生成されます。
–onefile オプションを使用することで、必要なライブラリを含む単一の実行可能ファイルが作成されます。
–noconsole オプションを使用することで、コンソールウィンドウが表示されずにGUIのみが表示されます。
さらに、–icon オプションを使用してアイコンを適用しています。
このアイコンは、ChatGPTを用いてwebp形式の画像を作成し、GIMPでico形式に変換したものです。
exeファイル化のメリットには、以下のようなことがあります。
- 簡単な配布:Pythonがインストールされていない環境でも、exeファイルを実行するだけでツールを使用できます。
- セキュリティ面での安心感:自分で作成したツールを使うことで、情報漏洩のリスクを最小限に抑えられます。
- カスタマイズ性:必要な機能を自由に追加・変更できるため、自分に合ったツールを作ることができます。
- 学習効果:Pythonでツールを自作し、exeファイルにする過程で、プログラミングスキルを向上させることができます。
ちなみに、ChatGPTでは以下のプロンプトを入力して画像を生成しています。

QRコード生成ツールのアイコンを作成してください。
まとめ
出来上がったexeは、以下。

このexeを起動すると、次のようなGUIアプリが起動します。

個人的には、これで満足しています。
たかがQRコードでツールを開発するのは、時間の無駄とも感じるかもしれません。
でも、このツールの開発にかかった時間は30分未満です。
なぜなら、コードはChatGPTとClaude 3を用いて作成しているからです。
それなら、自作するのもアリだと思いませんか?
私は、仕様を伝えて、レビューして、テストしただけです。
本当に、コードを書く機会が減ってきています。
でも、これはこれで楽しいと言えます。
要件をまとめて伝えれば、すぐに望むモノが出来上がるわけですから。
あと、コードレビューとテストの機会は確実に増えていますけどね。
 
  
  
  
  




