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
10k
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
39
Regular Expressions, REXML, Automata Learning
makenowjust
0
370
オートマトン学習しろ / Do automata learning
makenowjust
3
330
#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
リバースエンジニアリング新時代へ! GhidraとClaude DesktopをMCPで繋ぐ/findy202507
tkmru
7
1.7k
DataformでPythonする / dataform-de-python
snhryt
0
150
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
4
2.4k
Workers を定期実行する方法は一つじゃない
rokuosan
0
140
実践 Dev Containers × Claude Code
touyu
1
120
JetBrainsのAI機能の紹介 #jjug
yusuke
0
180
NEWT Backend Evolution
xpromx
1
170
202507_ADKで始めるエージェント開発の基本 〜デモを通じて紹介〜(奥田りさ)The Basics of Agent Development with ADK — A Demo-Focused Introduction
risatube
PRO
6
1.4k
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
710
AIのメモリー
watany
12
1.2k
Advanced Micro Frontends: Multi Version/ Framework Scenarios
manfredsteyer
PRO
0
140
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
3
390
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
A Tale of Four Properties
chriscoyier
160
23k
The Cult of Friendly URLs
andyhume
79
6.5k
GitHub's CSS Performance
jonrohan
1031
460k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Faster Mobile Websites
deanohume
308
31k
Adopting Sorbet at Scale
ufuk
77
9.5k
Building Adaptive Systems
keathley
43
2.7k
Optimizing for Happiness
mojombo
379
70k
Become a Pro
speakerdeck
PRO
29
5.5k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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Ͱɺ ಘΒΕͨ߈ܸจࣈྻΛ࣮ࡍʹॲཧܥʹೖྗͯ͠ɺ Ϛονϯάʹ͕͔͔࣌ؒΔ͔ݕূ͢Δػೳ͕ར༻Ͱ͖·͢ɻ ͕͔͔࣌ؒΔͷͰσϑΥϧτͰແޮ