Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
my new error
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
sadnessOjisan
March 19, 2023
Programming
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
my new error
sadnessOjisan
March 19, 2023
More Decks by sadnessOjisan
See All by sadnessOjisan
Cloudflare Workers で Rust 選ぶ理由 is 何?
sadnessojisan
1
200
AIエージェントが動かないときの原因とその対処
sadnessojisan
2
160
React のルーター事情
sadnessojisan
1
660
PHPこそ OpenTelemetry が嬉しい
sadnessojisan
2
490
TypeScript、上達の瞬間
sadnessojisan
54
19k
フロントエンド・オブザーバビリティを支える要素技術を学ぼう
sadnessojisan
2
1k
疎通2024
sadnessojisan
5
1.7k
BasicBasic認証
sadnessojisan
5
5k
ISUCON入門以前_ISUNARABE_LT#1
sadnessojisan
21
6.7k
Other Decks in Programming
See All in Programming
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
450
スマート反転とウェブアクセシビリティ
camiha
0
180
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
280
新卒PdEのリアル
ryu1013
1
490
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
300
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
160
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
So, you think you're a good person
axbom
PRO
2
2.1k
Agile that works and the tools we love
rasmusluckow
331
22k
Being A Developer After 40
akosma
91
590k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The agentic SEO stack - context over prompts
schlessera
0
920
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Tell your own story through comics
letsgokoyo
1
1.1k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Transcript
My New Error… It is my new era. 1 Nikkei
Inc. Yuta Ide(@sadnessOjisan) YAPC::Kyoto 2023
ࣗݾհ { “໊લ”: “Yuta Ide”, “ॴଐ”: “ຊܦࡁ৽ฉࣾ”, “ࣄ”: [“Frontend”, “CDN
Edge”, “BFF Server”] } 2
3
4
ࢲͱ Try Catch • 2022/10/01 - 2022/12/31 ͷ̏ϲ݄ؒɺΞϥʔτࢹͷࣄ ͚ͩΛ͢Δ •
ࢲͷνʔϜ̏̌ݸ͍ۙϨϙδτϦ͕Քಇ͍ͯ͠ΔϚΠΫϩαʔϏεڥͰɺ ֤αʔϏε͕ग़ྗ͢ΔΤϥʔϩά͕ Slack ʹ࿈ܞ͞ΕΔ • ΤϥʔϋϯυϦϯά͕ෆेͳαʔϏε͔Βͷग़ྗʹ·͞ΕΔ 5
Nikkei Tech Talk Ͱͷհ • Nikkei Tech Talk ܦͷΤϯδχΞ৫ ͷษڧձ
• #3 ͷϑϩϯτΤϯυճͰΞϥʔτվળͷ औΓΈΛհ 6 https://speakerdeck.com/sadnessojisan/jian-shi- senaakansi-wu-da-zhi-dakeniookamitutena
Nikkei Tech Talk Ͱͷհ • Nikkei Tech Talk ܦͷΤϯδχΞ৫ ͷษڧձ
• #3 ͷϑϩϯτΤϯυճͰΞϥʔτվળͷ औΓΈΛհ 7 https://speakerdeck.com/sadnessojisan/jian-shi- senaakansi-wu-da-zhi-dakeniookamitutena ΦΦΧϛ
ΦΦΧϛগͷରॲΛհͨ͠ • લऀෆࡏͰՔಇதͷαʔϏε܈͕SlackͷΞϥʔτνϟϯωϧΛຒΊਚ͘͠ ͍ͯͨ • ۓٸͷ͍Τϥʔ͕ଟ͘ɺʮͲ͏ͤۓٸ͍͔Βݟͳ͍͍ͯ͘ʯͱ͍ ͏ΦΦΧϛগ͕ਂࠁͩͬͨ • ̏ϲ݄͔͚ͯमਖ਼ͨۤ͠ಆͷه͕ઌͷεϥΠυ •
Ξϥʔτͷऩू • Ξϥʔτϩά͕Ͳ͔͜Βൃ͍ͯ͠Δ͔ίʔυϨϕϧͰ͍͔͚Δ • ΞϥʔτͷઃఆΛݟ͢ 8
ݸਓϒϩάͰͷհ - My new error… - • ʮ͜͏͍͏ΤϥʔϋϯυϦϯάΛ͢Ε ࢹ͍͢͠ʯͱ͍ͬͨςΫχοΫͷ հ
• Result • Custom Error • Error Cause • Sentry 9 https://blog.ojisan.io/my-new-error/
ݸਓϒϩάͰͷհ - Sentry SDK શཧղ - • Sentry SDKͷΈʹ͍ͭͯ •
Sentry ઃఆ߲͕ͱͯଟ͍͕ɺ Sentry ͷΈΛΕԿΛઃఆ͖͢ ͔͢͜͠ݟ͑ͯ͘Δ 10 https://blog.ojisan.io/sentry-sdk-kanzen-rikai/
ࠓͷొஃͰ͍ͨ͜͠ͱ • Nikkei Tech Talk: ෛ࠴ฦࡁ׆ಈͰͷΞϥʔτվળͷటष͍औΓΈΛհ • ϒϩά: ΤϥʔϋϯυϦϯάͷͨΊͷཧٕज़తͳςΫχοΫΛհ •
YAPC: ཧΛݱ࣮ͷطଘͷΞϓϦέʔγϣϯʹద༻͢Δ࣮ફʹϑΥʔΧε 11
ܦͰԿ͕ى͖͍͔ͯͨ 12
զʑͳͥΞϓϦέʔγϣϯࢹΛ͍ͨ͠ͷ͔ • োʹؾ͖͍ͮͨ • જࡏతͳোʹؾ͖͍ͮͨ 13
Ͳ͏͍͏πʔϧΛ͍͍͑ͷ͔ • PagerDuty: Φϯίʔϧ 14
Ͳ͏͍͏πʔϧΛ͍͍͑ͷ͔ • PagerDuty: Φϯίʔϧ • StatusCake: ֓ܗࢹ 15
Ͳ͏͍͏πʔϧΛ͍͍͑ͷ͔ • PagerDuty: Φϯίʔϧ • StatusCake: ֓ܗࢹ • Sentry: ϩΪϯάɺΞϥʔτ
16
Ͳ͏͍͏πʔϧΛ͍͍͑ͷ͔ • PagerDuty: Φϯίʔϧ • StatusCake: ֓ܗࢹ • Sentry: ϩΪϯάɺΞϥʔτ
• GCP / AWS: උ͚͑ͷϩάج൫ 17
Ͳ͏͍͏πʔϧΛ͍͍͑ͷ͔ • PagerDuty: Φϯίʔϧ • StatusCake: ֓ܗࢹ • Sentry: ϩΪϯάɺΞϥʔτ
• GCP / AWS: උ͚͑ͷϩάج൫ • Datadog: ϩάج൫ɺαʔϏεލ͍ͩ౷߹ɺΫΤϦ͕͍͢͠ 18
Ͳ͏͍͏πʔϧΛ͍͍͑ͷ͔ • PagerDuty: Φϯίʔϧ • StatusCake: ֓ܗࢹ • Sentry: ϩΪϯάɺΞϥʔτ
• GCP / AWS: උ͚͑ͷϩάج൫ • Datadog: ϩάج൫ɺαʔϏεލ͍ͩ౷߹ɺΫΤϦ͕͍͢͠ • Kibana: ݕࡧɺϏδϡΞϥΠζ 19
πʔϧʹΑΔใ൙ཞ • πʔϧͷׂ͕ඃ͍ͬͯΔ • Datadog cloud monitoring ΞϥʔτͰ͖Δ •
ͱ͍͑ɺతΛܾΊ͍ͯΔͷͰ͋Εݸผʹ͞·͟·ͳπʔϧΛಋೖ͢ Δ͜ͱࣗମྑ͍ͱ͞Ε͍ͯΔ • ͔͠͠ɺͦͷલఏͷڞ༗͕ෆेͩͱใ൙ཞ͕ൃੜ͢Δ • ʮ͜͏͍͏ো͕ى͖ͨͱ͖ԿΛݟΕ͍͍Ͱ͔͢ʁʯ 20
ܦͰͷোࢹ • Ξϥʔτͷߑਫ • ΦΦΧϛগ • ΞϥʔτΛಡΜͰԿͷΞϥʔτ͔͔Βͳ͍ • ͰΔ͖ϩάΞϥʔτ͕ग़͍ͯͳ͍ πʔϧಋೖ͞Ε͍ͯΔ͕ޮՌ͕ൃش͞Ε͍ͯͳ͍
21
ͳͥࢹ্͕ख͍͔͘ͳ͍͔ • ࣮ͷ: πʔϧͷྗΛൃشͰ͖͍ͯͳ͍ • ৫ͷ: ӡ༻ϧʔςΟϯͷઃܭ͕Ͱ͖͍ͯͳ͍ • ՔಇϦιʔεͷௐ •
ผҊ݅ͱͷ༏ઌॱҐͷௐ 22
ͳͥࢹ্͕ख͍͔͘ͳ͍͔ • ࣮ͷ: πʔϧͷྗΛൃشͰ͖͍ͯͳ͍ • ৫ͷ: ӡ༻ϧʔςΟϯͷઃܭ͕Ͱ͖͍ͯͳ͍ • ՔಇϦιʔεͷௐ •
ผҊ݅ͱͷ༏ઌॱҐͷௐ 23 ·࣮ͣͷʹऔΓΉ
ΤϥʔϋϯυϦϯάΛΕͳ͍ͨΊʹResultܕͷಋೖ • JS Ͱྫ֎ͷཧ try catch Ͱߦ ͏ • ͔͠͠Ͳͷ͕ؔྫ֎Λ͛Δ͔
ΛΒͳ͍ͱ try Λ͚Εͳ͍ • νʔϜ։ൃϥΠϒϥϦͷར༻ͳ Ͳɺ͕ࣗ࡞͍ͬͯͳ͍ίʔυΛ ݺͼग़͢ͱ͖ʹ͚ͭΕ͕ൃੜ͢ Δ 24
ΤϥʔϋϯυϦϯάΛΕͳ͍ͨΊʹResultܕͷಋೖ • ޭɾࣦഊΛ Result ͱ͍͏ܕͰද ݱ • type Result<T, E>
= { _tag: “success”, val: T} | {_tag: “err”, val: E } • TS ڥͰݺͼग़͠ଆʹޭ͔ࣦ ഊ͔ͷ֬ೝΛڧ੍ͤ͞ΒΕΔͷ ͰɺΤϥʔϋϯυϦϯάͷ͠Ε Λ͛Δ 25
Result ܕʹৼΓΔ͜ͱຊʹଥͳͷ͔ • ΦϒδΣΫτͷੜͱݕূਖ਼ৗܥʹ͓͍ͯʢແࢹͰ͖Δ΄ͲʹඍʑͨΔ ͷ͚ͩͲʣແବͳίετͰͳ͍͔ • ྻɺΦϒδΣΫτɺMapʹΞΫηεͨ͠ͱ͖ͷϋϯυϦϯάʹ Result ͕ ग़ͯ͘ΔͷͰͳ͍͔
• const a = [1]; const b = a[0]; ઈରʹ͕ೖ͍ͬͯΔ b Λ number ͱ͍ͯ͠ ͨͯ͘ܕ্Ͱ undefined, ྫ֎Λ͛ͨ͘ͳΒͳ͍Ͱ͔͢ʁ • ͦͦݴޠػೳͰͳ͍ͷʹཔΔͱຊདྷͷτϨʔε͕ෆਖ਼֬ʹͳΔͷͰ ͳ͍͔ 26
ϝϦοτʹΛ͚ͯ Resultܕ ͷಋೖͱ౿ΈΔ • ܦͷಛੑ্SSR͕ඞਢͰɺ෦తͳࢴ໘ੜʹ ࣦഊͨ͠ͱ͖ʹରԠ͍͢͠ • ৽ฉهࣄͷೖߘͱͯࣗ༝͕ߴ͘ɺΞϓϦ έʔγϣϯͷͲ͔͜Βྫ֎͕ඈΜͰ͘Δͷ͔༧ଌ Ͱ͖ͳ͍
• ༗ࣝऀʢRustaceanʣʹΑΔϋϯζΦϯ߈ུΨΠ υͷڞ༗ • Fastly C@E ͷಋೖͰ Rust ʹ׳Εͳ͍ͱ͍͚ͳ͍ • ଞνʔϜʹScalaͱKotlinͷൊ͕͋ΓɺResultܕࣗ ମʹର͢Δݟ͋Δ 27 https://hack.nikkei.com/blog/advent20221201/
ҰԠσϝϦοτʹΛ͚Δͱ • ΦϒδΣΫτͷੜͱݕূਖ਼ৗܥʹ͓͍ͯʢແࢹͰ͖Δ΄ͲʹඍʑͨΔͷ͚ͩ ͲʣແବͳίετͰͳ͍͔ => ແࢹɺύϑΥʔϚϯε͕ʹͳΔͳΒݦࡏԽ͔ͯ͠Βରࡦ͢Δ • ྻɺΦϒδΣΫτɺMapʹΞΫηεͨ͠ͱ͖ͷϋϯυϦϯάʹ Result
͕ग़ͯ͘Δͷ Ͱͳ͍͔ => ։ൃऀ͕ઈରʹ҆શͱ͍ͬͯΔͷͰ͋Εྫ֎Λ͛ΔɻྻʹΛ٧Ίͨޙʹऔ Γग़ͯͦ͠ͷͷ࣮ࡏΛݕূʢܕݕࠪ௨ͨ͢Ίʹʣͨ͠ͱ͖ɺྫ֎্͕͕ΔΘ͚͕ͳ͍ • ͦͦݴޠػೳͰͳ͍ͷʹཔΔͱຊདྷͷτϨʔε͕ෆਖ਼֬ʹͳΔͷͰͳ͍͔ • ؆୯ͳίϯϏωʔλ͚ͩΛ͏Α͏ʹ͠ɺ࠷ѱΘͣʹ۪ͳίʔυΛॻ͍ͯڐ༰ • functional programming ʹد͍ͤͨΘ͚Ͱͳ͍ 28
ResultܕΛಋೖ͢ΔʹίϯϏωʔλඞཁ • ResultͷΛ͏ͨΊʹຖճ Result Λ֎͢ඞཁ͕͋ΔɻϝϯυΫαΠ • map: Result ͷ val
ʹؔΛద༻Ͱ͖Δɻmap(Result<T, E>, T->U) Result<U , E> ͱͳΔɻmap(getUserResult, (user) => encUserId(user)); • flatMap: Result ͷ val ʹ Result Λฦؔ͢Λద༻Ͱ͖ΔɻResult<T, Result<T, E>> ͕ Result<T, E> ͱͳΔɻflatMap(getUserResult, (user) => getBoughtItemsByUser(user)); • Result Λฦؔ͢ಉ࢜ͷ߹͕༰қʹͳΓɺResultΛͨ͘͞ΜͬͯϢʔ βʔͷॻ͖ຯมΘΒͳ͍ɻ 29
ίϯϏωʔλͷ࣮ΛϥΠϒϥϦʹͤΔ • ίϯϏωʔλΛࣗୡͰ༻ҙ͢ΔͷେมͳͷͰ option-t ͱ͍͏ϥΠϒϥϦ Λ࠾༻ • https://github.com/option-t/option-t • A
toolkit of Nullable/Option/Result type implementation in ECMAScript. Their APIs are inspired by Rust's `Option<T>` and `Result<T, E>`. • Rust ͷυΩϡϝϯτͰֶΔ͜ͱ͕େ͖ͳΞυόϯςʔδ 30
Τϥʔʹ໊લΛׂΓৼΔ • SentryͰ Issue ͷλΠτϧ͕ҰཡͰදࣔͰ ͖ɺͦͷλΠτϧͰूܭͰ͖Δ • λΠτϧͷཻωʔϛϯά͕େࣄ • λΠτϧ
Error.prototype.name Ͱ੍ޚͰ͖Δ • new Error(‘msg’).name = “MyError” • ͱ͢ΔͷΊΜͲ͍͘͞ͷͰɺͦͷ໊લΛ࣋ͬ ͨ Custom Error Λఆ͓ٛͯ͘͠ͷ͕ৗ 31 ԿͷΤϥʔ͔͔Βͳ͍ʂ
σόοά͍͢͠ϝλใΛϝοηʔδʹೖΕΔ • SentryͰ Error.prototype.message ͷ༰͕ ϩάʹݱΕΔ • ΤϥʔΛੳ͢Δͱ͖ͷώϯτΛ message ʹ
ೖΕ͓ͯ͘ • ݺͼग़͞ΕΔؔͷҾ • ϢʔβʔτʔΫϯݸਓใͳͲग़ྗ͠ͳ ͍Α͏ʹҙ • SentryʹݶΒͣʮϩάʹग़ྗ͖͢Կ͔ʯ Λҙࣝ͢Δͱྑ͍ 32 ԿͷΤϥʔ͔͔Βͳ͍ʂ
ϩάϨϕϧΛ͍͚Δ • Sentry log, warn, error ͱ͍ͬͨϩάϨϕϧͷ͍͚͕Ͱ͖ΔɻϑΟϧλͯ͠ݕࡧ͠ ͨΓɺϨϕϧ͝ͱʹΞϥʔτΛઃఆͰ͖Δɻ • ͳΜͰ͔ΜͰΤϥʔʹͤͣɺϩάϨϕϧΛ͍͚ΔͱΦΦΧϛগΛݮΒͤΔ
• error: ҟৗ͕ى͖ͨͱ͖ʹ͏ • warn: ݺΕͯخ͘͠ͳ͍ॲཧ͕ݺΕͨͱ͖ʹ͏ɻdeprecated ͳ API ΛݺΕͨ ࣌retryͷ࣮ߦͳͲ • Info: ϨεϙϯεͳͲͰ֬ೝͰ͖ͳͯ͘ʹݟ͑ΔܗͰ֬ೝͰ͖ͳ͍͕ɺ࣮ߦ͞Εͨܗ Λ͢ͱ͖ʹ͏ɻಛघͳΤϯυϙΠϯτͷݺͼग़͠application cache͕miss͠ ͨͱ͖ͳͲ 33
ϩΨʔͷϥούʔΛ࡞Δ • console.log, info, warn, error Λͦͷ··Θ ͳ͍ • ΫϥυڥͰ
sentry ҰॹʹݺΕΔΑ ͏ͳϥούʔؔΛ࡞Δ 34
ΫϥΠΞϯταΠυͷΤϥʔग़͢ • ͜Ε·ͰΫϥΠΞϯταΠυͷΤϥʔΞϥʔτͯ͠ग़͍ͯ͠ͳ͔ͬͨ • ΫϥΠΞϯταΠυͷΤϥʔϊΠζʹͳΓ͍͢ • Ϣʔβʔ͕ݍ֎ʹͳͬͨͱ͖ • αϙʔτ֎ͷσόΠεɾOSΛ͍ͬͯΔ߹ʢಛʹ WebView)
• ํͳ͘ى͖Δ Hydration Error 35
ϊΠζͷ੍Λ͍ͨ͠ • ΞϥʔτUI͔Β ignore Ͱ͖Δ • ͔͠͠ҟͳΔURL͔Βಉ͡Τϥʔ͕ग़ͨ߹ɺҟͳΔΤϥʔͱͯ͠ѻΘΕͯ ignore ͯ͠৽͘͠ಉ͡Τϥʔ͕௨͞ΕΔ •
ͦͦ Sentry ʹૹΒͳ͍Α͏ʹ͍ͨ͠ɻinit ͷ option Ͱ͋Δఔ੍ޚͰ͖ Δɻhttps://docs.sentry.io/platforms/javascript/configuration/filtering/ • ignoreErrors: send ͠ͳ͍ΤϥʔΛએݴͰ͖Δ • denyUrls: ֎෦ϞδϡʔϧʹΑΔΤϥʔΛsend͠ͳ͍ 36
ιʔεϚοϓΛग़ྗ͢Δ • SentryͰ source map Λૹ৴͢Δ͜ͱͰ minify ͞ΕͨίʔυͷΤϥʔΛɺਓ ͕ؒಡΊΔܗʹͯ͘͠ΕΔ •
Sentry͕Ϗϧυπʔϧ͚ϓϥάΠϯΛఏڙ͓ͯ͠ΓɺͦΕΛར༻͢Δ͜ͱͰ sourcemap Λૹ৴Ͱ͖Δ • webpack, nextjs • sentry-cli ͷઃఆ͕ඞཁ • Source map Λૹ৴ޙɺͭ·ΓϏϧυޙσϓϩΠલͷλΠϛϯάͰιʔε ίʔυ͔Β sourcemap Λফ͢͜ͱΛਪ 37
Error Cause Λ͏ • ྫ֎Λcatchͯ͠٧Ί͢ͱͦͷྫ֎ ใ͕ࣦΘΕͯ͠·͏ • catch અͰΧελϜΤϥʔΛ࡞ͬͯ Result.Error
Λ࡞Δͱ͖ʹɺݩͷΤ ϥʔ͕ࣦΘΕͯ͠·͏͕͋ͬͨ • Error.prototype.cause Λ͏͜ͱ ͰɺݩͷΤϥʔΛ৽͍͠Τϥʔʹੵ ΊΔ 38
Node.js ΛΞοϓσʔτ͢Δ • Error Cause ES2022, Node.js 16.9 ͔Βͷػೳ
• ࣌ฐࣾͷଟ͘ͷ Node.js ͷόʔδϣϯ 16.9ະຬ • 16, 18 ͷΞοϓσʔτ࡞ۀΛνʔϜϝΠτ͕Ξϥʔτվળͱฒߦͯ͠ߦ͏ • gyp-error ͱᛀΊͬ͜͢Δຖ 39
୭͕͜ͷ࡞ۀΛ࣮ߦ͔ͨ͠ ʮஈ֊తʹߦ͑ͦ͏ͳ͜ͱ͔͚ͬͨͲɺ۩ମతʹͲ͏ਐΊͨͷ͔ʁʯ ʮΒͳ͍ΑΓͬͨํ͕Ϛγͷਫ਼ਆͰɺͰ͖Δͱ͜Ζ͔Βίπίπͱɺ։ൃ Λ̏ϲ݄ࢭΊͯ༗ࢤ͕ؤுΓ·ͨ͠ɻ࡞ۀΛੵΈ্͛ΒΕΔ͜ͱ͕͍Ͱ͢ɻʯ ࠶ݱੑͳͯ͘͢Έ·ͤΜɾɾɾ 40
ʮ࠷ۙΞϓϦέʔγϣϯ։ൃͤͣʹͣͬͱSentryΛݟΔࣄͯ͠ΔΜͩΑͶʯ ʮਏͦ͏ʯ 41
Ξϥʔτվળͱָ͍ͯ͠ࣄͰ͢ • ΞϥʔτͷൃੜݯΛḷ͍ͬͯ͘͜ͱͰͦͷΞϓϦέʔγϣϯͷཧղ͕ਂ· ΔɻΦϯϘʔσΟϯάλεΫͱͯ͠ྑ͍ ͱࢥ͏ɻ • ΞϓϦέʔγϣϯͱͯ͠ɺαʔϏεͱͯ͠ɺγεςϜͱͯ͠ɺ৫ͱͯ͠Ͳ͏ ͋Δ͖͔Λߟ͑Δ͖͔͚ͬɻࣗͷࢹ࠲͕มΘͬͨΑ͍͖͔͚ͬɻͱͯ Ͱ͖ͨͱࢥ͏ 42
ΤϥʔվળɺΞϥʔτվળྑ͍ͧʂ Ζ͏ʂʂʂʂʂʂʂʂʂ 43