Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyのハッシュとパスワードのハッシュ化、まったく別物だと思っていませんか?
Search
Terai Shogo
November 16, 2022
Programming
0
65
Rubyのハッシュとパスワードのハッシュ化、まったく別物だと思っていませんか?
【iCARE Dev Meetup #36】Rejected CFP 供養会 2022 (
https://icare.connpass.com/event/261601/
)で発表した内容です。
Terai Shogo
November 16, 2022
Tweet
Share
More Decks by Terai Shogo
See All by Terai Shogo
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
6
520
PRODUCT HISTORY CONFERENCE 2024の裏側
krpk1900
0
73
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
1.2k
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
830
今日で分かる!カスタムコップの作り方
krpk1900
2
1.2k
SNS特有のタイムライン機能におけるYOUTRUSTの工夫点
krpk1900
0
52
技術的負債に対してカスタムコップでできること
krpk1900
0
610
サービスを軌道に乗せるまで一人でやったすべてのこと
krpk1900
20
7.9k
RailsアプリでのCQSの運用を支える仕組みと文化
krpk1900
0
110
Other Decks in Programming
See All in Programming
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
380
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
9
2.6k
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
13
3.2k
エンジニアのための”最低限いい感じ”デザイン入門
shunshobon
0
130
私の後悔をAWS DMSで解決した話
hiramax
4
140
コンテキストエンジニアリング Cursor編
kinopeee
1
700
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
330
decksh - a little language for decks
ajstarks
4
21k
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamlab
PRO
0
490
kiroでゲームを作ってみた
iriikeita
0
180
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
240
GUI操作LLMの最新動向: UI-TARSと関連論文紹介
kfujikawa
0
1k
Featured
See All Featured
Docker and Python
trallard
45
3.5k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Building Applications with DynamoDB
mza
96
6.6k
Code Review Best Practice
trishagee
70
19k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
The Pragmatic Product Professional
lauravandoore
36
6.8k
Code Reviewing Like a Champion
maltzj
525
40k
Balancing Empowerment & Direction
lara
2
590
Scaling GitHub
holman
462
140k
Automating Front-end Workflow
addyosmani
1370
200k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Transcript
גࣜձࣾiCARE αʔόʔαΠυΤϯδχΞ ࣉҪ লޗ(@krpk1900_dev) Rubyͷϋογϡͱ ύεϫʔυͷϋογϡԽɺ ·ͬͨ͘ผͩͱࢥ͍ͬͯ·ͤΜ͔ʁ
2 גࣜձࣾiCARE αʔόʔαΠυΤϯδχΞ ࣉҪ লޗ 20218݄ʹגࣜձࣾiCAREʹೖࣾɻ 20228݄ΑΓԠ༻తೝՄػೳPJ։ൃϦʔμʔɺ 202210݄͔Β৽ن։ൃνʔϜͷϦʔμʔΛ݉ɻ RailsͱGraphQLΛ༻͍ͨ։ൃΛओʹ୲͍ͯ͠·͢ɻ ࣗݾհ
@krpk1900_dev
3 ࠓͷൃද༰ɺ RubyKaigi 2022ʹఏग़ͨ͠CFPΛ վมͨ͠ͷͰ͢ ͓͜ͱΘΓ
4 ͍͑ͨ͜ͱ ᶃ Rubyͷϋογϡʹؔ͢Δࣝ ᶄ Rubyͷൃలͷཪʹ͋ͬͨࢲ͕ײಈͨ͠Τϐιʔυ ᶅ ॳ৺ऀͰCFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ
5 ᶃ Rubyͷϋογϡʹ͍ͭͯ
6 Rubyͷϋογϡͬͯ ͝ଘͰ͠ΐ͏͔ʁ Rubyͷϋογϡ
7 {key: value} Rubyͷϋογϡ
8 ύεϫʔυͷอଘͳͲͰग़ͯ͘Δ ϋογϡԽͬͯ ͝ଘͰ͠ΐ͏͔ʁ ύεϫʔυͷϋογϡԽ
9 ϋογϡؔ ύεϫʔυͷϋογϡԽ password d39a9902c2
10 Rubyͷϋογϡͱ ύεϫʔυͷϋογϡԽɺ શ͘ผͩͱࢥ͍ͬͯ·ͤΜ͔ʁ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ
11 ࣮͍ؔͯ͠ΔΜͰ͢ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ
12 Rubyͷϋογϡͱ ύεϫʔυͷϋογϡԽɺ ͲͪΒϋογϡ͕ؔΘΕ͍ͯΔ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ
13 • RubyͷHashͰɺkeyΛ୳ࡧ͢Δͱ͖ʹϋογϡ͕ؔΘΕ͍ͯΔ • ԿͷͨΊʹʁ ԿͷͨΊʹϋογϡ͕ؔΘΕ͍ͯΔͷ͔
14 • ޮͷྑ͍୳ࡧΛߦ͏ͨΊ • ϋογϡ୳ࡧͰɺ୳ࡧʹ͔͔ΔܭࢉྔO(1)ͱઆ໌͞ΕΔ ϋογϡ୳ࡧ ྫɿϋογϡͷཁૉ͕1000000Ͱ ɹɹkey͕ teraiͰ͋Δσʔλͷ୳ࡧʹ
ɹɹཁૉʹൺྫͤͣɺҰఆͷ࣌ؒͰ୳ࡧՄೳ 1000000ݸ {terai: 178, … , endo: 196} key value ộ ộ ito 113 shiga 64 terai 178 ộ ộ
15 • ཁૉ͕େͰҰఆͷ࣌ؒͰܭࢉͰ͖Δͱ͍͏ͷຊͳͷ͔ʁ • ୯७ʹߟ͑Δͱɺ্͔ΒॱʹҰக͍ͯ͠Δ͔Λݟ͍ͯ͘ඞཁ͕ ͋ΔͨΊɺཁૉ n ʹൺྫͦ͠͏
ϋογϡ୳ࡧ key value ộ ộ ito 113 shiga 64 terai 178 ộ ộ n ݸ ộ terai Ұக͍ͯ͠Δ͔ʁ Ұக͍ͯ͠Δ͔ʁ Ұக͍ͯ͠Δ͔ʁ ộ terai terai
16 • ͔ͨ͠ʹ্͔Βॱʹ֬ೝ͍ͯ͘͠߹ O(n)ͱͳͬͯ͠·͏ • ͜͜Ͱ༻͍ΒΕΔ͕ϋογϡςʔϒϧ ϋογϡ୳ࡧ
17 • ϋογϡςʔϒϧͰɺkeyͱvalueΛϝϞϦʹ֨ೲ͢Δͱ͖ʹ ϝϞϦͷͲ͜ʹ֨ೲ͢Δ͔ʹنଇ͕͋Δ ϋογϡ୳ࡧ ϝϞϦ൪ key value ộ
ộ ộ 0x1020 0x1024 0x1028 ộ ộ ộ 1000000ݸ {terai: 178} ೖΕΔͳΒ͔͜͜͠ͳ͍
18 • نଇʹैͬͯ֨ೲ͢Δͱ͍͏͜ͱɺ୳ࡧ͖͢ॴΛಛఆͰ͖Δ • ͜Ε͕O(1)ͱͳΔཧ༝ • نଇ͕ͳ͍ͱɺઌ΄ͲͷΑ͏ʹ্͔Βॱʹ֬ೝ͢Δ͔͠ͳ͍ ϋογϡ୳ࡧ ϝϞϦ൪ key
value ộ ộ ộ 0x1020 ito 113 0x1024 shiga 64 0x1028 terai 178 ộ ộ ộ 1000000ݸ ೖ͍ͬͯΔͳΒ͔͜͜͠ͳ͍ {terai: 178}
19 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ
20 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϝϞϦ൪ key value ộ ộ ộ 0x1020 0x1024 0x1028 ộ 0x1408 ộ ộ ộ ςʔϒϧαΠζ1000
21 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϋογϡؔ terai d39a9902c2
22 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϋογϡؔ terai d39a9902c2 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ 162
23 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ 162 ϝϞϦ൪ key value ộ ộ ộ 0x1024 ộ 0x10C6 terai 178 ộ 0x1408 ộ ộ ộ ೖΕΔͳΒ͔͜͜͠ͳ͍ {terai: 178}
24 ϋογϡςʔϒϧ͔Β୳ࡧ͢Δͱ͖ 162 ϝϞϦ൪ key value ộ ộ ộ 0x1024
ito 113 ộ 0x10C6 terai 178 ộ 0x1408 shiga 64 ộ ộ ộ ೖ͍ͬͯΔͳΒ͔͜͜͠ͳ͍ ্͔Βશ෦֬ೝ͠ͳͯ͘1ճͰ͍͚Δ • ಉ༷ͷखॱͰkey͔ΒΦϑηοτΛܭࢉ͢Δ͜ͱͰɺ ϋογϡςʔϒϧͷ֬ೝ͢Εྑ͍ϝϞϦ൪ΛಛఆͰ͖Δ terai
25 ͨͩ͠1͕ͭ͋Δ ϋογϡςʔϒϧͷ
26 • িಥ ϋογϡςʔϒϧͷ ϋογϡؔ terai 10162 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ
162 niwa 20162 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ 162 takei 30162 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ 162 ςʔϒϧαΠζͰׂΔ͜ͱʹΑͬͯ ςʔϒϧαΠζະຬʹมͨ݁͠Ռ ಉ͡ʹͳͬͯ͠·͏߹
27 ϋογϡςʔϒϧͷ 162 ϝϞϦ൪ key value ộ ộ ộ 0x1024
ito 113 ộ 0x10C6 ? ? ộ 0x1408 shiga 64 ộ ộ ộ ೖΕΔͳΒ͔͜͜͠ͳ͍ • িಥ͕ى͖Δͱ… {terai: 178} ೖΕΔͳΒ͔͜͜͠ͳ͍ {niwa: 211} ೖΕΔͳΒ͔͜͜͠ͳ͍ {takei: 362}
28 ༗໊ͳղܾ๏ • νΣΠϯ๏ • ΦʔϓϯΞυϨε๏ ϝϞϦ൪ ộ ộ
0x1024 {ito: 113} ộ 0x10C6 ộ ộ {terai: 178} {niwa: 211} {takei: 362} ϝϞϦ൪ ộ ộ 0x1024 {ito: 113} ộ 0x10C6 {terai: 178} 0x10CA {niwa: 211} 0x10CE {takei: 362} ộ 0x1408 {shiga: 64} ộ ộ ͕࣌ؒͳ͍ͨΊ ΞϧΰϦζϜͷઆ໌ׂѪ
29 • ͪͳΈʹRubyͷHashͷ༝དྷɺPerlͷHash Table͕͢ͰʹHashͱ ݺΕ͍͔ͯͨΒʢMatzʹ֬ೝࡁΈʣ • ࿈ྻͱɺҎ֎Λఴࣈʹ͢Δ͜ͱ͕Ͱ͖Δྻͷ͜ͱ • ࿈ྻଞͷݴޠͰҎԼͷΑ͏ʹݺΕΔ
• Ϛοϓ • ࣙॻʢσΟΫγϣφϦʣ • ࿈Ϧετ ༨ஊɿRubyͷϋογϡͷ༝དྷ
30 ᶄ Rubyͷൃలͷཪʹ͋ͬͨ ɹ ࢲ͕ײಈͨ͠Τϐιʔυ
31 • RubyͰɺνΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ʹมߋ͢ΔఏҊ͕ 2016ʹMakarov͞ΜʹΑͬͯߦΘΕͨ • CPUͷਐԽʹ͍ɺΦʔϓϯΞυϨε๏ͷํ͕ ޮ͕ྑ͘ͳ͖ͬͯͨͨΊ •
PythonPHPͰಉ༷ͷมߋ͕ߦΘΕͨͨΊ RubyͷมߋͷఏҊ RubyKaigi 2022Ͱൃද͞Ε͍ͯͨ Makarov͞Μ
32 • νΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ͷมߋʹ͍ͭͯɺ Martin͞Μ͕ผͷ࣮ΛఏҊ͞Εͨ • ͲͪΒ͕RubyʹऔΓࠐ·ΕΔ͔ɺͱ͍ͯ ͕ٞߦΘΕͨ RubyͷมߋͷఏҊ
Martin͞ΜRubyKaigi 2021Ͱ ൃද͞Ε͍ͯΔ
33 • ύϑΥʔϚϯεʹେ͖ͳࠩͳ͔͕ͬͨ Makarov͞Μͷ࣮ͷํ͕গ͚ͩ͠γϯϓϧͰ͋Δͱஅ͠ɺ Matz Makarov͞Μͷ࣮ΛRubyʹऔΓࠐΜͩ • ന͍ͯͨٞ͠ΛݟΔͱɺ͓ͦΒ͘Martin͞Μͷதʹ
չ͠͞൵͠͞ͷΑ͏ͳؾ࣋ͪ͋ͬͨͱࢲࢥ͍·͢ RubyͷมߋͷఏҊ
34 • ͔͠͠ɺٞͷ࠷ޙʹMartin͞Μ͕͞Ε͍ͯͨݴ༿Λ ݟͨͱ͖ɺࢲ͘͢͝ײಈ͠·ͨ͠ Martin͞Μͷݴ༿
35 ΦʔϓϯιʔειϑτΣΞθϩαϜήʔϜͰ͋Γ·ͤΜɻ ࠓRubyͷτϥϯΫʹ͋ΔύονΛͬͯ͢Εɺશһ͕ಘΛ͢Δͱ ࢲߟ͍͑ͯ·͢ɻ ͋ͳͨಘΛͯ͠ɺMakarov͞ΜಘΛͯ͠ɺ ଞͷΈͳ͞ΜಘΛͯ͠ɺͦͯ͠RubyಘΛ͢ΔͷͰ͢ʂ
Έͳ͞Μɺຊʹ͋Γ͕ͱ͏͍͟͝·͢ɻ Martin͞Μͷݴ༿
36 Martin͞Μͷݴ༿ • ͜ͷΑ͏ͳ͜ͱΛॻ͘͜ͱࣗମ͕ࣦྱʹ͋ͨΔ͔͠Ε·ͤΜ͕ɺ ࣗͷ࣮͕औΓࠐ·ΕΔ͜ͱʹΑͬͯಘΒΕΔ໊༪ͳΜ͔Ͱ ͳ͘ɺਅʹRubyͷൃలΛئ͍ͬͯΔਓ͔Β͔͠ग़ͯ͜ͳ͍ݴ༿ ͩͱɺࢲ͜ΕΛݟͨͱ͖ʹײ͡·ͨ͠
• Έͳ͞ΜʹͬͯΒ͍͍ͨͱࢥͬͯࠓհ͠·ͨ͠
37 ᶅ ॳ৺ऀͰCFPΛग़ͯ͠ ɹ ྑ͍ͱ͍͏͜ͱ
38 • ࢲΤϯδχΞʹͳ͔ͬͯΒ·ͩ1ͰɺԿΛͱͬͯ ࣗ৴͕͋Δͱݴ͑·ͤΜ • ͔͠͠ɺRubyKaigiͱKaigi on RailsʹCFPΛग़ͯ͠Έ·ͨ͠ •
CFPͷaccept / reject ΛܾΊΔͷӡӦଆͳͷͰɺ ॳ৺ऀ͕ʢ͔ͨ͠͠ΒϨϕϧͷ͍ʣCFPΛఏग़ͯ͠ ୭ʹ໎͔͔Βͳ͍ͱࢥ͍·͢ • ࠷ॳΈΜͳॳ৺ऀͩͬͨͣ • Ή͠Ζॳ৺ऀͷൃද༰͕͞͞Δ͖ͬͱ͍Δͣ ॳ৺ऀͰCFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ
39 • CFPΛఏग़͢Δͱ͍͏ߦಈΛͨ͜͠ͱʹΑͬͯಘΒΕΔ ࣝܦݧɺਓͱͷग़ձ͍͕͋Δͱࢥ͍·͢ • ࠷ॳؾ͕Ҿ͚ͨΓͳ͔ͳ͔༐ؾ͕ग़ͳ͍͔͠Ε·ͤΜ͕ɺ ࢲͷΑ͏ʹࣝܦݧ͕গͳ͍ਓ͕CFPΛग़ͯ͠
໎͔͔͍ͬͯ·ͤΜ͠ɺग़ͯ͠Έͯྑ͔ͬͨͳͱײ͍ͯ͡·͢ • ͠໎͍ͬͯΔํ͕͓ΒΕͨΒɺ͜ͷ͕ͦͷਓͷഎதΛԡ͢ ͖͔͚ͬʹͳΔ͜ͱΛئ͍ͬͯ·͢ ॳ৺ऀͰCFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ
40 • Ruby master Feature #12142 ʢνΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ͷมߋͷఏҊ͕ߦΘΕͨ ɹεϨουʣ
• Rubyͷྻ(Array)Λຐվͯ͠ɺ࿈ྻͱͯͬͯ͠Έͨ ʢϋογϡςʔϒϧͷنଇΛࢀߟʹͨ͠هࣄʣ ࢀߟʹͨ͠هࣄ
͝ਗ਼ௌͲ͏͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
42 ಇ͘ͻͱͷ݈߁ΛੈքதʹΔ