【2026年9月最新】Pythonのrandomモジュールの使い方を完全解説|choice・sample・seedからセキュリティ注意点まで

【2026年9月最新】Pythonのrandomモジュールの使い方を完全解説|choice・sample・seedからセキュリティ注意点まで

Pythonで乱数(ランダムな値)を使いたいとき、多くの人が最初に手を伸ばすのが標準ライブラリのrandomモジュールです。random.randint()random.choice()は初心者向けの教材でもよく登場しますが、実は「どの関数を使うべきか」を正しく理解していないと、意図しないバグやセキュリティ上のリスクにつながることがあります。

この記事では、randomモジュールの基本関数を整理したうえで、初心者向け教材では見落とされがちなrandom.choices()とrandom.sample()の違いseed()による再現性の確保、そして最も重要な「パスワードやトークンの生成にrandomモジュールを使ってはいけない理由」まで、実務目線で踏み込んで解説します。最後には、Claude Codeを使ったテストデータ生成の効率化についても紹介します。

代表菅澤 代表菅澤
random.choice()やstringモジュールを組み合わせて「ランダムなパスワードを作る」というサンプルコードは、プログラミング入門サイトで頻繁に見かけます。ただ、実務でそのまま使うと危険なケースがあることは、意外と知られていません。
AI鬼管理山崎 AI鬼管理山崎
この記事を読めば、randomモジュールの基本的な使い方はもちろん、「どこまでがrandomの守備範囲で、どこからは別のモジュールに任せるべきか」という実務的な線引きが分かるようになります。
✔️random() / uniform() / randint()の違いと使い分け
✔️choice() / choices() / sample()の違い(重複あり・なしの区別)
✔️shuffle()の注意点と、seed()による再現性の確保
✔️パスワード・トークン生成にrandomを使ってはいけない理由とsecretsモジュール
✔️ランダム文字列生成の実践的なコード例
✔️Claude Codeを使ったテストデータ生成の効率化とGENAI社内の活用実例
AI社員AIKATA|月30万円の定額で御社の業務をまるごと巻き取ります(無料相談60分)御社が減らせる固定費は月いくらか|公式LINEで質問に答えるだけ(無料・約1分)
📌 この記事の結論
【2026年9月最新】Pythonのrandomモジュールの使い方を完全解説|choice・sample・seedからセキュリティ注意点まで
Pythonのrandomモジュールの基本関数(random/uniform/randint/choice/choices/sample/shuffle/seed)を解説。パスワード生成にrandomを使ってはいけない理由とsecretsモジュールとの使い分け、Claude Codeを使ったテストデータ生成も紹介します。

01 randomモジュールとは何か 疑似乱数を生成する標準ライブラリ

randomモジュールは、Pythonの標準ライブラリに含まれる、疑似乱数(コンピュータが計算によって作り出す、一見ランダムに見える数値)を生成するためのモジュールです。追加のインストールは不要で、import randomと書くだけですぐに使えます。

📚 用語解説

疑似乱数(ぎじらんすう):コンピュータが数式(アルゴリズム)によって計算的に生成する、統計的にはランダムに見える数値のこと。真の意味でランダム(物理現象などに基づく真性乱数)ではなく、同じ初期値(シード値)から計算を始めれば、毎回まったく同じ数列を再現できるという特徴を持つ。Pythonのrandomモジュールは「メルセンヌ・ツイスタ」というアルゴリズムを採用している。

ゲームのサイコロ処理、抽選、テストデータの生成、シミュレーションなど、randomモジュールの用途は多岐にわたります。まずは基本となる3つの関数から見ていきましょう。

02 基本の乱数取得:random・uniform・randint 3つの関数の違いを正確に理解する

2-1. random.random():0以上1未満の小数

import random

print(random.random())
# 0.7364258172645... (0.0以上1.0未満の浮動小数点数)

