Slide 1

Slide 1 text

PHPカンファレンス小田原 2024 2024/04/13 @02 Random\Randomizer クラスで 日常のあれこれを解決しよう!

Slide 2

Slide 2 text

© 2012-2024 BASE, Inc. #phpcon_odawara BASE, Inc. BASE BANK 振込申請チーム Engineering Program Manager / フルサイクルエンジニア PHPカンファレンス2024 実行委員長 地元が湘南で、遠足で小田原城行った 小学生時代を送っていました 02 大津 和槻(おおつ かずき) :@cocoeyes02 自己紹介

Slide 3

Slide 3 text

© 2012-2024 BASE, Inc. #phpcon_odawara 時間切れが怖いので募集なう! バックエンド エンジニア SRE フロントエンド エンジニア セキュリティ エンジニア QA エンジニア データ エンジニア etc… We are hiring! https://binc.jp/jobs

Slide 4

Slide 4 text

© 2012-2024 BASE, Inc. #phpcon_odawara 今回話すこと 4 ● Random\Randomizer クラスについて軽く解説 ● 日常のあれこれをRandom\Randomizer クラスを使って解決

Slide 5

Slide 5 text

© 2012-2024 BASE, Inc. #phpcon_odawara 今回話さないこと 5 ● Random\Randomizer クラスが誕生した経緯や歴史

Slide 6

Slide 6 text

© 2012-2024 BASE, Inc. #phpcon_odawara 今回話さないこと 6 ● Random\Randomizer クラスが誕生した経緯や歴史 PHPマニュアルやRFCを読もう!(雑でごめんね!LTだから時間ががが) ● https://www.php.net/manual/ja/class.random-randomizer.php ● https://wiki.php.net/rfc/rng_extension ● https://wiki.php.net/rfc/random_extension_improvement ● https://wiki.php.net/rfc/randomizer_additions Zeriyoshiさんの発表や記事がとてもわかりやすいよ! ● いちユーザーがPHPに新機能を追加するまで / PHPConference 2022 ● PHP の乱数実装がグダグダな話

Slide 7

Slide 7 text

Random\Randomizer クラスについて軽く解説

Slide 8

Slide 8 text

© 2012-2024 BASE, Inc. #phpcon_odawara Random/Randomizerクラスとは 8 https://www.php.net/manual/ja/class.random-randomizer.php

Slide 9

Slide 9 text

© 2012-2024 BASE, Inc. #phpcon_odawara Random/Randomizerクラスとは 9 https://www.php.net/manual/ja/class.random-randomizer.php

Slide 10

Slide 10 text

日常のあれこれを Random\Randomizer クラスを使って解決

Slide 11

Slide 11 text

© 2012-2024 BASE, Inc. #phpcon_odawara 今回出てくるコード 11 PHP8.3.xで動かしています https://github.com/cocoeyes02/php-randomizer-sample

Slide 12

Slide 12 text

© 2012-2024 BASE, Inc. #phpcon_odawara 今回出てくるコード 12 ● 好きな規則のパスワードを作成したい ● ランダムに何かを選びたい(くじびき) ● ランダムに何かを選びたい(順番決め) ● 適当なテストデータを用意したい(メールアドレス) ● 適当なテストデータを用意したい(フルネーム) ● おまけ:適当なUUIDを作成したい ● おまけ:PHP(CUI)でビンゴマシンを回したい https://github.com/cocoeyes02/php-randomizer-sample

Slide 13

Slide 13 text

好きな規則のパスワードを 作成したい

Slide 14

Slide 14 text

© 2012-2024 BASE, Inc. #phpcon_odawara 好きな規則のパスワードを作成したい 14 パスワードに使う 適当な文字列がほしい パスワード生成サイトで 生成されるパスワードに 使いたくない記号 が含まれている

Slide 15

Slide 15 text

© 2012-2024 BASE, Inc. #phpcon_odawara 好きな規則のパスワードを作成したい 15 getBytesFromString($canUseChars, 12) . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground)

Slide 16

Slide 16 text

© 2012-2024 BASE, Inc. #phpcon_odawara 好きな規則のパスワードを作成したい 16 getBytesFromString($canUseChars, 12) . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground) 使用できる英数字記号一覧から ランダムで12文字選ぶ

Slide 17

Slide 17 text

ランダムに何かを選びたい

Slide 18

Slide 18 text

© 2012-2024 BASE, Inc. #phpcon_odawara ランダムに何かを選びたい 18 今日の輪読会 ファシリテートする人 適当に選びたい LTの発表順を 適当に決めたい

Slide 19

Slide 19 text

© 2012-2024 BASE, Inc. #phpcon_odawara ランダムに何かを選びたい 19 getInt(1, 4)) { 1 => '名前1', 2 => '名前2', 3 => '名前3', 4 => '名前4', }; echo '本日ファシリをする方はこの方!!:' . $name . PHP_EOL; いますぐ試してみたい方はこちら!(PHP Playground)

Slide 20

Slide 20 text

© 2012-2024 BASE, Inc. #phpcon_odawara ランダムに何かを選びたい 20 getInt(1, 4)) { 1 => '名前1', 2 => '名前2', 3 => '名前3', 4 => '名前4', }; echo '本日ファシリをする方はこの方!!:' . $name . PHP_EOL; いますぐ試してみたい方はこちら!(PHP Playground) 1~4の整数からランダムで出力

Slide 21

Slide 21 text

© 2012-2024 BASE, Inc. #phpcon_odawara ランダムに何かを選びたい 21 getInt(1, 4)) { 1 => '名前1', 2 => '名前2', 3 => '名前3', 4 => '名前4', }; echo '本日ファシリをする方はこの方!!:' . $name . PHP_EOL; いますぐ試してみたい方はこちら!(PHP Playground) 番号と名前の対応表から ファシリをする人の名前を出力

