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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
140
AIエージェントが動かないときの原因とその対処
sadnessojisan
2
150
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
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
110
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
3
1k
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
480
今さら聞けない .NET CLI
htkym
0
190
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
180
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
FDEが実現するAI駆動経営の現在地
gonta
2
280
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
プロポーザルを書いてもらう
pvcresin
0
510
数百円から始めるRuby電子工作
tarosay
0
150
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Product Roadmaps are Hard
iamctodd
55
12k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
360
Speed Design
sergeychernyshev
33
2k
Designing Experiences People Love
moore
143
24k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
210
Building the Perfect Custom Keyboard
takai
2
840
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.3k
Documentation Writing (for coders)
carmenintech
77
5.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
380
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