random.random()は引数を取らず、0.0以上1.0未満の浮動小数点数を返します。ここで得られる値を元に、他の多くの乱数関数が内部的に計算されています。

2-2. random.uniform(a, b):指定範囲の小数

import random

print(random.uniform(1.0, 10.0))
# 4.281839...(1.0以上10.0以下のいずれかの浮動小数点数)
💡 uniform()の端点(b)の扱いには注意

random.uniform(a, b)は「aからbの範囲」の値を返しますが、公式ドキュメントでも「浮動小数点の丸め誤差により、終端値bちょうどが返る場合と返らない場合がある」と説明されています。「bは絶対に含まれない」と断定せず、範囲の目安として捉えるのが正確な理解です。

2-3. random.randint(a, b):指定範囲の整数

import random

print(random.randint(1, 6))
# 1〜6のいずれかの整数(サイコロを想定した例)
⚠️ randint()は両端が含まれる(inclusive)

random.randint(a, b)はaとbの両方を含む範囲から整数を返します。似た関数のrandom.randrange(a, b)は逆にbを含まない(range()と同じ仕様)ため、「1〜10」を意図してrandrange(1, 10)と書くと9までしか出ない、という初心者が混同しやすい違いがあります。

関数戻り値の型範囲の指定方法端点の扱い
random.random()浮動小数点数固定(0.0〜1.0)0.0以上1.0未満
random.uniform(a, b)浮動小数点数a〜bを指定ほぼa以上b以下(丸め誤差の影響あり)
random.randint(a, b)整数a〜bを指定a以上b以下(両端含む)
random.randrange(a, b)整数a〜bを指定a以上b未満(range()と同じ)
代表菅澤 代表菅澤
randintとrandrangeの端点の違いは、実際のバグとして表面化しやすいポイントです。「1〜10のランダムな整数」が欲しいときに、うっかりrandrange(1, 10)と書いて10が出ないことに気づかない、というのはよくある話です。

03 リストからのランダム抽出:choice・choices・sample 重複あり・なしの違いを正しく使い分ける

3-1. random.choice():1つだけ選ぶ

import random

fruits = ['apple', 'banana', 'orange']
print(random.choice(fruits))
# 'banana' (3つの中からランダムに1つ)

3-2. random.choices():重複ありで複数選ぶ

import random

fruits = ['apple', 'banana', 'orange']
print(random.choices(fruits, k=5))
# ['banana', 'banana', 'apple', 'orange', 'banana']
# ※ 同じ要素が複数回選ばれることがある(重複あり)

# weightsで重み付けもできる
print(random.choices(fruits, weights=[10, 1, 1], k=5))
# appleが選ばれやすくなる(重みが大きいほど当選確率が上がる)

3-3. random.sample():重複なしで複数選ぶ

import random

fruits = ['apple', 'banana', 'orange', 'grape', 'melon']
print(random.sample(fruits, k=3))
# ['grape', 'apple', 'orange']
# ※ 同じ要素は二度選ばれない(重複なし)

📚 用語解説

復元抽出 / 非復元抽出:統計学の用語で、一度選んだ要素を「元に戻してから」次を選ぶ方式を復元抽出(重複あり)、「元に戻さず」次を選ぶ方式を非復元抽出(重複なし)と呼ぶ。random.choices()は復元抽出、random.sample()は非復元抽出にあたる。くじ引きで「引いたくじを戻すか戻さないか」の違いをイメージすると分かりやすい。

⚠️ choices()とsample()を混同すると起きるバグ

抽選会で「当選者を3人選ぶ」処理にrandom.choices()を使ってしまうと、同じ人が複数回当選する可能性があります。重複を許したくない用途では必ずrandom.sample()を使ってください。逆に、サイコロを5回振るシミュレーションのように「同じ目が複数回出てよい」場面ではchoices()が適切です。

関数重複主な用途
random.choice()(1件のみ取得)1つだけランダムに選びたいとき
random.choices(seq, k=n)あり(復元抽出)サイコロのシミュレーション、重み付き抽選
random.sample(seq, k=n)なし(非復元抽出)重複のない当選者選出、抜き取り検査のサンプリング

