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
my new error
Search
sadnessOjisan
March 19, 2023
Programming
300
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
130
AIエージェントが動かないときの原因とその対処
sadnessojisan
2
140
React のルーター事情
sadnessojisan
1
650
PHPこそ OpenTelemetry が嬉しい
sadnessojisan
2
470
TypeScript、上達の瞬間
sadnessojisan
53
19k
フロントエンド・オブザーバビリティを支える要素技術を学ぼう
sadnessojisan
2
1k
疎通2024
sadnessojisan
5
1.7k
BasicBasic認証
sadnessojisan
5
4.9k
ISUCON入門以前_ISUNARABE_LT#1
sadnessojisan
21
6.6k
Other Decks in Programming
See All in Programming
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
4
1.3k
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
190
Claude Team Plan導入・ガイド
tk3fftk
0
250
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
210
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
100
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.9k
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
React本体のコードリーディング
high_g_engineer
1
130
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
170
FDEが実現するAI駆動経営の現在地
gonta
2
260
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Building AI with AI
inesmontani
PRO
1
1.1k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Visualization
eitanlees
152
17k
For a Future-Friendly Web
brad_frost
183
10k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
680
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
The browser strikes back
jonoalderson
0
1.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