Pythonで安全パスワードを自動生成|3行サンプル付き

    Pythonでつくるパスワード生成アプリ ハナマルコ アイキャッチ

    こんにちは、Python初心者のハナマルコです!

    皆さんパスワード管理どうしてますか?
    パスワードアプリ使ってるよ!紙にメモしてる。全部同じパスワードにしてる(ソレ危険です)
    そもそもパスワードを考えるのが面倒ですよね。

    今回は「パスワード生成プログラム」にチャレンジしてみました。最初はまったくのゼロ知識で、正直なところ「プログラムでパスワードってどうやって作るの?そんなの無理じゃない?」と思っていました。

    でも、チャッピー先生に聞きながらステップを踏んでいくうちに、なんと!

    • ランダムな文字列の生成
    • 文字と数字の組み合わせ
    • 自由に長さを指定して生成

    という機能をもつパスワードジェネレーターが完成したのです!

    その過程を、同じような初心者の方に向けてご紹介します。

    でも途中でエラーが出て焦ったこともありました…汗
    その時のやり取りも含めて、どうやって解決したのかも振り返ってみます。

    基本的な計算から始めたい方:
    Pythonで家計簿と残業代を自動計算

    実践シリーズを初回から読みたい方:
    Pythonって何?初心者にやさしく解説

    この記事の内容
    • randomモジュールの使い方がわかる
    • stringモジュールの意味がわかる
    • 自由に文字数を指定してランダムなパスワードが作成できる
    読みたいところに飛べる目次

    ステップ1:まずは「適当な文字列」を作ってみよう!

    ハナマルコ

    Pythonでパスワードを考えてくれるランダムな文字列を出力するコードが知りたいです!

    チャッピー先生

    了解しました。ランダムな文字列を出力するコードはこちらです

    import random
    import string
    
    # ランダムな8文字の文字列を生成
    password = ''.join(random.choices(string.ascii_letters, k=8))
    print("生成されたパスワード:", password)

    # 実行結果
    生成されたパスワード: uHQjSezt

    ハナマルコ

    わーすごい、なんかパスワードっぽい!実行するたびに違うパスワードができるよ

    コードの解説

    初心者にわかりやすく解説します。

    このコードの解説

    import random 今回の場合は複数の文字からランダムに何個か選ぶ
    import string 英語の文字や記号などのセットを使う

    password = ''.join(random.choices(string.ascii_letters, k=8))
     ランダムに選ばれた8個のアルファベットをくっつけて、1つの文字列にしています。
    password という名前の変数に入れています。(名前は自由に変更可能)
    print("生成されたパスワード:", password) 生成したパスワードを画面に表示する

    もっと複雑なコードなのかなと思ってたけど、案外簡単なコードで驚きです。

    random モジュールでランダムに文字を選ぶ

    string モジュールでアルファベットを使えるようにする

    join()でバラバラの文字を1つのパスワードにまとめる

    print()で結果を表示するメージで覚えよう

    イメージとしては

    • randomサイコロやくじ引きが入った箱
    • stringアルファベットや数字がぎっしり詰まった棚

    それを「import(取り出す)」することで、コードの中で使えるようになります。

    ステップ2:文字+数字のパスワードにしたい!

    ハナマルコ

    文字だけじゃなくて数字も入れたい!Pythonならできるよね?

    チャッピー先生

    はい、もちろんできます

    import random
    import string
    
    # 英字と数字を含む文字列を生成
    characters = string.ascii_letters + string.digits
    password = ''.join(random.choices(characters, k=8))
    print("生成されたパスワード:", password)

    # 実行結果
    生成されたパスワード: R9t3aZ1q

    ハナマルコ

    いいね、ちゃんと数字が入ってる

    コードの解説

    このコードの解説

    characters = string.ascii_letters + string.digits 
     英字(アルファベット)と数字を1つにまとめたセットを作る

    string.ascii_lettersこれは英字(A〜Z と a〜z)が全部入っているセットです。

    中身はこんな感じ:「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」

    • 小文字 a〜z
    • 大文字 A〜Z
      が全部そろっています!

    string.digits これは数字(0〜9)のセットです。

    中身はこんな感じ:「0123456789」

    + で足す。

    文字列どうしをくっつける(連結する)という意味です。

    つまりcharactersの中身は、「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789」となります。

    Googleアカウントのセキュリティ強化も重要:
    Googleが急ぐパスキーの理由を初心者向けに解説

    もっと複雑なツールに挑戦したい方:
    PythonとスプレッドシートでTODO管理

    ステップ3:長さを指定できるようにしたい!

    サイトやサービスでパスワード登録するときに、〇文字以上に設定してくださいってありますよね。

    せっかくならパスワードを設定するときに、英数字(大文字・小文字)を含む自由に長さを決められるようにしたいですね。

    ハナマルコ

    パスワードの長さを指定できるようにコードを考えてください

    チャッピー先生

    はい、わかりました

    import random
    import string
    
    length = input("パスワードの長さを入力してください: ")
    
    characters = string.ascii_letters + string.digits
    password = ''.join(random.choices(characters, k=length))
    print("生成されたパスワード:", password)

    「なるほど、input()で長さを聞いて、それを使うんだな」と思って、そのまま実行してみたのですが……

    謎のエラー発生!

    Google Colab実行エラー
    Google Colab実行エラー

    えっ……?なにこれ?パニックです・・・私なにかした?

    ハナマルコ

    チャッピー先生、助けて~!

    チャッピー先生

    はい、わかりました

    TypeError: 'str' object cannot be interpreted as an integerエラーメッセージについて解説します。

    input()で入力した数字は「数字っぽく見えても実は文字」なんです。
    たとえば、5桁のパスワードを作るつもりで5と入力したのですが、実は"5" という文字列になっていて、それをそのまま k=length に使うと Python が「えっ?これ文字じゃん!」と困ってしまうのです。

    input()で数字を入力しても、Pythonは文字として受け取ります。
    でも、random.choices() では本物の数字(整数)が必要です。

    解決方法

    int()を使って、文字を数字に変えてあげればOKです!

    修正したコードがこちらです。

    import random
    import string
    
    length = int(input("パスワードの長さを入力してください: "))
    characters = string.ascii_letters + string.digits
    password = ''.join(random.choices(characters, k=length))
    print("生成されたパスワード:", password)

    # 実行結果
    パスワードの長さを入力してください: 5
    生成されたパスワード: 07eR2

    # 実行結果
    パスワードの長さを入力してください: 25
    生成されたパスワード: HY5nzRKO5buYTpLY4C5kghknc

    ちゃんと指定した長さで自動でパスワードを作ってくれました。ちょっと感動しました!

    なぜChatGPTは間違ったコードを教えたのか?

    • 質問があいまいだった
      「何文字のパスワードか」を明確に伝えなかったため、ChatGPTが想定で補ってしまった。
    • 初心者向けの補足が抜けていた
      input()が文字列(str)になることと、int()で数字に変える必要があることを説明し忘れていた。
    • コードの一部だけを参考にしてしまった
      よくあるサンプルコードの一部をそのまま使ってしまい、細かい部分が抜けていた。
    • 完璧ではないAIだから
      ChatGPTはとても賢いけれど、たまにミスをすることもある。
      だから「おかしいな?」と思ったら確認することが大事!

    まとめ

    パスワードを自動で作るなんて難しそう…と思ってたけど、ChatGPTに聞いてみたら意外とできちゃいました!

    途中でエラーが出て焦ったけど、それも含めて楽しい経験でした!

    今回の学びポイント

    • random モジュールでランダムな動きができる
    • string モジュールには便利な文字セットがたくさん
    • input() でユーザーに入力してもらえる
    • エラーが出ても、落ち着いて原因を探せばOK!

    「わからなくても、聞けばいいんだ」って気持ちで気軽にトライしてみてください。

    最後まで読んでいただき、ありがとうございました!

    実践シリーズで学習を続ける:
    Pythonって何?初心者にやさしく解説
    Pythonで割り勘と時間計算アプリ
    Pythonの変数とは?初心者向け入門
    Pythonのif文で条件分岐を学ぼう
    Pythonのfor文とrangeの使い方を学ぶ

    実践シリーズはまだ続きます!次回もお楽しみに。

    当ブログは基本的にリンクフリーです。リンクを行う場合の許可や連絡は不要です。

    Pythonでつくるパスワード生成アプリ ハナマルコ アイキャッチ

    この記事が気に入ったら
    いいね または フォローしてね!

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    読みたいところに飛べる目次