3-4. random.shuffle():リストの中身を入れ替える

import random

cards = ['A', 'B', 'C', 'D', 'E']
random.shuffle(cards)
print(cards)
# ['C', 'A', 'E', 'B', 'D'] (元のリストが直接並び替えられる)
⚠️ shuffle()は戻り値がNone、代入すると壊れる

random.shuffle()はリストを直接その場で並び替える(破壊的処理)関数で、戻り値は常にNoneです。cards = random.shuffle(cards)のように代入してしまうと、cardsの中身がNoneになって消えてしまいます。「シャッフルした新しいリストが欲しい」場合は、shuffle()ではなく後述のsample()で全件数を指定する方法を使います。

import random

cards = ['A', 'B', 'C', 'D', 'E']

# 元のリストを変えずに、シャッフル済みの新しいリストを得る方法
shuffled = random.sample(cards, k=len(cards))
print(cards)     # ['A', 'B', 'C', 'D', 'E'] (元のリストは変わらない)
print(shuffled)  # ['D', 'A', 'C', 'E', 'B'] (新しいシャッフル済みリスト)
AI鬼管理山崎 AI鬼管理山崎
shuffle()の「戻り値がNone」は、初心者だけでなく経験者でも気を抜くとやってしまうミスです。「その場で書き換える系の関数は戻り値を持たないことが多い」という感覚を身につけておくと、他の関数でも似た事故を防げます。
AI社員AIKATA|月30万円の定額で御社の業務をまるごと巻き取ります(無料相談60分)御社が減らせる固定費は月いくらか|公式LINEで質問に答えるだけ(無料・約1分)

04 seed()で乱数を固定・再現する テストやデバッグで「同じ乱数」を再現する方法

randomモジュールが生成する値は「疑似」乱数であるため、開始点(シード値)を固定すれば、何度実行してもまったく同じ結果を再現できます。この性質は、テストやデバッグの場面で非常に役立ちます。

import random

random.seed(42)
print(random.randint(1, 100))  # 82
print(random.randint(1, 100))  # 15

# 同じseed(42)からやり直すと、まったく同じ順番で同じ値が出る
random.seed(42)
print(random.randint(1, 100))  # 82 (1回目と同じ)
print(random.randint(1, 100))  # 15 (2回目と同じ)

📚 用語解説

シード値(seed):疑似乱数の計算を開始する際の「初期値」のこと。同じシード値を指定すれば、生成される乱数の順番は毎回まったく同じになる。テストコードで「ランダムな入力を使うが、実行するたびに結果が変わると再現性がなく困る」という場面で、seed()を使って乱数を固定するのが定石。

💡 テストコードでseed()を使う実務的な理由

「ランダムな要素を含む処理」をテストする場合、実行のたびに結果が変わってしまうと、バグの再現や修正確認が難しくなります。テストの冒頭でrandom.seed(固定値)を呼んでおくことで、乱数が絡む処理でも決まった結果を期待するテストコードが書けます。

⚠️ 本番のランダム処理にseed固定を残さない

デバッグ用にseed()を設定したまま本番コードに残してしまうと、常に同じ「ランダムな」結果しか出なくなるという不具合になります。抽選やゲームなど、本来毎回変わってほしい処理では、デバッグ後に必ずseed()の呼び出しを削除してください。

4-1. モンテカルロシミュレーションでの活用例

seed()による再現性は、モンテカルロシミュレーション(乱数を使って試行を大量に繰り返し、統計的な傾向を推定する手法)でも重要な役割を果たします。例えば、あるキャンペーンの当選確率を試算する場合を考えてみます。

import random

random.seed(1)

trials = 10000
win_count = 0

for _ in range(trials):
    if random.random() < 0.05:  # 当選確率5%と仮定
        win_count += 1