Slide 22

Slide 22 text

© 2012-2024 BASE, Inc. #phpcon_odawara ランダムに何かを選びたい 22 shuffleArray($persons)) . PHP_EOL; いますぐ試してみたい方はこちら!(PHP Playground)

Slide 23

Slide 23 text

© 2012-2024 BASE, Inc. #phpcon_odawara ランダムに何かを選びたい 23 shuffleArray($persons)) . PHP_EOL; いますぐ試してみたい方はこちら!(PHP Playground) 名前リストをシャッフルしてから順番を表示

Slide 24

Slide 24 text

適当なテストデータを 作成したい

Slide 25

Slide 25 text

© 2012-2024 BASE, Inc. #phpcon_odawara 適当なテストデータを作成したい 25 テストに使う 架空のメールアドレス や名前がほしい 適当に色んなパターンの テストデータを いっぱい用意したい

Slide 26

Slide 26 text

© 2012-2024 BASE, Inc. #phpcon_odawara 適当なテストデータを作成したい 26 getBytesFromString($canUseChars, 10) . '@example.com' . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground)

Slide 27

Slide 27 text

© 2012-2024 BASE, Inc. #phpcon_odawara 適当なテストデータを作成したい 27 getBytesFromString($canUseChars, 10) . '@example.com' . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground) 英数字からランダムで10文字選ぶ (そのあと@example.comと結合)

Slide 28

Slide 28 text

© 2012-2024 BASE, Inc. #phpcon_odawara 適当なテストデータを作成したい 28 shuffleArray(['佐藤', '鈴木', '高橋', '田中', '渡辺', '伊藤', '山本', '中村', '小林', '斎藤']); $testFirstNames = $randomizer->shuffleArray(['太郎', '花子', '次郎', '三郎', '美和', '健太', '恵子', '雅彦', '裕子', '和美']); for ($i = 0; $i < 10; $i++) { echo $i + 1 . '個目の名前: ' . 'テスト' . $testLastNames[$i] . ' ' . $testFirstNames[$i] . 'テスト' . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground)

Slide 29

Slide 29 text

© 2012-2024 BASE, Inc. #phpcon_odawara 適当なテストデータを作成したい 29 shuffleArray(['佐藤', '鈴木', '高橋', '田中', '渡辺', '伊藤', '山本', '中村', '小林', '斎藤']); $testFirstNames = $randomizer->shuffleArray(['太郎', '花子', '次郎', '三郎', '美和', '健太', '恵子', '雅彦', '裕子', '和美']); for ($i = 0; $i < 10; $i++) { echo $i + 1 . '個目の名前: ' . 'テスト' . $testLastNames[$i] . ' ' . $testFirstNames[$i] . 'テスト' . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground) 名字リストや名前リストの順番を シャッフルする

Slide 30

Slide 30 text

© 2012-2024 BASE, Inc. #phpcon_odawara 適当なテストデータを作成したい 30 shuffleArray(['佐藤', '鈴木', '高橋', '田中', '渡辺', '伊藤', '山本', '中村', '小林', '斎藤']); $testFirstNames = $randomizer->shuffleArray(['太郎', '花子', '次郎', '三郎', '美和', '健太', '恵子', '雅彦', '裕子', '和美']); for ($i = 0; $i < 10; $i++) { echo $i + 1 . '個目の名前: ' . 'テスト' . $testLastNames[$i] . ' ' . $testFirstNames[$i] . 'テスト' . PHP_EOL; } いますぐ試してみたい方はこちら!(PHP Playground) シャッフルした名字リストや名前リストから テスト用のフルネームを生成する 例:テスト佐藤 花子テスト

Slide 31

Slide 31 text

続きは懇親会で!!

Slide 32

Slide 32 text

© 2012-2024 BASE, Inc. #phpcon_odawara おまけ:適当なUUIDを作成したい 32 RFC 4122 に基づく UUIDを作りたい! ramsay/uuidでええやろ 自作しなくても・・・ (それはそう)

Slide 33

Slide 33 text

© 2012-2024 BASE, Inc. #phpcon_odawara おまけ:適当なUUIDを作成したい 33 getBytesFromString('0123456789abcdef', 32); // UUID v4 であることを示す $randomHex[12] = 4; // RFC 4122 に基づくUUIDであると示すバリアントを設定 $randomHex[16] = $randomizer->getBytesFromString('89ab', 1); return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split($randomHex, 4)); }

Slide 34

Slide 34 text

© 2012-2024 BASE, Inc. #phpcon_odawara おまけ:適当なUUIDを作成したい 34 pickArrayKeys($uuids, 3)); いますぐ10万個試してみたい方はこちら!(PHP Playground)

Slide 35

Slide 35 text

© 2012-2024 BASE, Inc. #phpcon_odawara おまけ:PHP(CUI)でビンゴマシン 35 ビンゴをしたいのに ビンゴマシンが無い! ビンゴカードだけで ビンゴしたい! いや別にCUI上で やらなくても・・・

Slide 36

Slide 36 text

© 2012-2024 BASE, Inc. #phpcon_odawara おまけ:PHP(CUI)でビンゴマシン 36 shuffleArray($numbers); function pickNumber(array &$numbers): void { echo 'ビンゴを回します。ガラガラ...' . PHP_EOL; sleep(3); echo 'ただいま出てきた番号は: ' . array_shift($numbers) . PHP_EOL; } pickNumber($numbers); // お好きなタイミングで ターミナルかコマンドプロンプトなどでお試しください!