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
41
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
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
210
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
今日で分かる!カスタムコップの作り方
krpk1900
2
600
SNS特有のタイムライン機能におけるYOUTRUSTの工夫点
krpk1900
0
23
技術的負債に対してカスタムコップでできること
krpk1900
0
470
サービスを軌道に乗せるまで一人でやったすべてのこと
krpk1900
20
7.7k
RailsアプリでのCQSの運用を支える仕組みと文化
krpk1900
0
54
Kaigi on Rails 2023 〜運営の裏側〜
krpk1900
0
910
Fat Modelを解消するためのCQRSアーキテクチャ
krpk1900
6
8.8k
Other Decks in Programming
See All in Programming
Better Code Design in PHP
afilina
PRO
0
120
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
CSC509 Lecture 12
javiergs
PRO
0
160
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
2
1.1k
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
みんなでプロポーザルを書いてみた
yuriko1211
0
260
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
Arm移行タイムアタック
qnighy
0
320
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
600
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Scaling GitHub
holman
458
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
860
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
A designer walks into a library…
pauljervisheath
203
24k
A Philosophy of Restraint
colly
203
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Practical Orchestrator
shlominoach
186
10k
Writing Fast Ruby
sferik
627
61k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
GitHub's CSS Performance
jonrohan
1030
460k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
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 ಇ͘ͻͱͷ݈߁ΛੈքதʹΔ