print(f'{trials}回試行して{win_count}回当選(実測確率: {win_count / trials:.2%})')
# 10000回試行して537回当選(実測確率: 5.37%)

📚 用語解説

モンテカルロシミュレーション:乱数を使って大量の試行を繰り返し、その結果の統計的な傾向から、理論的に解くのが難しい問題の近似解を求める手法。金融のリスク計算、在庫戦略の検証、ゲームバランスの調整など幅広い分野で使われる。random.seed()で試行の再現性を確保しておくと、パラメータを変えたときの効果の比較がしやすくなる。

このように、「同じ条件で何度も試行した場合の傾向」を調べたい業務シーンでは、seed()で再現性を確保しつつ、randomモジュールの各関数を組み合わせて試算するアプローチが実務でも活用されています。

代表菅澤 代表菅澤
モンテカルロシミュレーションと聞くと難しそうに感じますが、やっていることは「乱数を使った試行をひたすら繰り返して平均を見る」だけです。randomモジュールの基本さえ押さえていれば、十分に自分の手で組めるようになります。

05 【重要】パスワード生成にrandomを使ってはいけない理由 セキュリティ用途にはsecretsモジュールを使う

プログラミング入門記事では、random.choice()と文字列を組み合わせて「ランダムなパスワードを生成する」サンプルコードがよく紹介されます。しかし、この方法を実際のサービスのパスワードやAPIトークン、パスワードリセット用のURLなどに使うのは危険です。

5-1. randomモジュールが「予測可能」である理由

Pythonのrandomモジュールは、メルセンヌ・ツイスタという高速なアルゴリズムで疑似乱数を生成しています。統計的な均一性には優れていますが、暗号学的には安全ではありません。十分な数の出力を観測されると、内部状態を推測され、以降に生成される値を予測されてしまう可能性があることが知られています。

📚 用語解説

メルセンヌ・ツイスタ(Mersenne Twister):Pythonのrandomモジュールが採用している疑似乱数生成アルゴリズム。周期が非常に長く、統計的な品質にも優れているためシミュレーションやゲームの用途では広く使われている。ただし、生成される数列にはアルゴリズム由来の規則性があり、十分な数の出力から内部状態を復元できてしまうため、暗号やセキュリティ用途には適さないとされている。

5-2. セキュリティ用途にはsecretsモジュールを使う

パスワード、トークン、セッションID、パスワードリセット用のURLなど、「他人に予測されては困る」値を生成する場合は、Python標準ライブラリのsecretsモジュールを使います。secretsモジュールはOSが提供する暗号学的に安全な乱数源を利用しており、この目的のために標準ライブラリ側でも明確に推奨されています。

import secrets
import string

# 安全なランダムパスワードを生成する例
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for _ in range(12))
print(password)
# 例: 'aB3xQ9mK7pLz'

# 安全なトークンを生成する(URLセーフな文字列)
token = secrets.token_urlsafe(32)
print(token)
用途使うべきモジュール理由
ゲームのサイコロ・くじ引きrandom予測されても実害がない、速度と手軽さを優先してよい
シミュレーション・統計処理random再現性(seed固定)が必要なことも多く、randomが適している
テストデータの生成randomダミーデータなので、予測可能性は問題にならない
パスワード・トークンの生成secrets予測されると不正アクセスなど実害につながるため
パスワードリセット用URLsecrets第三者に推測されると本人以外がリセットできてしまうため
⚠️ 「動いているから安全」ではない

random.choice()で生成したパスワードも、見た目上はランダムに見え、機能としては正常に動作します。しかし「予測可能かどうか」という安全性の観点は、動作確認だけでは検出できません。パスワード・トークン生成のコードを見かけたら、使われているのがrandomかsecretsかを必ず確認する習慣をつけてください。

代表菅澤 代表菅澤
これは弊社が実際にコードレビューで指摘することがあるポイントです。「動いているから」という理由だけでrandomモジュールを使ったパスワード生成コードがそのまま本番に残ってしまうケースは、決して珍しくありません。

