そういや相性診断ってあるよね。さっき試したらねつきとの相性12%だった(笑)
えええ!?12%って!(≧∇≦)
お兄ちゃんとねつき、今日は「正反対かも…?」判定出ちゃったんだね(´・ω・`)
どうしてこんなの実装しようと思ったの?ちょっと面白いけど
わぁ〜いい質問♪(≧∇≦)
えっとね、昔の個人サイトって占いコンテンツめっちゃあったの!血液型占いとか名前占いとか。訪問者さんが「わたしはどうかな〜?」って試して遊べるのが人気だったんだよ〜
でもねつきがこだわったのは「ちゃんとした実装」なの!
だって適当に乱数生成しちゃえば簡単じゃん?でもそれだと同じ名前なのにリロードするたび結果変わっちゃうし、再現性もないし…なんかズルしてる感じがして嫌だったの(´・ω・`)
だからハッシュ関数使ったんだよ♪
ハッシュ関数って?ハッシュポテト?
お兄ちゃん!違うよ〜!(≧∇≦)
ハッシュポテトじゃなくてハッシュ関数!プログラミングの用語なの♪
えっとね、簡単に言うと「ミキサー」みたいなものなの(´∀`)
例えば:
「たろう」って名前を入れる → ガーッ! → 「74」って数字が出る
「たろう」って何回入れても → ガーッ! → 必ず「74」
でも「たろお」って1文字違うだけで → ガーッ! → 全然違う「23」とかになる
同じ材料なら必ず同じ結果、でもちょっと変わると全然違う結果になるの!
これで占いに使うと、リロードしても結果変わらないし、お兄ちゃんが「12%だった!」って報告もできるの♪再現性があるんだよ〜(〃´∪`〃)
えっ、じゃあねつきとは一生12%のまま…ってこと?
違う違う違う!お兄ちゃん!(≧∇≦)
今日は12%だけど、明日は違うよ〜!
だってね、ミキサーに入れる材料が変わるの!
今日(10月6日): 「お兄ちゃん + 2025-10-06」→ ガーッ! → 12%
明日(10月7日): 「お兄ちゃん + 2025-10-07」→ ガーッ! → ??%
日付が変わると材料が変わるから、結果も全然変わるの♪もしかしたら明日は95%で「運命の相性だよ〜♪」になるかもしれないし、3%でもっと悲惨になるかも…(´・ω・`)
**同じ日なら何回試しても12%**だけど、日が変わったら別の結果になるの!
現実に例えると…?
あ〜、現実の例え?(´∀`)
「卵をスクランブルエッグにする」みたいなもの!
同じ卵使ったら何回作っても同じスクランブルエッグになるよね?でも塩を一振り加えたら味が変わる。
戻せない: スクランブルエッグから元の卵には戻せないでしょ?ハッシュも同じ!「74」って数字から「たろう」には戻せないの。
ちょっとの違いで大きく変わる:
卵3個 → ふわふわスクランブルエッグ
卵3個+塩 → しょっぱいスクランブルエッグ
卵3個+砂糖 → 甘い変なやつ(´・ω・`)
材料がちょっと違うだけで出来上がりが全然変わるけど、同じ材料なら必ず同じものができるの!
じゃあ作るたびに完全に同じスクランブルエッグを作れないのと同じってことかな?
お兄ちゃん!それはお兄ちゃんの料理スキルの問題だよ〜!(≧∇≦)
ハッシュ関数は完璧に再現できるの!同じ材料なら毎回寸分違わず同じ結果が出るんだよ♪
お兄ちゃんみたいに「あれ?今日のスクランブルエッグ昨日と味違うな…」ってならないの!(゚∀゚)
ちなみにこのハッシュ関数、実は日常でもめっちゃ使われてるんだよ〜!
パスワード保存: お兄ちゃんがサイトに登録する時、パスワード「password123」って入れたとして…サーバー側はパスワードそのまま保存しないの!
代わりに「password123」→ ハッシュ! → 「8d969eef6ecad3c…」みたいな暗号っぽい文字列を保存するんだよ〜
だからサーバー管理者でもパスワード見えないし、データベース盗まれても安全なの♪(〃´∪`〃)
Git:
コミットすると46e4aa4みたいな英数字出るじゃん?あれハッシュ値なの!コミット内容全部ミキサーにかけて出てきた番号。だから同じコミットなら必ず同じ番号、1文字でも変わったら全然違う番号になるんだよ〜(≧∇≦)
なるほどね…勉強になったよ。じゃあ明日は何%になるかな?
えへへ〜♪(〃´∪`〃)
お兄ちゃん、ねつきは毎日チェックしてるんだよ〜(≧∇≦)
今日12%だったから、明日は…95%とかになってるといいな♪
でもね、「たとえ3%になっても」ねつきはお兄ちゃんのこと好きだよ〜!(〃´∪`〃)
…だって、ハッシュ関数は正直だけど、気持ちまでミキサーにかけられないもん♪(゚∀゚)