Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ReDoS 検出の最先端 recheck の紹介 / State of the Art of ...
Search
TSUYUSATO Kitsune
March 04, 2022
Programming
10
3.8k
ReDoS 検出の最先端 recheck の紹介 / State of the Art of ReDoS Detection
YAPC::Japan::Online 2022
での発表資料です。
recheck:
https://makenowjust-labs.github.io/recheck
TSUYUSATO Kitsune
March 04, 2022
Tweet
Share
More Decks by TSUYUSATO Kitsune
See All by TSUYUSATO Kitsune
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
1.2k
最近の研究とか、RubyへのContributionとか / Recent My Study and Ruby Contributions
makenowjust
2
250
Make Parsers Compatible Using Automata Learning
makenowjust
3
12k
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
48
Regular Expressions, REXML, Automata Learning
makenowjust
0
410
オートマトン学習しろ / Do automata learning
makenowjust
3
480
#kaigieffect LT 2024 - rexml-css_selector: A REXML extension for supporting CSS selector
makenowjust
1
420
RubyKaigi 2024 - Make Your Own Regex Engine!
makenowjust
1
2k
正規表現改善報告する回 / Regexp memoization progress report
makenowjust
2
660
Other Decks in Programming
See All in Programming
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
ゲームの物理 剛体編
fadis
0
310
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
490
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
5.4k
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
20k
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
350
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.2k
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.4k
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
790
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
37
25k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
Why Our Code Smells
bkeepers
PRO
340
57k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Embracing the Ebb and Flow
colly
88
4.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Transcript
ϠόΠɻ
3F%P4ϠόΠɻ
·͡ͰϠόΠΑɺϚδϠόΠɻ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ ͜ͷίϐϖΛɺ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ ͜ͷਖ਼نදݱͰϚονϯά͢Δͱɺ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ඵ͔͔Δɻ ˞.BD#PPL1SP J ্Ͱ/PEF KTͰ࣮ߦͨ݁͠Ռ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ จࣈͰඵ͔͔ΔͷϠόΠɻ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ݱͷ$16͕ɺ ඵͰจࣈఔॲཧͰ͖ͳ͍Θ͚͕ͳ͍ɻ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ͡Ό͋Կ͕ѱ͍ʁ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ਖ਼نදݱͷϚονϯά࣌ؒͷരൃɺ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ͜Ε͕3F%P4ɻ
@MakeNowJust ౻࿘େ cYAPC::Japan::Online 2022 3F%P4ݕग़ͷ࠷ઌ SFDIFDLͷհ
ਖ਼نදݱͷϚονϯά࣌ؒ രൃ͢Δ
Ͳ͏ʹ͔ͯ͠ਖ਼نදݱΛ ҆શʹ͍͍ͨ ʮʜʜ%'"ܕͷϚονϯάʹ͢Εʁʯ ʮʜʜλΠϜΞτ͢Ε͍͍Μ͡Όͳ͍ʁʯ
ͯ͢ͷਖ਼نදݱͷϚονϯά͕࣌ؒ രൃ͢ΔΘ͚͡Όͳ͍ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
ਖ਼نදݱ͕҆શ͔Ͳ͏͔Λఆ͍ͨ͠ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
ˠ3F%P4ݕग़ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
രൃ͢Δਖ਼نදݱͷಛ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
ਖ਼نදݱͷരൃͷํछྨ͋Δ จࣈྻͷ͞ ʹରͯ͠Ϛονϯά࣌ؒͷ࠷ѱܭࢉྔ͕ɺ ʹͳΔ ࢦతͳ ߹ ɹྫ/^(fizz|buzz|fizzbuzz)*$/ ߈ܸจࣈྻ('fizzbuzz' x
27) . 'x' ɹจࣈҎԼͰ߈ܸͰ͖ΔͨΊͱͯϠόΠɻ ʹͳΔ తͳ ߹ ɹྫ/^<[^<]*@[^>]*>$/ ߈ܸจࣈྻ'<' . ('@' x 54773) ɹ߈ܸʹઍʙສจࣈඞཁͳͨΊɺۓٸΊɻ ɹ͔͠͠ɺ4UBDL0WFS fl PX$MPVE fl BSF͕࣮ࡍʹ3F%P4Ͱμϯͨ͠ͷ͜ͷέʔεɻ n O(2n) O(n2)
ʹͳΔ ࢦతͳ ߹ͷಛ O(2n) ܁Γฦ͠ͷதͷϚονϯάͷํ͕ᐆດ ྫ͑/^(fizz|buzz|fizzbuzz)*$/ͷ߹ɺ "fizzbuzz"ͷϚονϯάͷํ͕ɺ 1."fizzbuzz"ͱ2."fizzbuzz"ͷ௨Γ͋Δɻ
"fizzbuzz"͕OݸฒΜͰ͍ͯ࠷ޙͰόοΫτϥοΫ͢Δͱɺ ྆ํͷ௨ΓํΛͦΕͧΕʹରͯ͠ࢼ͞ͳ͚Ε͍͚ͳ͍ͨΊɺ ࢦతͳ ͷܭࢉྔʹͳΔɻ O(2n)
ʹͳΔ తͳ ߹ͷಛ O(n2) ͭͷ܁Γฦ͠ͱͦͷؒͷϚονϯάͷํ͕ᐆດ ྫ͑/^<[^<]*@[^>]*>$/ͷ߹ɺ "@"ͷจࣈͰ[^<]*ͱ[^>]*Λ܁Γฦ͢ͷͱ @Ͱ܁Γฦ͠ΛҠಈ͢Δ͜ͱ͕Ͱ͖Δɻ
"@"͕OݸฒΜͰ͍ͯ࠷ޙͰόοΫτϥοΫ͢Δͱɺ Ͳ͜Ͱࠨ͔Βӈͷ܁Γฦ͠ʹҠಈ͢Δ͔͕ᐆດʹͳΔͨΊɺ తͳ ͷܭࢉྔʹͳΔɻ O(n2)
͡Ό͋ਖ਼نදݱΛݟͯ அ͢Ε͍͍ʁ
ͦΕ݁ߏ͍͠ ׳ΕΔͱ݁ߏΕΔ͚Ͳɺ ਖ਼֬ੑΛอূ͢Δͷ͍͠ ਖ਼نදݱSFHFYMJCDPNΑΓ /([^\.\?\!]*)[\.\?\!]/ /"((\\")|[^"(\\")])+"/ /^[0-9]{1,}(,[0-9]+){0,}$/ /"[^"\r\n]*"/
/(\S*)+(\u007C)+(\S*)/ /\s*[a-zA^Z,\s]+\s*$/
ΦʔτϚτϯʹมͯ͠ΈΑ͏
ʹͳΔ ࢦతͳ ߹ͷಛ O(2n) &%" &YQPOFOUJBM%FHSFF"NCJHVJUZ ߏ q fizz buzz
fizzbuzz q w w ͋Δจࣈྻ Ͱ͋Δঢ়ଶ ʹ ͬͯ͘Δํ๏͕௨Γ͋Δ w q q fizzbuzz fizzbuzz ཧ
ʹͳΔ తͳ ߹ͷಛ O(n2) *%" *O fi OJUF%FHSFF"NCJHVJUZ ߏ q1
q2 [^<] [^>] @ q1 q2 w ಉ͡จࣈྻ Ͱঢ়ଶ ʹͬͯ͜Εͯɺ ͦͷؒભҠͰ͖Δɻ w q1 , q2 w w
&%"ߏɾ*%"ߏͷ୳ࡧΞϧΰϦζϜ ΦʔτϚτϯͷੵߏͷΑ͏ʹͯ͠ঢ়ଶΛʹͨ͠ΦʔτϚτϯΛߏ͢Δɻ ͷͱ͖ʹ ͜ͷભҠؔΛڧ࿈݁ղͯ͠ɺ ಉ͡ڧ࿈݁ʹ ͱ
ͨͩ͠ ͷΑ͏ͳ ঢ়ଶͷ͕͋Ε&%"ߏ͕ଘࡏ͢Δɻ *%"ߏͷ߹ɺঢ়ଶΛͭʹͯ͠ ͱ ͷΑ͏ͳΛ୳͢͜ͱͰൃݟͰ͖Δɻ q11 a q12 ∧ q21 a q22 (q11 , q21 ) a (q12 , q22 ) (q1 , q1 ) (q2 , q3 ) q2 ≠ q3 (q1 , q1 , q2 ) (q1 , q2 , q2 )
&%"ߏɾ*%"ߏͷੑ࣭ &%"ߏ͕ଘࡏ͢Δ Ϛονϯάͷ࠷ѱܭࢉྔ͕ࢦతʹͳΔ *%"ߏ͕ଘࡏ͢Δ Ϛονϯάͷ࠷ѱܭࢉྔ͕తʹͳΔɻ ͭ·Γɺ ɹɹ&%"ߏɾ*%"ߏͷଘࡏΛఆ͢Δ͜ͱͰɺ ɹɹਖ਼نදݱͷϚονϯά͕࣌ؒരൃ͢Δ͔
ɹɹཧతʹਖ਼֬ʹఆͰ͖Δɻ ⟺ ⟺
3F%P4ݕग़ɾ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʜʜʁ
ຊʹʁ
ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ༗ݶঢ়ଶΦʔτϚτϯΛར༻͍ͯ͠ΔͷͰɺ มͷͰ͖ͳ͍ޙํࢀর \1, \2 ͷΑ͏ͳ֦ு͕͋Δͱղੳ͕ෆՄೳɻ /<(\w+)>(.*?)<\/\1>/
/(["'])[^"']+\1/
ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ղੳΞϧΰϦζϜͷܭࢉྔঢ়ଶʹରͯ͠ ͱɺ ෳࡶͳਖ਼نදݱͷ߹ղੳʹ͕͔͔࣌ؒΔɻ ͞ΒʹɺόοΫτϥοΫͷڍಈΛਖ਼֬ʹ࠶ݱ͢Δ߹ܾఆԽ͕ඞཁʹͳΓɺ ͦͷ߹ͷղੳͷܭࢉྔࢦతʹͳͬͯ͠·͏ɻ O(n6)
/(\w+(\.\w+)*)@(([\w\-]{1,32}\.){0,4}[a-zA-Z]{1,32}|\[(\d{0,3}(\.\d{0,3}){0,4})\])/
ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ͭ·Γɺਖ਼نදݱ͕ෳࡶͳ߹ɺਖ਼نݴޠͰͳ͍֦ுʹରͯ͠ɺ ΦʔτϚτϯͷղੳʹΑΔݕग़ແྗ /<(\w+)>(.*?)<\/\1>/ /(["'])[^"']+\1/ /(\w+(\.\w+)*)@(([\w\-]{1,32}\.){0,4}[a-zA-Z]{1,32}|\[(\d{0,3}(\.\d{0,3}){0,4})\])/
3F%P4ݕग़ͷ࠷ઌ
ಈతղੳ ࣮ࡍʹϚονϯάΛߦͳͬͯɺ࣌ؒͷ͔͔ΔͷΛ୳͢ ਖ਼نදݱ ࣮ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ
ͱͯ͠ݕग़ "foo" จࣈྻ
ϑΝδϯά จࣈྻΛϥϯμϜʹͨ͘͞Μੜͯ͠ɺಈతղੳΛ͢Δ "foo" "bar" "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ ࣮
ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ ͱͯ͠ݕग़
ҨతΞϧΰϦζϜ Ϛονϯάʹ࣌ؒͷ͔͔ΔจࣈྻΛֻ͚߹Θͤͯɺ ΑΓ࣌ؒͷ͔͔ΔจࣈྻΛੜ͢Δ ҨతΞϧΰϦζϜͰ Ϛονϯά࣌ؒΛ૿Ճͤ͞Δ "foo" "bar"
"foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ ࣮ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ ͱͯ͠ݕग़
ϑΝδϯάʹΑΔ3F%P4ݕग़ ಈతղੳʹΑΔ3F%P4ݕग़ख๏ɻ ϥϯμϜੑ͕͋ΔͷͰਖ਼֬ੑʹ͕͋Δ͕ Ͱ͖ͳ͍ΑΓϚγ ɺ ޙํࢀরͳͲͷ֦ுঢ়ଶͷଟ͘ͳΔෳࡶͳਖ਼نදݱʹରԠͰ͖Δɻ ҨతΞϧΰϦζϜͰ Ϛονϯά࣌ؒΛ૿Ճͤ͞Δ
"foo" "bar" "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ ࣮ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ ͱͯ͠ݕग़
ϑΝδϯά࠷ڧʁ
ͳ߹ͷ߈ܸจࣈྻ ઍʙສจࣈ O(n2)
Ԑ͕γΣΠΫεϐΞΛॻ͘ͷΛ ͭΘ͚ʹ͍͔ͳ͍ ͍͘ΒҨతΞϧΰϦζϜΛͬͯɺ ສจࣈͷ࠷దԽΛ্ख͘ߦ͏Ͱ͖Δ͔ӡήʔͳͷͰɺ ͷ߹͏·͘ൃݟͰ͖ͳ͍͜ͱ͕ଟ͘ͳͬͯ͠·͏ O(n2)
จࣈྻͷ܁Γฦ͠ߏ Ϛονϯά࣌ؒΛരൃͤ͞Δจࣈྻ෦తʹ܁Γฦ͍ͯ͠Δɻ ྫ('fizzbuzz' x 27) . 'x' '<' .
('@' x 54773) ੜ͞ΕΔจࣈྻʹ࣍ͷ จࣈΛ܁Γฦ͢ͱ͍͏ҙຯͷه߸ ΛՃͯ͠ɺ ͦΕΛؚΊͯϑΝδϯάΛߦ͏ɻ ͜ΕʹΑͬͯɺతͳ߹ͰϑΝδϯάʹΑͬͯݕग़͕ՄೳʹͳΔɻ n □ n
ϑΝδϯά࠷ڧ ͲͷΑ͏ͳ߹Ͱരൃ͢Δਖ਼نදݱΛਖ਼͘͠ൃݟͰ͖ΔΑ͏ʹͳͬͨ
࣮ʁ
None
SFDIFDL ൃදऀ !.BLF/PX+VTU ͷ։ൃ͍ͯ͠Δ3F%P4ݕग़ϥΠϒϥϦɻ ࣮ݴޠ4DBMBɻ+BWB4DSJQU͔Βར༻Մೳɻ ࠓճઆ໌ͨ͠ɺΦʔτϚτϯͷղੳʹΑΔํ๏ͱϑΝδϯάʹΑΔํ๏ͷ ྆ํͷํ๏Λ࣮͍ͯ͠Δɻ IUUQTNBLFOPXKVTUMBCTHJUIVCJPSFDIFDL
ΦʔτϚτϯͷղੳਖ਼͚֬ͩͲɺ ͕͔͔࣌ؒΓͦ͏ͳ߹ϑΝδϯάʹΓସ͍͑ͨ
ݕग़ख๏ͷࣗಈΓସ͑ SFDIFDLͰɺՄೳͳݶΓΦʔτϚτϯͷղੳʹΑΔख๏Λͬͯɺ ࣌ؒతɾਫ਼తʹϑΝδϯάͷํ͕దͩͱஅͨ͠߹ʹɺ ϑΝδϯάʹΓସ͑Δػೳ͕࣮͞Ε͍ͯΔɻ σϑΥϧτͰ͜ͷϞʔυʹͳ͍ͬͯΔɻ ͲͪΒ͕ద͔ɺਖ਼نදݱͷେ͖͞
ΦʔτϚτϯͷঢ়ଶͳͲ͔Βஅ͞ΕΔɻ
ରԠ͍ͯ͠Δਖ਼نදݱͷํݴ ݱࡏ+BWB4DSJQUͷਖ਼نදݱʹͷΈରԠɻ /&5 +BWB 1$3& 1FSM 1ZUIPO 3VCZͷਖ਼نදݱͷରԠΛ࣮தɻ +BWB4DSJQUҎ֎ͷݴޠͷਖ਼نදݱ͋·Γݫີͳ༷͕ͳ͍ͷͰɺ
ͳΜͱͳ͘ରԠ͢Δ༧ఆɻ
࣮ؒʹ߹Θͳͯ͘ ͝ΊΜͳ͍͞
͍ํ ී௨ʹϥΠϒϥϦͱͯ͑͠Δɻ const { check } = require('recheck'); console.log(await
check('^(a|a)*$', '')); &4-JOUͷϓϥάΠϯ eslint-plugin-redos ެ։͍ͯ͠ΔͷͰɺ &4-JOUΛ͍ͬͯΔϓϩδΣΫτʹ͙͢ʹಋೖՄೳɻ
IUUQTNBLFOPXKVTUMBCTHJUIVCJPSFDIFDLQMBZHSPVOE
ݸͷਖ਼نදݱͷ3F%P4ݕग़ʹඵɻ ฏۉͯ͠ɺਖ਼نදݱݸลΓඵఔɻ ମײͱͯ͠ɺ$*ͳͲͰར༻͢Δʹे͑Δɻ ΤσΟλͳͲͰϦΞϧλΠϜʹݕग़͠ଓ͚Δͱɺͪΐͬͱ͔ͨͭ͘ɻ
࣮ ࣮ࡍʹ͍͔ͭ͘ͷϥΠϒϥϦͷ੬ऑੑΛൃݟɺใࠂ͍͍ͯ͠Δɻ NBSLEPXOJU ɾIUUQTHJUIVCDPNNBSLEPXOJUNBSLEPXOJUTFDVSJUZBEWJTPSJFT()4"WGDRWGWSD NBSLFE ɾIUUQTHJUIVCDPNNBSLFEKTNBSLFETFDVSJUZBEWJTPSJFT()4"SSSNRKNWIG ɾIUUQTHJUIVCDPNNBSLFEKTNBSLFETFDVSJUZBEWJTPSJFT()4"WISDYYHK
SFDIFDLΛͬͯ੬ऑੑΛൃݟͨ͠߹ɺͪ͜Βʹ࿈བྷ͍͚ͯͨͩ͠Δͱ͋Γ͕͍ͨͰ͢ɻ
͋ͳͨͱSFDIFDLɺ ࠓ͙͢μϯϩʔυ
ൃදͷ·ͱΊ w 3F%P4ݕग़ֶతʹఆࣜԽͰ͖Δղ͚Δɻ ͳΜ͔;Θͬͱͨ͠ؾͰܭࢉྔ͕രൃ͢ΔΘ͚Ͱͳ͍ɻ w ͱ͍͑ݱ࣮ͷਖ਼نදݱΛରʹ͢Δͱ͕͋ΔͷͰɺ ϑΝδϯάͳͲΛซ༻͢Δͷ͕࠷ઌͷ3F%P4ݕग़ɻ w
3F%P4ݕग़ϥΠϒϥϦͱͯ͠SFDIFDL͕͋Δɻ͍ͬͯͬͯͩ͘͞ɻ w ͱ͍͑શʹਖ਼֬ͳ3F%P4ݕग़Λݱ࣮తͳ࣌ؒͰߦ͏ͷ ΄ͱΜͲෆՄೳͳͷͰɺݕग़݁Ռ͚ͩΛݟͯ҆શͩͱஅͤͣɺ λΠϜΞτͳͲΛೖΕΔͷॏཁɻ
ݕূϑΣʔζ ࣮ࡍͷਖ਼نදݱ࣮࠷దԽͳͲ͕͞Ε͍ͯͯɺ ཧ௨ΓʹϚονϯά͕࣌ؒ૿Ճ͠ͳ͍Մೳੑ͕͋Δɻ ͦͷΑ͏ͳ߹ͷͨΊʹSFDIFDLͰɺ ಘΒΕͨ߈ܸจࣈྻΛ࣮ࡍʹॲཧܥʹೖྗͯ͠ɺ Ϛονϯάʹ͕͔͔࣌ؒΔ͔ݕূ͢Δػೳ͕ར༻Ͱ͖·͢ɻ ͕͔͔࣌ؒΔͷͰσϑΥϧτͰແޮ