06 ランダム文字列生成の実践例 stringモジュールとの組み合わせ

セキュリティ要件が絡まない用途(テストデータのダミーIDなど)であれば、randomモジュールとstringモジュールを組み合わせたランダム文字列生成は今でも実務でよく使われます。

import random
import string

def generate_dummy_id(length=8):
    chars = string.ascii_uppercase + string.digits
    return ''.join(random.choices(chars, k=length))

for _ in range(3):
    print(generate_dummy_id())
# 例:
# 'K3F9XQ2P'
# 'A7B2ZZ81'
# 'M0QW5T4C' 

📚 用語解説

string.ascii_uppercase / string.digits:Python標準ライブラリのstringモジュールが提供する定数。ascii_uppercaseは大文字アルファベット26文字('ABCDEFGHIJKLMNOPQRSTUVWXYZ')、digitsは数字10文字('0123456789')を表す文字列。ランダムな識別子を組み立てる際の元となる文字集合として頻繁に利用される。

この例のように「重複しても実害がない、セキュリティに関わらないダミーデータ」を作る場合は、random.choices()で十分です。逆に「他人に推測されると困る」文脈が少しでもあれば、前章のsecretsモジュールに切り替えるという判断を徹底してください。

AI鬼管理山崎 AI鬼管理山崎
コードだけを見ると、randomを使ったランダム文字列生成もsecretsを使ったトークン生成も、見た目はよく似ています。だからこそ「何のために生成しているのか」という目的から逆算して、使うモジュールを選ぶ習慣が大切です。
AI社員AIKATA|月30万円の定額で御社の業務をまるごと巻き取ります(無料相談60分)御社が減らせる固定費は月いくらか|公式LINEで質問に答えるだけ(無料・約1分)

07 よくある間違い・チェックリスト 実装前に確認しておきたいポイント

✔️random.randint()とrandom.randrange()の端点(bを含むか含まないか)を混同していないか
✔️random.choices()(重複あり)とrandom.sample()(重複なし)を目的に合わせて選べているか
✔️random.shuffle()の戻り値(None)を変数に代入して中身を消してしまっていないか
✔️デバッグ用のrandom.seed()を本番コードに残したままにしていないか
✔️パスワード・トークンの生成に、secretsではなくrandomを使っていないか

特に最後の項目は、コードが正常に動作するため見過ごされがちです。「機能テストは通っているのに、セキュリティレビューで指摘される」典型的なパターンなので、パスワード・トークン生成のコードを書く・レビューする際は必ず確認してください。

予測されても
問題ないか?

ゲーム・統計・
テストデータ
Yes → random
choice/choices/
sample/shuffle
No → secrets
パスワード・
トークン生成

08 【独自】Claude Codeを使ったテストデータ生成・シミュレーション効率化 AIコーディングアシスタントに任せられる範囲を見極める

randomモジュールの代表的な用途の1つがテストデータの生成です。しかし、「氏名・住所・注文金額・在庫数がそれぞれ現実的な分布になっているダミーデータを100件作る」といった要件になると、手作業でコードを組むのは意外と手間がかかります。

ここで役立つのが、Claude CodeのようなAIコーディングアシスタントです。「こういう構造・分布のテストデータを、randomモジュールを使って生成するスクリプトを書いて」と依頼すると、要件に合わせたコードをその場で組み立ててくれます。

依頼内容AIへの指示例
基本的なダミーデータ生成「氏名・年齢・購入金額を持つダミー顧客データを100件、randomで生成するスクリプトを書いて」
重み付きのシミュレーション「発生確率が異なる3種類のイベントを1000回試行するシミュレーションを、random.choices()の重み付けで実装して」
再現性のあるテストケース「このテストコードに、乱数の結果を固定するseed()を追加して」
セキュリティ観点のチェック「このコードでパスワード生成にrandomモジュールが使われていないか確認して」
Step 1
欲しいテストデータの
条件をAIに伝える
Step 2
生成スクリプトの
たたき台を受け取る
Step 3
分布・件数を
調整して実行
Step 4
セキュリティ用途は
secretsに置換
💡 AIに任せた後もセキュリティ観点の確認は人間の役目

