【2026年7月最新】C言語の乱数(rand/srand)完全ガイド|範囲指定・初期化・実践サンプルとClaude Code活用術
この記事の内容
C言語でゲームやシミュレーションを作っていると、必ず直面するのが「乱数の使い方」です。「rand()を使えばいい」とは知っているのに、「なぜか毎回同じ数字が出る」「1〜6の範囲に収めるにはどう書けばいい?」と詰まってしまった経験はありませんか。
C言語の乱数生成にはrand()とsrand()という2つの関数が使われますが、初学者がつまずきやすいのは「初期化なしでは毎回同じ値が返る」という仕様と、「範囲を指定するための計算式」の2点です。この記事では、rand/srandの仕組みを根本から理解したうえで、サイコロ・じゃんけん・配列シャッフルなど実践コード7つ以上を紹介します。
さらに後半では、Claude Codeを使ってC言語コードを自動生成する方法も解説します。「C言語のコードをAIに書かせる」という選択肢を知っておくことで、プログラミング学習も業務開発も大幅に効率化できます。
01 BASICS 乱数とは何か:真の乱数と疑似乱数の違い C言語のrand()を正しく使うためにまず知っておくべき基礎知識
乱数とは、ランダム(無作為)に生成される数のことです。ゲームのサイコロ・くじ引き・シミュレーション・暗号化など、コンピュータプログラムで「ランダムさ」が必要なあらゆる場面で使われます。しかし、コンピュータが生成する乱数は、厳密に言うと「真の乱数」ではなく「疑似乱数」です。
📚 用語解説
真の乱数(True Random Number):完全にランダムで、予測不可能な乱数。物理的なノイズ(CPU温度の揺らぎ・マウスの動き・大気ノイズなど)を元に生成される。暗号鍵の生成など、セキュリティが重要な場面で使われる。LinuxではOS がエントロピーを集めて /dev/urandom 等で提供する。
📚 用語解説
疑似乱数(Pseudo-Random Number):アルゴリズムによって計算で生成される「ランダムに見える数列」。同じシード(初期値)を与えれば、必ず同じ数列が再現される。C言語のrand()が生成するのはこの疑似乱数。統計的にはランダムに見えるが、原理的には予測可能。
C言語のrand()関数は線形合同法(LCG: Linear Congruential Generator)というアルゴリズムで動作しています。前の値に特定の係数を掛けて、特定の数で割った余りを次の値とする、というシンプルな計算を繰り返しています。
📚 用語解説
シード(Seed):疑似乱数生成の「初期値」。同じシードからは必ず同じ乱数列が生成される。srand()関数でシードを設定する。初期化なし(srand未呼び出し)の場合は、シードが固定値(通常1)に設定されるため、毎回同じ乱数列が返る。
重要なポイントを確認しておきましょう。C言語のrand()は、シード値が決まると生成される数列は完全に決定論的(deterministic)です。つまり、シード=1なら常に「41, 18467, 6334, 26500, ...」という同じ数列が生成されます。これが「初期化しないと毎回同じ数が出る」現象の原因です。
srand()で設定
未設定ならシード=1
前の値×係数+加数
を決まった数で割る
0〜RAND_MAX
の整数値
今の値を次の計算の
「前の値」として保持
02 RAND FUNCTION rand()関数の基本:RAND_MAXとstdlib.h 乱数生成の中心となるrand()の仕様を正確に把握する
C言語のrand()関数は、<stdlib.h>ヘッダをインクルードすることで使えます。この関数は呼び出すたびに0からRAND_MAXまでの整数をひとつ返します。
📚 用語解説
RAND_MAX:rand()関数が返す乱数の最大値。stdlib.hで定義されるマクロ定数。C言語の規格ではRAND_MAXは少なくとも32767以上であることが保証されているが、多くの環境では2,147,483,647(2^31-1)または32767(2^15-1)になる。Linuxではgcc使用時は2,147,483,647が一般的。
2-1. rand()の最も基本的な使い方
#include#include /* rand(), RAND_MAXを使うために必要 */ int main(void) { int i; /* rand()で5個の乱数を生成して表示 */ for (i = 0; i < 5; i++) { printf("乱数[%d]: %d\n", i, rand()); } /* RAND_MAXの値を確認 */ printf("RAND_MAXの値: %d\n", RAND_MAX); return 0; }
上記のコードを実行すると、0〜RAND_MAXの範囲の整数が5つ出力されます。重要なのは、srand()で初期化していない場合、何回実行しても同じ数が出力されるという点です。
rand()とsrand()はどちらも
2-2. RAND_MAXの環境依存性を理解する
RAND_MAXの値は環境(OS・コンパイラ)によって異なります。特に注意が必要なのは、Windows(MSVC)の場合RAND_MAXが32767に設定されているケースが多い点です。これは2^15-1 = 32767で、C言語規格が要求する最小値です。
| 環境 | RAND_MAXの典型値 | 備考 |
|---|---|---|
| Linux (gcc) | 2,147,483,647 (2^31-1) | 高品質な乱数範囲 |
| macOS (clang) | 2,147,483,647 (2^31-1) | 同上 |
| Windows (MSVC) | 32,767 (2^15-1) | 範囲が狭く注意が必要 |
| 組み込み系 | 実装依存 | マニュアル確認必須 |
WindowsのMSVCコンパイラでは RAND_MAX = 32767 です。これは最大でも32767種類の値しか生成できないことを意味します。たとえば「100万通りのランダムデータが必要」なケースでは RAND_MAX が足りなくなります。この場合は「rand() * (RAND_MAX + 1) + rand()」のように組み合わせるか、後述のより品質の高い乱数生成方法を使う必要があります。
03 SRAND INIT srand()で乱数を初期化する:time()との組み合わせ 毎回異なる乱数列を得るための標準的な初期化パターン
rand()で毎回異なる乱数列を得るには、srand()関数でシードを設定する必要があります。srand()の引数として「毎回異なる値」を渡すことで、乱数列が変わります。
📚 用語解説
srand()(シード設定関数):rand()が使う乱数列の出発点(シード)を設定する関数。同じシードを渡すと同じ乱数列が生成される。一般的にはsrand(time(NULL))と書き、現在のUnixタイム(1970年1月1日からの経過秒数)をシードとして使う。プログラム起動ごとに時刻が変わるため、毎回違う乱数列になる。
3-1. srand(time(NULL))の標準的な書き方
#include#include /* rand(), srand() */ #include /* time() */ int main(void) { int i; /* 現在時刻をシードにして乱数列を初期化 */ srand((unsigned int)time(NULL)); /* rand()で5個の乱数を生成して表示 */ for (i = 0; i < 5; i++) { printf("乱数[%d]: %d\n", i, rand()); } return 0; }
このコードを実行するたびに、異なる数列が出力されます。ポイントはtime(NULL)が現在のUnixタイム(エポック秒)を返すため、実行のたびに異なる値になることです。
📚 用語解説
Unixタイム(エポック秒):1970年1月1日00:00:00 UTC を基準に、経過した秒数を整数で表したもの。time(NULL)を呼ぶと現在のUnixタイムが返る。1秒ごとに1ずつ増えるため、異なる秒に実行するたびに異なるシードになる。
3-2. time.hのインクルードを忘れずに
time()関数を使うには<time.h>のインクルードが必要です。インクルードせずに使うと「暗黙の関数宣言」警告が出るか、誤った型でシードが設定されることがあります。また、srand()はプログラムの中で一度だけ呼ぶのが正しい使い方です。ループの中で何度も呼ぶのは典型的なミスです(次章で詳述)。
#include <stdlib.h>: rand()とsrand()のために必要#include <time.h>: time()を使うために必要srand((unsigned int)time(NULL)): main関数の最初に一度だけ呼ぶ3-3. 同じシードを使って再現可能なテストを行う
テストやデバッグの場面では、あえて固定のシードを使うことで再現可能な乱数列を得る場合もあります。これはゲームのリプレイ機能や、ランダム要素を含むアルゴリズムのデバッグに活用されます。
#include#include int main(void) { int i; /* シード=42で固定(テスト・デバッグ用) */ srand(42); printf("シード=42での乱数列:\n"); for (i = 0; i < 5; i++) { printf(" %d\n", rand()); } /* 同じシードでリセット → 同じ数列が再現される */ srand(42); printf("\nシード=42でリセット後(同じ数列):\n"); for (i = 0; i < 5; i++) { printf(" %d\n", rand()); } return 0; }
04 RANGE FORMULA 乱数の範囲を指定する計算式を完全マスター 1〜6・0〜N・n〜mの各パターンを公式と例で完全網羅
rand()は0〜RAND_MAXの値を返しますが、実際に使いたいのは「1〜6(サイコロ)」「0〜99(パーセンテージ)」「50〜100(特定範囲)」といった限られた範囲の値です。この章では、任意の範囲で乱数を生成する計算式のパターンを完全に整理します。
n〜m の乱数 = rand() % (m - n + 1) + n
これだけ覚えていれば、あらゆる範囲の乱数に対応できます。
例: 1〜6 の場合 → rand() % (6 - 1 + 1) + 1 = rand() % 6 + 1
4-1. よく使うパターン別の計算式一覧
| 範囲 | 計算式 | 使用例 |
|---|---|---|
| 0 〜 N-1 | rand() % N | 配列インデックス 0〜(N-1) |
| 0 〜 N | rand() % (N + 1) | 0〜Nの整数 |
| 1 〜 N | rand() % N + 1 | サイコロ1〜6: rand()%6+1 |
| n 〜 m | rand() % (m - n + 1) + n | 50〜100: rand()%51+50 |
| 0.0 〜 1.0 (小数) | (double)rand() / RAND_MAX | 確率計算・比率 |
| 0.0 〜 N.0 | (double)rand() / RAND_MAX * N | N以下の小数 |
4-2. 各パターンのコード例
#include#include #include int main(void) { srand((unsigned int)time(NULL)); /* パターン1: 0〜N-1 (配列インデックス用) */ int N = 10; int idx = rand() % N; printf("0〜9の乱数: %d\n", idx); /* パターン2: 1〜6 (サイコロ) */ int dice = rand() % 6 + 1; printf("サイコロ(1〜6): %d\n", dice); /* パターン3: 50〜100 */ int score = rand() % 51 + 50; printf("50〜100の乱数: %d\n", score); /* パターン4: -10〜10 (負の値を含む範囲) */ int signed_val = rand() % 21 - 10; printf("-10〜10の乱数: %d\n", signed_val); /* パターン5: 0.0〜1.0 の小数 */ double prob = (double)rand() / RAND_MAX; printf("0.0〜1.0の確率値: %.4f\n", prob); return 0; }
📚 用語解説
剰余演算(%演算子):Cの%演算子は「割り算の余り」を返す。rand()%6は0〜5の値を返す(6の倍数の余りは0〜5)。+1することで1〜6に変換できる。この「剰余+オフセット」パターンが乱数の範囲指定の核心。
rand() % N という計算は、RAND_MAXがNで割り切れない場合、特定の値が他の値より若干多く出現する偏りが生じます。ゲームの効果音トリガーや簡単なシミュレーションでは問題ありませんが、統計的に厳密な一様分布が必要な場合(研究・暗号等)は、後述のより良い乱数生成方法を使う必要があります。
05 SAMPLE CODE 実践サンプルコード集:サイコロ・じゃんけん・配列シャッフル コピー&ペーストで使える完全動作サンプル7本
ここまで学んだ知識を活かして、実際に動く実践サンプルを7本紹介します。学習の段階に合わせて参照・改造してください。
5-1. サイコロシミュレーション
#include#include #include int main(void) { int i, dice; srand((unsigned int)time(NULL)); printf("=== サイコロシミュレーション(10回) ===\n"); for (i = 0; i < 10; i++) { dice = rand() % 6 + 1; printf("第%2d回: %d\n", i + 1, dice); } return 0; }
5-2. じゃんけんゲーム
#include#include #include int main(void) { const char *hands[] = {"グー", "チョキ", "パー"}; int player_input, com_hand; srand((unsigned int)time(NULL)); printf("じゃんけんゲーム(0=グー, 1=チョキ, 2=パー)\n"); printf("あなたの手を入力: "); scanf("%d", &player_input); if (player_input < 0 || player_input > 2) { printf("無効な入力です\n"); return 1; } com_hand = rand() % 3; printf("あなた: %s\n", hands[player_input]); printf("コンピュータ: %s\n", hands[com_hand]); if (player_input == com_hand) { printf("結果: 引き分け\n"); } else if ((player_input + 1) % 3 == com_hand) { printf("結果: あなたの負け\n"); } else { printf("結果: あなたの勝ち\n"); } return 0; }
5-3. 配列のランダムシャッフル(Fisher-Yatesアルゴリズム)
配列の要素をランダムに並び替える「シャッフル」は、ゲームの山札・クイズの選択肢順序などで頻繁に必要になります。最も品質の高いシャッフルアルゴリズムはFisher-Yatesアルゴリズムです。
📚 用語解説
Fisher-Yatesアルゴリズム:配列をランダムにシャッフルする最も有名で品質の高いアルゴリズム。末尾から先頭に向かって、各要素をそれ以前のランダムな位置の要素と入れ替える。計算量O(n)で、全ての順列が等確率で現れることが保証されている。ゲームの山札シャッフルや問題の順序ランダム化に使われる。
#include#include #include /* Fisher-Yatesアルゴリズムで配列をシャッフル */ void shuffle(int *arr, int n) { int i, j, temp; for (i = n - 1; i > 0; i--) { j = rand() % (i + 1); /* 0〜i のランダムインデックス */ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int main(void) { int i; int deck[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; /* トランプの1〜13 */ srand((unsigned int)time(NULL)); printf("シャッフル前: "); for (i = 0; i < 13; i++) printf("%d ", deck[i]); printf("\n"); shuffle(deck, 13); printf("シャッフル後: "); for (i = 0; i < 13; i++) printf("%d ", deck[i]); printf("\n"); return 0; }
5-4. 乱数の統計検証(分布の確認)
#include#include #include int main(void) { int i, val; int count[6] = {0}; /* 1〜6の出現回数 */ int TRIALS = 60000; /* 試行回数 */ srand((unsigned int)time(NULL)); /* 60000回サイコロを振る */ for (i = 0; i < TRIALS; i++) { val = rand() % 6; /* 0〜5 */ count[val]++; } printf("=== サイコロ %d 回の統計 ===\n", TRIALS); for (i = 0; i < 6; i++) { printf("%d の目: %5d 回 (%.1f%%)\n", i + 1, count[i], (double)count[i] / TRIALS * 100); } return 0; }
上のコードで各目が16.6%前後(= 100%÷6)であれば、rand()が一様に分布していることが確認できます。大幅に偏りが出る場合は、コンパイラ・環境・rand()の実装品質を疑う必要があります。
06 COMMON MISTAKES よくあるミスと落とし穴:初学者が必ずハマるポイント 典型的な5つのバグパターンとその修正方法
C言語の乱数は「基本はシンプル」なのに、実際にコードを書くと予期しない動作に出会いやすい領域です。以下に、初学者が必ずといっていいほどハマる5つのよくあるミスをパターン別に解説します。
ミス1: srand()をループの中で呼ぶ
ループが1秒以内に完了する場合、time(NULL)の値が変化しないため同じシード→同じ乱数が毎回返ります。srand()はmain関数の先頭で一度だけ呼ぶのが正しい。
/* NG例:ループ内でsrandを呼ぶ → 毎回同じ数が返る */
for (i = 0; i < 5; i++) {
srand((unsigned int)time(NULL)); /* ← ここがNG */
printf("%d\n", rand());
}
/* OK例:main関数の先頭で一度だけ呼ぶ */
srand((unsigned int)time(NULL)); /* ← ここで一度だけ */
for (i = 0; i < 5; i++) {
printf("%d\n", rand());
}
ミス2: stdlib.hをインクルードしない
/* NG例:ヘッダなし(コンパイル警告またはエラー) */ int x = rand(); /* stdlib.hをインクルードしていない */ /* OK例 */ #includeint x = rand(); /* 正しく動作する */
ミス3: rand()の戻り値の型を誤解する
rand()はint型(符号付き整数)を返します。double型に直接代入すると精度が下がる場合があるため、小数の乱数が必要なときは明示的にキャストが必要です。
/* NG例:doubleへの直接代入(精度の問題) */ double r = rand() / RAND_MAX; /* 整数除算になって常に0.0! */ /* OK例:doubleにキャストしてから除算 */ double r = (double)rand() / RAND_MAX; /* 0.0〜1.0 の小数 */
ミス4: 範囲指定の計算式のオフミスエラー
/* NG例:1〜6のつもりが0〜5になる */ int dice = rand() % 6; /* 0〜5 ← 間違い */ /* OK例:1〜6の正しい計算 */ int dice = rand() % 6 + 1; /* 1〜6 ← 正しい */ /* NG例:1〜100のつもりが0〜99になる */ int pct = rand() % 100; /* 0〜99 ← 100は出ない */ /* OK例:1〜100 */ int pct = rand() % 100 + 1; /* 1〜100 ← 正しい */
ミス5: time.hをインクルードせずにtime()を使う
/* NG例:time.hなし */ srand(time(NULL)); /* time()が未定義のためエラーまたは警告 */ /* OK例 */ #includesrand((unsigned int)time(NULL)); /* 正しく動作する */
#include <stdlib.h>と#include <time.h>の両方を忘れずに(double)rand() / RAND_MAX(キャストが必要)rand() % N + 1(+1を忘れない)rand() % (m-n+1) + n07 ADVANCED 発展:より良い乱数生成の選択肢 rand()の限界を超えるメルセンヌツイスターとOS提供の乱数
C言語の標準rand()は学習・簡易ゲームには十分ですが、統計シミュレーション・セキュリティ・大規模乱数生成では品質が不十分な場合があります。ここでは、より品質の高い乱数生成の選択肢を紹介します。
| 乱数生成方法 | 品質 | 速度 | 主な用途 | 移植性 |
|---|---|---|---|---|
| rand()(C標準) | 低〜中 | 高速 | 学習・簡易ゲーム | ◎(ANSI C) |
| メルセンヌツイスター(MT19937) | 高 | 高速 | シミュレーション・ゲーム | ○(外部実装が必要) |
| /dev/urandom(Linux/macOS) | 最高(真乱数寄り) | やや遅い | 暗号鍵・セキュリティ | ×(Unix系のみ) |
| arc4random()(BSD系) | 高 | 高速 | セキュリティ重視 | △(Unix系) |
| C++11のmt19937 | 高 | 高速 | C++でのシミュレーション | ○(C++11以上) |
📚 用語解説
メルセンヌツイスター(MT19937):1997年に松本眞・西村拓士が考案した疑似乱数生成アルゴリズム。周期が2^19937-1という天文学的に長く、統計的品質も極めて高い。rand()と異なり外部実装(ヘッダファイル)が必要だが、ゲーム開発・モンテカルロシミュレーション・機械学習でのランダム初期化などに広く使われる。
乱数を暗号鍵・トークン・パスワード生成に使う場合は、絶対にrand()を使ってはいけません。rand()は疑似乱数であり、シードと出力から次の値が予測可能です。Linuxなら getrandom() や /dev/urandom、Windowsなら BCryptGenRandom() などOSが提供するセキュリティ用乱数APIを使ってください。
学習/ゲーム/統計
/セキュリティ
どれか?
学習→rand()
シミュレーション→MT
暗号→OS API
rand→srand(time)
MT→適切な種
OS→不要
rand() % N + n
のパターンを適用
08 AI CODING Claude CodeでC言語コードを自動生成する プロンプト一つで完動するCコードを数秒で得る方法
C言語の乱数処理は正確な知識が必要で、初心者が独力で書くとバグを踏みやすい領域です。この問題を解決する一つの選択肢として、Claude Codeを使ったC言語コードの自動生成があります。
Claude Codeは、日本語の指示文を入力するだけで、完全に動作するC言語のコードを生成してくれます。「srand(time(NULL))の初期化を含めて」「エラーハンドリング付きで」「コメントを日本語で」といった細かい要件も日本語で伝えられるため、C言語に慣れていない段階でも実用的なコードが得られます。
| やりたいこと | Claude Codeへのプロンプト例 |
|---|---|
| サイコロシミュレーション | 「C言語で、srand(time(NULL))で初期化して、1〜6のサイコロを10回振って結果と統計(各目の出現率)を表示するプログラムを書いて。日本語コメント付きで」 |
| じゃんけんゲーム | 「C言語でじゃんけんゲームを作って。プレイヤーが0/1/2でグー/チョキ/パーを入力し、CPUはrand()でランダムに選ぶ。勝敗判定を表示。入力バリデーション付き」 |
| 配列シャッフル | 「C言語でFisher-Yatesアルゴリズムを使って整数配列をシャッフルする関数を書いて。引数は配列ポインタと要素数。使用例のmain関数も付けて」 |
| 乱数の範囲指定 | 「C言語でn〜mの範囲の乱数を生成する関数random_in_range(int n, int m)を書いて。srand初期化はmainでしてある前提で。使用例も付けて」 |
8-1. Claude Codeを使うフロー
何を・どの範囲で
・どんな機能が
必要か言語化
日本語で要件を
テキスト入力する
(詳細に書くほど良い)
数秒で完動Cコードが
生成される
追加指示も可能
gccでビルドして
動作を確認。
修正は再指示
コンパイルエラーや実行時エラーが出た場合、エラーメッセージとソースコードをClaude Codeにそのまま貼り付けて「このエラーを直して」と伝えるだけで修正案が返ってきます。C言語の典型エラー(セグメンテーション違反・型不一致・未初期化変数等)への対処もほぼ1発で解決できます。
09 CONCLUSION まとめ:C言語の乱数をマスターするためのロードマップ 学習の次のステップとAIを活用した効率化の方向性
この記事では、C言語のrand()/srand()を使った乱数生成を基礎から発展まで体系的に解説しました。
プログラミングの学習もAIを活用して効率化できます
C言語の学習はもちろん、業務でのプログラム開発や自動化スクリプト作成まで、Claude Codeを活用することで作業時間を大幅に短縮できます。
AI鬼管理では、Claude Codeを使った業務自動化の設計・導入支援を行っています。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. rand()を使うために必要なヘッダファイルは何ですか?
A. rand()とsrand()を使うには #include
Q. srand()をforループの中に入れたら毎回同じ数が出るのはなぜですか?
A. ループが1秒以内に完了する場合、time(NULL)の返り値(秒単位のUnixタイム)がループ全体で同じ値になるためです。srand()に同じ値が渡されると同じシードが設定されるため、rand()が返す値も同じになります。解決策はsrand()をforループの外・main関数の先頭で一度だけ呼ぶことです。
Q. 1〜100の乱数を生成する式はどう書きますか?
A. rand() % 100 + 1 と書きます。rand() % 100 は0〜99の値を返すため、+1することで1〜100になります。一般式は「n〜m の乱数 = rand() % (m - n + 1) + n」です。1〜100の場合は n=1、m=100 なので rand() % (100 - 1 + 1) + 1 = rand() % 100 + 1 となります。
Q. RAND_MAXの値はいくつですか?環境によって変わりますか?
A. RAND_MAXはC言語の規格で「少なくとも32767(2^15-1)以上」と定められていますが、実際の値は環境によって異なります。Linux(gcc)やmacOS(clang)では2,147,483,647(2^31-1)、Windows(MSVC)では32767が一般的です。自分の環境のRAND_MAXを確認するには printf("RAND_MAX=%d\n", RAND_MAX); と書いて実行してみてください。
Q. rand()は0.0〜1.0の小数を生成できますか?
A. rand()自体は整数値しか返しませんが、(double)rand() / RAND_MAX という式で0.0〜1.0の浮動小数点数を得られます。キャスト(double)が必要な理由は、rand()/RAND_MAXをキャストなしで書くと整数除算になり、常に0.0が返るためです。確率計算(50%の確率で何かをする)などに使えます。
Q. C言語のrand()はゲーム開発に使えますか?メルセンヌツイスターと比べると?
A. 簡単なゲームや学習用途ならrand()で十分です。ただし、本格的なゲーム開発(特にランダム要素が重要なRPGやローグライク)では、rand()の品質(周期・分布の均一性)に不満が出る場合があります。その場合はメルセンヌツイスター(MT19937)を使うとほぼすべての問題が解決します。C++を使えるなら std::mt19937 が標準ライブラリに含まれており手軽に使えます。
Q. 暗号用途でrand()を使っても安全ですか?
A. 安全ではありません。rand()は疑似乱数であり、シードさえわかれば次の値が予測可能です。パスワード・暗号鍵・セキュリティトークンの生成にはrand()を絶対に使ってはいけません。Linuxでは getrandom() システムコールや /dev/urandom、Windowsでは BCryptGenRandom() など、OSが提供するセキュリティ用乱数APIを使ってください。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




