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.7k
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 Parsers Compatible Using Automata Learning
makenowjust
3
9.9k
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
39
Regular Expressions, REXML, Automata Learning
makenowjust
0
370
オートマトン学習しろ / Do automata learning
makenowjust
3
320
#kaigieffect LT 2024 - rexml-css_selector: A REXML extension for supporting CSS selector
makenowjust
1
410
RubyKaigi 2024 - Make Your Own Regex Engine!
makenowjust
1
1.8k
正規表現改善報告する回 / Regexp memoization progress report
makenowjust
2
630
Make Regexp#match much faster
makenowjust
1
2.8k
ReDoS 検出プログラム recheck の開発 / recheck: ReDoS check program
makenowjust
0
180
Other Decks in Programming
See All in Programming
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
41
16k
Advanced Micro Frontends: Multi Version/ Framework Scenarios
manfredsteyer
PRO
0
130
Quality Gates in the Age of Agentic Coding
helmedeiros
PRO
1
120
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.3k
NEWT Backend Evolution
xpromx
1
170
AI Agent 時代のソフトウェア開発を支える AWS Cloud Development Kit (CDK)
konokenj
6
1k
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1k
MCPで実現できる、Webサービス利用体験について
syumai
7
2.3k
Go製CLIツールをnpmで配布するには
syumai
2
1k
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
330
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
17
3.6k
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamlab
PRO
0
400
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
70
11k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
860
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Navigating Team Friction
lara
188
15k
Designing for Performance
lara
610
69k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Embracing the Ebb and Flow
colly
86
4.8k
RailsConf 2023
tenderlove
30
1.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
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Ͱɺ ಘΒΕͨ߈ܸจࣈྻΛ࣮ࡍʹॲཧܥʹೖྗͯ͠ɺ Ϛονϯάʹ͕͔͔࣌ؒΔ͔ݕূ͢Δػೳ͕ར༻Ͱ͖·͢ɻ ͕͔͔࣌ؒΔͷͰσϑΥϧτͰແޮ