本記事では、当サイト内で学んできたPythonのGUIライブラリであるTkinterを使い、random
とstring
を活用したパスワード生成アプリの開発を行います。これまで学んできた知識を活かし、実際に動作するアプリを作成することで、より深い理解を目指します。コードの解説を通じて、ランダムなパスワード生成の仕組みや、GUIアプリの作成方法について整理していきます。
ランダムなパスワード生成とは
ランダムなパスワード生成とは、コンピュータを使って予測不可能な文字列を自動的に作成することです。これにより、強固なパスワードを簡単に作成でき、セキュリティを高めることができます。
パスワードの安全性は、使用する文字の種類や長さによって決まります。一般的に、以下のような要素を含めることで、より強固なパスワードを作成できます。
- 英大文字(A〜Z)
- 英小文字(a〜z)
- 数字(0〜9)
- 記号(@, #, $, %, など)
今回使用するモジュール
ランダムなパスワードを生成するために、以下のPython標準ライブラリを使用します。
random
:ランダムな値を生成するモジュールstring
:英数字や記号などの文字列操作を行うモジュールtkinter
:GUI(Graphical User Interface)を作成するためのモジュール
random
とstring
を組み合わせることで、指定された条件に基づいたランダムな文字列を作成できます。また、tkinter
を活用してGUIアプリとして動作させることで、視覚的に分かりやすく、使いやすいツールを作成できます。
今回作成するパスワード生成アプリの概要
今回作成するアプリは、ユーザーが入力した条件に基づいてランダムなパスワードを生成するGUIアプリです。以下の機能を実装します。
- パスワードの長さを指定:ユーザーが入力した文字数でパスワードを生成
- オプション選択による条件設定:チェックボックスを使い、パスワードの要素を選択可能
- 数字を含むパスワード:数値を含めるかどうかを選択
- 先頭を大文字にするパスワード:先頭の文字を必ず英大文字にする
- 記号を含むパスワード:特殊文字(@, #, $, % など)を含めるかどうかを選択
- 生成されたパスワードをクリップボードにコピー:ボタンを押すだけでパスワードをコピーできる機能
ランダムなパスワードを生成する仕組み
Pythonでは、ランダムな値を生成するためのrandom
モジュールを利用します。このモジュールを使うことで、特定の範囲内でランダムな文字を選び、組み合わせることができます。
以下のコードは、ランダムなパスワードを生成する基本的な処理です。
import random
import string
def generate_password(length=12):
characters = string.ascii_letters + string.digits + string.punctuation
return ''.join(random.choice(characters) for _ in range(length))
print(generate_password())
このコードを実行することで、文字数12の大文字,小文字,数字,記号を含むパスワードが生成されます。

コードの解説
random.choice(characters)
:文字列characters
の中からランダムに1文字を選ぶstring.ascii_letters
:英大文字と英小文字を含むstring.digits
:数字を含むstring.punctuation
:記号を含む
Tkinterでランダムパスワード生成アプリを作成
ここからは、Tkinterを使ってランダムなパスワードを生成するGUIアプリを作成します。ユーザーが指定した条件に応じて、適切なパスワードを生成する仕組みを実装します。
パスワード生成アプリのコード
import tkinter as tk
import random
import string
def generate_password():
if not length_entry.get().isdigit():
result_label.config(text="数字を入力してください")
return
length = int(length_entry.get())
include_digits = digits_var.get()
include_symbols = symbols_var.get()
capitalize_first = capitalize_var.get()
characters = string.ascii_lowercase
if include_digits:
characters += string.digits
if include_symbols:
characters += string.punctuation
password = ''.join(random.choice(characters) for _ in range(length))
if capitalize_first and password:
password = random.choice(string.ascii_uppercase) + password[1:]
result_label.config(text=password)
def copy_to_clipboard():
root.clipboard_clear()
root.clipboard_append(result_label.cget("text"))
root.update()
# メインウィンドウの作成
root = tk.Tk()
root.geometry("500x500")
root.title("ランダムパスワード生成アプリ")
# UI要素の作成
length_label = tk.Label(root, text="パスワードの長さ:")
length_label.pack(pady=5)
length_entry = tk.Entry(root, validate='key', validatecommand=(root.register(lambda P: P.isdigit() or P == ""), '%P'))
length_entry.pack(pady=5)
digits_var = tk.BooleanVar()
symbols_var = tk.BooleanVar()
capitalize_var = tk.BooleanVar()
digits_check = tk.Checkbutton(root, text="数字を含める", variable=digits_var)
digits_check.pack(pady=5)
symbols_check = tk.Checkbutton(root, text="記号を含める", variable=symbols_var)
symbols_check.pack(pady=5)
capitalize_check = tk.Checkbutton(root, text="先頭を大文字にする", variable=capitalize_var)
capitalize_check.pack(pady=5)
generate_button = tk.Button(root, text="生成", command=generate_password)
generate_button.pack(pady=10)
copy_button = tk.Button(root, text="コピー", command=copy_to_clipboard)
copy_button.pack(pady=10)
result_label = tk.Label(root, text="")
result_label.pack(pady=20)
# アプリの実行
root.mainloop()
プログラムの概要
本アプリは以下の機能を持っています:
- パスワードの長さを指定 できる
- 数字や記号の有無を選択 できる
- 先頭を大文字にするオプション を用意
- 生成したパスワードを表示
- コピー機能付き
コードの解説
必要なライブラリのインポート
import tkinter as tk
import random
import string
tkinter
はGUI(グラフィカルユーザーインターフェース)を作成するためのライブラリrandom
はランダムな値を生成するために使用string
は英字・数字・記号などの文字列を扱うために使用
パスワード生成関数
def generate_password():
if not length_entry.get().isdigit():
result_label.config(text="数字を入力してください")
return
length = int(length_entry.get())
include_digits = digits_var.get()
include_symbols = symbols_var.get()
capitalize_first = capitalize_var.get()
characters = string.ascii_lowercase
if include_digits:
characters += string.digits
if include_symbols:
characters += string.punctuation
password = ''.join(random.choice(characters) for _ in range(length))
if capitalize_first and password:
password = random.choice(string.ascii_uppercase) + password[1:]
result_label.config(text=password)
length_entry.get()
から取得した値を整数に変換してパスワードの長さを決定
数値が入力されない状態で生成ボタンを押されたら「数字を入力してください」を出力- チェックボックスの状態に応じて 数字 や 記号 を含めるか選択
- 指定された文字種の中からランダムに選び、指定された長さのパスワードを作成
- 先頭を大文字にするオプション が有効なら、最初の文字を大文字に変更
result_label.config(text=password)
で生成したパスワードをラベルに表示
クリップボードにコピーする関数
def copy_to_clipboard():
root.clipboard_clear()
root.clipboard_append(result_label.cget("text"))
root.update()
clipboard_clear()
でクリップボードをクリアclipboard_append()
で生成したパスワードをクリップボードに追加update()
を実行してクリップボードの更新を確定
メインウィンドウの作成
root = tk.Tk()
root.geometry("500x500")
root.title("ランダムパスワード生成アプリ")
tk.Tk()
でウィンドウを作成geometry("500x500")
でウィンドウサイズを指定title("ランダムパスワード生成アプリ")
でタイトルを設定
各UI要素の作成
length_label = tk.Label(root, text="パスワードの長さ:")
length_label.pack(pady=5)
length_entry = tk.Entry(root, validate='key', validatecommand=(root.register(lambda P: P.isdigit() or P == ""), '%P'))
length_entry.pack(pady=5)
Label
でテキスト表示Entry
で数値入力を受け付ける(数値以外の入力を防止)
オプション選択のチェックボックス
digits_var = tk.BooleanVar()
symbols_var = tk.BooleanVar()
capitalize_var = tk.BooleanVar()
digits_check = tk.Checkbutton(root, text="数字を含める", variable=digits_var)
digits_check.pack(pady=5)
symbols_check = tk.Checkbutton(root, text="記号を含める", variable=symbols_var)
symbols_check.pack(pady=5)
capitalize_check = tk.Checkbutton(root, text="先頭を大文字にする", variable=capitalize_var)
capitalize_check.pack(pady=5)
BooleanVar()
を使って、チェックボックスの状態を管理- 各チェックボックスを作成し、ウィンドウに配置
ボタンと結果表示
generate_button = tk.Button(root, text="生成", command=generate_password)
generate_button.pack(pady=10)
copy_button = tk.Button(root, text="コピー", command=copy_to_clipboard)
copy_button.pack(pady=10)
result_label = tk.Label(root, text="")
result_label.pack(pady=20)
Button
を作成し、クリック時に関数を実行Label
でパスワードを表示
アプリの実行
root.mainloop()
mainloop()
でウィンドウを開き、ユーザーの操作を受け付ける
まとめ
このプログラムでは、Tkinter
を用いてシンプルなランダムパスワード生成アプリを作成しました。パスワードの長さや文字種の選択、コピー機能 など、実用的な機能を備えています。カスタマイズも容易なので、より複雑なパスワード生成機能を追加することも可能です。
例えば:
- パスワードの強度評価(簡単・普通・強力など)
- 特定の記号を除外する機能
- クリップボードにコピーした際に通知を表示する
などの機能を追加すると、さらに便利なアプリになります。興味があればぜひ試してみてください!