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
58
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
470
PRODUCT HISTORY CONFERENCE 2024の裏側
krpk1900
0
49
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
1.1k
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
730
今日で分かる!カスタムコップの作り方
krpk1900
2
1.1k
SNS特有のタイムライン機能におけるYOUTRUSTの工夫点
krpk1900
0
42
技術的負債に対してカスタムコップでできること
krpk1900
0
570
サービスを軌道に乗せるまで一人でやったすべてのこと
krpk1900
20
7.9k
RailsアプリでのCQSの運用を支える仕組みと文化
krpk1900
0
89
Other Decks in Programming
See All in Programming
RubyKaigi Hack Space in Tokyo & 函館最速 "予習" 会 / RubyKaigi Hack Space in Tokyo & The Fastest Briefing of RubyKaigi 2026 in Hakodate
moznion
1
120
External SecretsのさくらProvider初期実装を担当しています
logica0419
0
240
Language Server と喋ろう – TSKaigi 2025
pizzacat83
2
670
TypeScriptのmoduleオプションを改めて整理する
bicstone
4
420
テスト分析入門/Test Analysis Tutorial
goyoki
11
2.7k
〜可視化からアクセス制御まで〜 BigQuery×Looker Studioで コスト管理とデータソース認証制御する方法
cuebic9bic
1
260
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
270
Practical Domain-Driven Design - Workshop at NDC 2025
mufrid
0
130
CQRS/ESのクラスとシステムフロー ~ RailsでフルスクラッチでCQRSESを組んで みたことから得た学び~
suzukimar
0
190
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.6k
イベントソーシングとAIの親和性ー物語とLLMに理解できるデータ
tomohisa
1
160
Use Perl as Better Shell Script
karupanerura
0
650
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
76
5.8k
Building Adaptive Systems
keathley
41
2.6k
Making Projects Easy
brettharned
116
6.2k
Automating Front-end Workflow
addyosmani
1370
200k
For a Future-Friendly Web
brad_frost
178
9.7k
The Pragmatic Product Professional
lauravandoore
35
6.7k
How to train your dragon (web standard)
notwaldorf
92
6k
Facilitating Awesome Meetings
lara
54
6.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
4 Signs Your Business is Dying
shpigford
183
22k
BBQ
matthewcrist
88
9.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
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 ಇ͘ͻͱͷ݈߁ΛੈքதʹΔ