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を用いて作成しているからです。
それなら、自作するのもアリだと思いませんか?
私は、仕様を伝えて、レビューして、テストしただけです。
本当に、コードを書く機会が減ってきています。
でも、これはこれで楽しいと言えます。
要件をまとめて伝えれば、すぐに望むモノが出来上がるわけですから。
あと、コードレビューとテストの機会は確実に増えていますけどね。