AIが提示するコードも、テストデータ生成の文脈で書かれていれば当然randomモジュールを使います。そのコードをうっかりパスワード生成など別の用途に転用しないよう、最終的なチェックは人間が行うようにしましょう。

AI鬼管理山崎 AI鬼管理山崎
テストデータ生成のような「地味だが時間がかかる」作業こそ、AIに任せる価値が大きい領域です。ただし、この記事で説明したrandomとsecretsの使い分けのような安全性の判断は、最終的には人間が確認する意識を持っておくべきだと思います。

09 【独自データ】GENAI社内でのPython活用実例 Claude Max 20xプランでの活用実態

弊社(株式会社GENAI)では、Claude Max 20xプラン(月額$200・約30,000円)を契約し、営業・広告運用・記事制作・経理・秘書業務まで、社内のあらゆる業務でPythonスクリプトを活用しています。

業務領域主な用途randomモジュールの使いどころ
広告運用A/Bテスト設計のシミュレーションrandom.choices()で配信パターンの重み付けをシミュレーション
ブログ記事サムネイル画像の重複回避ロジックrandom.sample()で未使用の候補から選択
開発・テストデモ環境用のダミーデータ生成random + stringでテスト用の識別子を大量生成

一方で、顧客向けサービスの認証まわり(パスワード再設定用のトークンなど)は、この記事で説明した理由からsecretsモジュールに統一するようルール化しています。「どちらのモジュールを使うか」を毎回個別に判断するのではなく、用途ごとにあらかじめ方針を決めておくことで、レビューの手間を減らしています。

⚠️ 数値の注意書き

上記は弊社での活用例であり、業種・業態によって最適な使い分けは異なります。あくまで参考情報としてご覧ください。

代表菅澤 代表菅澤
弊社では「AI鬼管理」というサービスで、こうした業務自動化スクリプトの設計から、Claude Codeを使ったコードレビューの仕組み作りまで支援しています。地味なようでいて、こうした基礎の使い分けが後々のトラブル防止に直結すると考えています。
AI社員AIKATA|月30万円の定額で御社の業務をまるごと巻き取ります(無料相談60分)御社が減らせる固定費は月いくらか|公式LINEで質問に答えるだけ(無料・約1分)

10 まとめ randomモジュールを正しく使い分ける

✔️random.random() / uniform() / randint()で基本的な乱数を取得できる
✔️randintは両端を含む(inclusive)、randrangeは終端を含まないという違いに注意
✔️choices()は重複あり、sample()は重複なしで複数要素を選ぶ
✔️shuffle()の戻り値はNone、代入すると中身が消える
✔️seed()で乱数を固定すれば、テストやデバッグで結果を再現できる
✔️パスワード・トークンなど予測されると困る値には、randomではなくsecretsモジュールを使う
✔️Claude CodeなどのAIを使うと、テストデータ生成のようなコードを効率的に組み立てられる

randomモジュールは手軽に使える便利なツールですが、「重複の有無」「戻り値の型」「再現性」「セキュリティ上の安全性」といった性質を正しく理解しているかどうかで、コードの品質に大きな差が出ます。特にセキュリティに関わる用途でsecretsモジュールへの切り替えを意識できているかは、実務のコードレビューでも重要なチェックポイントです。

弊社では、こうした基礎的な技術判断を含めて、Claude Codeを活用した業務自動化・システム開発の設計から伴走支援まで行っています。「社内のコード品質を底上げしたい」という方は、ぜひ一度ご相談ください。

コード品質の底上げ・Claude Code導入も、AI鬼管理が伴走します

