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 Date.parseの意外な挙動〜
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
sg4k0
November 17, 2025
Programming
0
470
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
YAPC::Fukuoka 2025の2025/11/14に開催されたU29セッションの登壇資料です。
sg4k0
November 17, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
190
CSC307 Lecture 11
javiergs
PRO
0
580
CSC307 Lecture 12
javiergs
PRO
0
450
Geminiの機能を調べ尽くしてみた
naruyoshimi
0
190
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
120
Rails Girls Tokyo 18th GMO Pepabo Sponsor Talk
yutokyokutyo
0
180
Ruby x Terminal
a_matsuda
5
530
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
820
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
430
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
130
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
110
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
130
A Modern Web Designer's Workflow
chriscoyier
698
190k
So, you think you're a good person
axbom
PRO
2
1.9k
The Cost Of JavaScript in 2023
addyosmani
55
9.7k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
280
Prompt Engineering for Job Search
mfonobong
0
180
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
300
Designing for humans not robots
tammielis
254
26k
Transcript
© SmartHR, Inc. 「⽂字列→⽇付」の落とし⽳ 〜Ruby Date.parseの意外な挙動〜 YAPC::Fukuoka 2025 U29セッションスポンサーLT ⽥中
優輝 SmartHR プロダクトエンジニア 2025/11/14
⾃⼰紹介 • tanayu(⽥中優輝) • 株式会社SmartHR(2023/04〜) ◦ 労務の基本機能を開発 ◦ プロダクトエンジニアで主にバックエンドを担当 •
福岡在住 • YAPC初参加!
None
4
5
技術スタック • Ruby on RailsやReactなど ◦ Rubyの業務経験なしで⼊社されている⽅も2〜3割います • Claude CodeなどAI開発⽀援ツールも利⽤可
• 詳細はSmartHR エンジニア採⽤をご覧ください ◦ https://hello-world.smarthr.co.jp 6
働き⽅ • フルフレックス(コアタイムなし) • エンジニアはフルリモートワーク可 ◦ 出社⽇数の指定なし • ワーケーションも可 •
⼊社⽇に15⽇の有給付与 • 勉強会やカンファレンス参加⽀援 7
積極採⽤中!! • エンジニアはもちろん、QAやPM、その他業種も 積極採⽤中です! • 新卒採⽤もやっており、積極採⽤中です! • 少しでも興味を持たれたら、カジュアル⾯談も やっているのでお気軽にどうぞ! •
愛する福岡から離れられないという⽅もぜひ! 8
SmartHRの増えてくアクキー • このパーカーを着ている⼈が配っていますの で、ぜひ声をかけていただき、交流してくださ い! 9 メンバーが着ているパーカー 配っているアクキー
None
突然ですが皆さんは ⽂字列を⽇付として扱いたいとき ありませんか!?
⼤体こんなときに使いたい • ユーザーが⼊⼒した内容をDBの⽇付型カラ ムに保存したい • 1週間後の⽇付を取得したい • 特定の⽇から何⽇経過しているのか算出し たい 12
Rubyだとメソッドが⽤意されている 13 出典:Date.parse (Ruby 3.4 リファレンスマニュアル ) Date.parse('2025-11-14') => #<Date:
2025-11-14 ((2460994j,0s,0n),+0s,2299161j)>
parseは元号にも対応している • 元号付きの⽇付を⼊⼒してもOK • RubyのDate.parseはC⾔語で書かれている ◦ RubyにはC ⾔語で書かれたネイティブコードを呼 び出す仕組みがある 14
Date.parse('R7.11.14') => #<Date: 2025-11-14 ((2460994j,0s,0n),+0s,2299161j)>
とある⽇謎の挙動を観測 • 開発の検証中に「平成30年6⽉1⽇」と⼊⼒ するとParseの結果が「2025-11-30」にな る事象に遭遇した • この謎の挙動を究明すべくアマゾンの奥地 へ向かった 15
突然ですがクイズです! 正しく変換されるのはどれ!? 1. 2025年11⽉14⽇ 2. 令和7年11⽉14⽇ 16
正解は〜 全部想定外の⽇付でした! 1. 2025年11⽉14⽇ →invalid dateエラー 2. 令和7年11⽉14⽇ →2025-11-11 ⼀体何が起きている!?
17
実装を眺めてみた 18 C⾔語で書かれた処理を眺めました。内部実装⾒るの楽しい! 出典:date_parse.c
内部ではこんなことが起きていた • ハイフン区切りやスラッシュ区切りなどに該当しなかった場 合の処理が⾏われていた ◦ Date.parse(ʻ12’)などのときに動作する処理 • ⽂字列中の「2桁以上14桁以下の連続した数字」で⼀番⼤き い値を抽出 •
抽出された数字の桁数で分類 ◦ 2桁は⽇、3桁は年間通算⽇(1/1から数えて何⽇⽬)、4桁は⽉⽇など • ⾜りない桁数は現在の年⽉⽇で補われる 19
つまり先程のクイズだと… 1. 2025年11⽉14⽇ →2025が抽出され、20⽉25⽇と判断しエラー 2. 令和7年11⽉14⽇ →14が抽出され、14⽇と判断し2025-11-14 20
Date.parseはバリデータではない • Date.parseはバリデーションの役割を担っているわけではな い ◦ ドキュメントにも「This method **does not** function
as a validator.」と書かれていた ▪ https://ruby-doc.org/stdlib-3.0.0/libdoc/date/rdoc/Date.html#method-c-_par se • 検証していた実装は変換できない場合のみエラーにする実装 になっており、パースで検知する仕組みになっていた ◦ バリデーションとパースの責務は分離する 21
まとめ
• ⼊⼒された値をバリデーションもせずに変 換処理を実⾏しない • 変換処理に限らず、どんな処理でも値を渡 す際は処理側が期待している値かチェック が必要 • 標準で⽤意されているメソッドの内部を追 うのは楽しい
23
おわり
【再び】積極採⽤中!! • エンジニアはもちろん、QAやPM、その他業種も 積極採⽤中です! • 新卒採⽤もやっており、積極採⽤中です! • 少しでも興味を持たれたら、カジュアル⾯談も やっているのでお気軽にどうぞ! •
愛する福岡から離れられないという⽅もぜひ! 25