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
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
730
最近の研究とか、RubyへのContributionとか / Recent My Study and Ruby Contributions
makenowjust
2
240
Make Parsers Compatible Using Automata Learning
makenowjust
3
11k
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
44
Regular Expressions, REXML, Automata Learning
makenowjust
0
400
オートマトン学習しろ / Do automata learning
makenowjust
3
460
#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
Module Harmony
petamoriken
2
540
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
460
Level up your Gemini CLI - D&D Style!
palladius
1
100
目的で駆動する、AI時代のアーキテクチャ設計 / purpose-driven-architecture
minodriven
10
3.3k
r2-image-worker
yusukebe
1
180
Nitro v3
kazupon
2
320
モビリティSaaSにおけるデータ利活用の発展
nealle
0
580
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
120
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
170
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
1.9k
Phronetic Team with AI - Agile Japan 2025 closing
hiranabe
2
670
高単価案件で働くための心構え
nullnull
0
160
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Mobile First: as difficult as doing things right
swwweet
225
10k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.1k
How GitHub (no longer) Works
holman
315
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Faster Mobile Websites
deanohume
310
31k
Visualization
eitanlees
150
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Building Adaptive Systems
keathley
44
2.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Writing Fast Ruby
sferik
630
62k
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Ͱɺ ಘΒΕͨ߈ܸจࣈྻΛ࣮ࡍʹॲཧܥʹೖྗͯ͠ɺ Ϛονϯάʹ͕͔͔࣌ؒΔ͔ݕূ͢Δػೳ͕ར༻Ͱ͖·͢ɻ ͕͔͔࣌ؒΔͷͰσϑΥϧτͰແޮ