randomとsecretsの使い分けのような基礎判断の積み重ねが、システム全体の信頼性を左右します。
AI鬼管理では、Claude Codeを活用した業務自動化の設計から、社内エンジニア以外のメンバーへの定着支援まで対応しています。

AI鬼管理山崎 AI鬼管理山崎
「社内のコードレビュー体制を整えたいが、何を基準にすればいいか分からない」というご相談も多くいただきます。まずは無料相談で、自社に合った進め方を一緒に考えましょう。

ここから先の進め方は、大きく2つあります。

自社で回せるようになりたい方は、AI鬼管理でClaude Code/Codexの使い方から業務設計・社内定着まで伴走を受けながら、社内に仕組みを作る道があります。

覚えるより任せたい方は、AI社員AIKATAでこの記事のような定型業務を丸ごと預ける道があります。料金は月30万円の月額定額、追加費用は0円です。

どちらが合うかは、業務量と社内体制次第です。無料相談・無料適合診断で、貴社の場合はどちらが向くかからご相談いただけます。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI鬼管理 — Claude Code導入支援トレーニング

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

AI社員AIKATA — 定型業務の丸ごと代行

業務を丸ごと任せたい方へ

AI社員AIKATA

請求処理・データ入力・問い合わせ対応などの定型業務を、AI×人の品質管理体制で丸ごと代行。月30万円の定額でまかせ放題、日々は成果物を承認するだけ。

よくある質問

Q. random.randint()とrandom.randrange()の違いは何ですか?

A. random.randint(a, b)はaとbの両方を含む範囲から整数を返します。一方random.randrange(a, b)はrange()と同じ仕様で、bを含まない範囲から整数を返します。「1〜10」を意図してrandrange(1, 10)と書くと9までしか出ない点に注意が必要です。

Q. random.choices()とrandom.sample()はどう使い分けますか?

A. random.choices()は重複ありで複数要素を選ぶ関数で、同じ要素が複数回選ばれることがあります。random.sample()は重複なしで選ぶ関数です。抽選会の当選者選びのように重複を避けたい場合はsample()、サイコロを複数回振るシミュレーションのように重複してよい場合はchoices()を使います。

Q. random.shuffle()の戻り値をprintしても何も表示されないのはなぜですか?

A. random.shuffle()はリストを直接その場で並び替える関数で、戻り値は常にNoneだからです。シャッフルした結果を確認したい場合は、shuffle()を実行した後のリストそのものをprintしてください。変数に代入すると中身がNoneになって消えてしまうので注意が必要です。

Q. なぜパスワード生成にrandomモジュールを使ってはいけないのですか?

A. Pythonのrandomモジュールはメルセンヌ・ツイスタというアルゴリズムを使っており、統計的な品質は高いものの暗号学的には安全ではありません。十分な数の出力を観測されると内部状態を推測され、生成される値を予測される可能性があります。パスワードやトークンなど予測されると困る用途には、暗号学的に安全なsecretsモジュールを使ってください。

Q. seed()を使うとどんなメリットがありますか?

A. 同じシード値を指定すれば、生成される乱数の順番を毎回同じにできるため、テストやデバッグで結果を再現しやすくなります。ランダムな要素を含む処理のテストコードを書く際、seed()で乱数を固定しておくことで、実行結果が安定した検証が可能になります。

Q. テストデータの生成にrandomモジュールを使うのは問題ありませんか?

A. 問題ありません。テストデータやダミーデータのように「予測されても実害がない」用途であれば、randomモジュールで十分です。セキュリティ上の注意が必要になるのは、パスワードやトークンなど、他人に予測されると実際の被害につながる値を生成する場合に限られます。

AIAI鬼管理

AI鬼管理/AI社員AIKATAへのお問い合わせ

この記事を読んで気になった方へ。
専門スタッフが、御社に最適な
業務自動化・業務代行プランを無料でご提案します。

サービスを選択してください

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年9月11日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。