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
Elixir/OTPを使った分散アプリケーション
Search
kanmo
May 12, 2017
Technology
4
2.3k
Elixir/OTPを使った分散アプリケーション
#cm_osaka クラスメソッド大阪勉強会のスライド
kanmo
May 12, 2017
Tweet
Share
More Decks by kanmo
See All by kanmo
Keep Phoenix App Productivity
kanmo
2
1.1k
ExAws
kanmo
1
530
Real Time Web Application with Elixir and Phoenix
kanmo
1
1.4k
Elixir 次に来る大物Web言語の可能性
kanmo
8
2.8k
Other Decks in Technology
See All in Technology
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
360
Qiita埋め込み用スライド
naoki_0531
0
5.1k
なぜCodeceptJSを選んだか
goataka
0
160
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
普通のエンジニアがLaravelコアチームメンバーになるまで
avosalmon
0
110
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
540
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
290
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
200
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
190
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
210
Featured
See All Featured
Code Review Best Practice
trishagee
65
17k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
The Invisible Side of Design
smashingmag
298
50k
Making Projects Easy
brettharned
116
5.9k
Bash Introduction
62gerente
608
210k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Embracing the Ebb and Flow
colly
84
4.5k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
For a Future-Friendly Web
brad_frost
175
9.4k
Raft: Consensus for Rubyists
vanstee
137
6.7k
BBQ
matthewcrist
85
9.4k
Transcript
&MJYJS051Λͬͨ ࢄΞϓϦέʔγϣϯ Ϋϥεϝιου େࡕษڧձ 2017/05/12
w "LJIJEF,BO !LBONP@BL w ීஈϞόΠϧΞϓϦαʔϏε෦ͱ͍͏ͱ͜ΖͰαʔ όαΠυͷ͓ࣄΛ͍ͯ͠·͢ʢ3VCZɺ/PEFͳ Ͳ ɻ͋ͱΠϯϑϥগ͠ʢ"84ʣ
ຊεϥΠυͷ༰ʹ͍ͭͯ w ຊεϥΠυʹग़ͯ͘Δ&MJYJSͷΞϓϦέʔγϣϯɺα ϯϓϧίʔυຊ൪ڥͰͷӡ༻ܦݧ͋Γ·ͤΜ
ΞδΣϯμ w &MJYJS&SMBOHͷհ w ࢄγεςϜΛߏங͢ΔͨΊʹඞཁʹͳΔػೳʹͭ ͍ͯ w ϊʔυؒͷϝοηʔδ௨৴ʢඇಉظʣ w ϓϩηεͷࢹɺ࠶ىಈઓུ
w ΫϥελϦϯάʢ'BJMPWFS5BLFPWFSʣ
&MJYJS w &SMBOH7.্Ͱಈ͘ಈతͳؔܕݴޠ w োੑɺฒߦੑɺࢄॲཧੑೳʹ༏ΕΔ &MJYJS &SMBOH7. ϥΠϒϥϦʢ051ʣ
ࢄγεςϜ w ࠷ۙͷγεςϜଟ͔Εগͳ͔ΕࢄγεςϜ w ҰͷαʔόͷॲཧೳྗͩͱݶքʢϜʔΞͷ๏ଇ ͷݶքʣ w ৫ߏ͕ཁҼͷ߹͋Δ w ࢄγεςϜΛ࡞Δ্ͰඞཁʹͳΔೳྗ
εέʔϥϏϦςΟ ϑΥʔϧττϨϥϯε
εέʔϥϏϦςΟ w ଟ͘ͷΠϕϯτΛॲཧ͢ΔͨΊʹ্ཱ͕ͪΓͷૣ͍ ϓϩηε͕ඞཁ w ϓϩηεͷΓସ͑ૣ͘Ͱ͖ΔΑ͏ʹ͢Δ w ҰͰੑೳ͕ग़ͤͳ͍ͷͰෳͷαʔόͰॲཧΛ ͢Δ w
ϓϩηεಉ࢜Ͱϝοηʔδ௨৴Λ͢Δඞཁ͕͋Δ
εέʔϥϏϦςΟͷଓ͖ w ϓϩηεΛܰ͘͢Δ w Ϋϥογϡͨ͠ϓϩηεʹӨڹΛड͚ͳ͍Α͏ʹ͢ Δ ˠڞ༗ϝϞϦΫϥογϡ͢Δͱ෮چͮ͠Β͍ͷͰ ϝοηʔδύογϯάΛ͏͜ͱʹͳͬͨ
ϑΥʔϧττϨϥϯε w োى͖Δͷͱߟ͑Δ w ͙ͷͰͳ͘ɺى͖ͨ࣌ʹ͏·͘ରॲͰ͖ΔΑ ͏ʹ͢Δ w σʔλ͕͓͔͘͠ͳͬͨΒ෮چΛఘΊͯϓϩηεΛ LJMM͢Δ w
ͦͷͨΊʹϓϩηε͕ଞͷϓϩηεΛࢹ͢ΔΤ ϥʔॲཧػߏඞཁʹͳΔ
ϑΥʔϧττϨϥϯεଓ͖ w ࢄγεςϜͰϝοηʔδૹ৴ઌ͕Ϋϥογϡ͢ Δ͜ͱߟྀ͢Δඞཁ͕͋Δ w ϦϞʔτؔݺͼग़͠Λ҆શʹߦ͏ͨΊʹɺඇಉظ ϝοηʔδύογϯάΛ͏ w ૹ৴ઌͷঢ়ଶʹӨڹ͞Εͨ͘ͳ͍
͜ΕΒΛ࣮ݱ͢Δ͜ͱ͕&SBMOH ։ൃͷతͩͬͨ
&SMBOH7. w &SMBOHϦΞϧλΠϜɺࢄɺฒߦγεςϜͷߏங ʹ༏Ε͍ͯΔݴޠɺϥϯλΠϜ w "DUPS.PEFM w োੑೳ w ෛՙࢄ
"DUPS.PEFM w ଞͷϓϩηεͱσʔλΛڞ༗͢Δ߹NFTTBHF QBTTJOH σʔλίϐʔ͞ΕΔͷͰϝϞϦڞ༗ͷ Έ͕ෆཁ w ϓϩηε୯ҐͰ($ɺϑϧ($ൃੜ͠ͳ͍
োੑ w 4IBSFE/PUIJOHͳϝϞϦϞσϧ w ͋Δϓϩηε͕Ϋϥογϡͯ͠ଞͷϓϩηεʹ Өڹ͠ͳ͍ w φΠϯφΠϯ ͷ৴པੑ
ෛՙࢄ w &SMBOH7.͕ෛՙࢄͷ໘Λݟͯ͘ΕΔ w ͷ্ͱίΞϓϩηοα͕ઢܗʹεέʔϧ ͢Δ w εέδϡʔϥͱͯ͠ίΞຖʹεϨουΛىಈ͢Δ
w ͦΕͧΕ࣮ߦΩϡʔΛ࣋ͭ w λεΫ͕ଟ͍߹ଞͷΩϡʔ ʹҠ͞ΕΔ ෛՙࢄͷଓ͖
ฒߦॲཧ w ϓϩηεʢ"DUPSʣඇৗʹ͍ܰʢϫʔυ w άϦʔϯεϨουͳͷͰ04ͷίϯςΩετεΠο νແ͠ w ωοτϫʔΫαʔόͷ߹ɺҰͭͷϦΫΤετʹҰ ͭͷܰྔϓϩηεΛׂΓͯΔɹ
ϝοηʔδ௨৴
ϓϩηεੜ # ϓϩηεΛىಈ pid = spawn(ModuleName, :loop, [])
ϝοηʔδૹ৴ send(pid, {self, “Hello Actor”})
ϝοηʔδड৴ # ϝοηʔδड৴ॲཧ defmodule Receiver do def loop do receive
do {_, msg} -> IO.puts(msg <> “!!!”) end loop end end
-PDBUJPO5SBOTQBSFODZ w ಉҰϊʔυ্Ͱͷϝοηʔδ௨৴ͱಉ͡Α͏ʹผϊʔ υͷϓϩηεͱϝοηʔδ௨৴Λߦ͏͜ͱ͕Ͱ͖Δ w ΫϥελͷϓϩηεωοτϫʔΫʹಁաత w Ϋϥελͷϊʔυʹଓ͢ΔͱɺΫϥελͷશ ϊʔυʹࣗಈతʹଓ͢Δ
Ϋϥελͷશϊʔυʹଓ Node A Node B Node C Node D Node
A Node B Node C Node D
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
σϞ w ϚελʔͱεϨʔϒͰͦΕͧΕϓϩηεΛੜ w BTZODBXBJUͰॲཧɺ݁ՌΛड͚औͬͯग़ྗ master slave Node B Node
A
ϓϩηεͷࢹ ˍ࠶ىಈઓུ
-FUJU$SBTI w &SMBOHͷΤϥʔॲཧͷํ w ϓϩηεΛࢹ͓͍ͯͯ͠ɺϓϩηε͕ࢮΜͩΒ࠶ ىಈ͘͠ύϥϝʔλมߋͯ͠ϦτϥΠ w ෮چॲཧΤϥʔΛىͨ͜͠ϓϩηεͰͳ͘ɺ ࢹ͍ͯ͠Δϓϩηε͕ߦ͏
ϓϩηεࢹ w ࢄγεςϜͰϓϩηε͕ఀࢭͨ࣌͠ʹݕ͢Δ Έ͕ඞཁ w 1SPDFTTMJOLͱ1SPDFTTNPOJUPS͕༻ҙ͞Ε͍ͯΔ w MJOLϓϩηεఀࢭͱͱʹґଘؔͷ͋Δϓϩ ηεશͯఀࢭ͢Δ w
NPOJUPSϓϩηεఀࢭΛݕ͚ͩ͢Δ
051
w ࢄɺฒߦϓϩάϥϛϯάΛࢧԉ͢Δ'8ɺ։ൃ ڥ w ϦϯΫɺϞχλʔͳͲΛͬͯࣗͰฒྻΞϓϦέʔ γϣϯΛॻ͔ͳͯ͘051ϑϨʔϜϫʔΫʹ༻ҙ͞ Ε͍ͯΔ w ࢄϓϩάϥϛϯάͷͨΊͷϏϔΠϏΞ ύλʔϯ
͕༻ҙ͞Ε͍ͯΔ
4VQFSWJTPS
Supervisor Worker Worker Worker w TVQFSWJTPSɿϓϩηεΛࢹ͢Δɺϓϩηε͕ࢮΜͩ߹࠶ى ಈ͢Δ w XPSLFSɿ࣮ࡍͷॲཧΛߦ͏ϓϩηεɻޭ͢Δ͔ࣦഊ͢Δ͔Θ ͔Βͳ͍ͷͰ৴༻͠ͳ͍ˠTVQFSWJTPS͕ࢹ͢Δ
࠶ىಈઓུ w ࢹରϓϩηεʹ࠶ىಈઓུΛઃఆ͢Δ w POF@GPS@POF w POF@GPS@BMM w SFTU@GPS@POF w
TJNQMF@POF@GPS@POF
ྫ w ֎෦"1*ݺͼग़͠ϫʔΧʔͷϓʔϧΞϓϦέʔγϣϯΛ࡞Δ w ͜ͷΞϓϦέʔγϣϯΫϥΠΞϯτΞϓϦέʔγϣϯʹ ݺͼग़͞ΕΔͱɺཧ͍ͯ͠ΔϫʔΧʔͷࢀরΛ͢ w ϫʔΧʔ͕Ϋϥογϡͨ͜͠ͱΛݕͨ͠Β࠶ىಈ͢Δ w ϫʔΧʔͷىಈΛཧ͢Δ
w ϫʔΧͷॲཧͷ݁Ռঢ়ଶͱͯ͠อ࣋͢Δඞཁ͕͋Δʢ֎ ෦"1*ݺͼग़͠ͷ݁Ռʣ
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ❌
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise ❌
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise ઃఆʹै͍ ࢠϓϩηεΛ࠶ىಈ
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ઃఆʹै͍
ࢠϓϩηεΛ࠶ىಈ
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ֎෦API
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ֎෦API
ݺͼग़݁͠ՌΛอଘ͢Δ
ͦΕͧΕͷϓϩηεͷׂ w 8PSLFSɿޭ͢Δ͔ࣦഊ͢Δ͔Θ͔Βͳ͍ॲཧΛ ߦ͏ w 8PSLFS4VQFSWJTPSɿ8PSLFSΛࢹ w 4FSWFSɿঢ়ଶΛཧ͢Δ w 4VQFSWJTPSɿ4FSWFSͱ8PSLFS4VQFSWJTPSΛࢹ
͢Δ
ࢹઃఆ opts = [strategy: :one_for_all, max_restarts: 5, max_seconds: 5] supervise(children,
opts) w POF@GPS@BMMͳͷͰϓϩηε͕Ϋϥογϡ͢Δͱଞͷϓϩ ηεશͯ࠶ىಈ͢Δ w ඵҎʹճ࠶ىಈ͢ΔͱΞϓϦέʔγϣϯ͕ఀࢭ͢Δ
8PSLFSͷ͕૿͑ͨ߹Ͳ͏͢Δʁ w ݺͼग़͢֎෦"1*͕ෳʹͳͬͨ w ͦͷ"1*͝ͱʹଓ͢ΔϫʔΧʔͷΛཧ͍ͨ͠ w 8PSLFSΛάϧʔϓ͚͠ɺͦͷάϧʔϓ͚ͩ 8PSLFS4VQFSWJTPSΛ༻ҙ͢Δ
มߋҊ Server Worker Worker Worker Worker Worker Worker Supervisor SubSupervisor
WorkerSupervisor WorkerSupervisor
มߋҊ Server Worker Worker Worker Worker Worker Worker
มߋҊ Server Worker Worker Worker Worker Worker Worker ෳͷ"1*ݺͼग़͠Λ͢Δ શϫʔΧʔঢ়ଶΛཧ͢ΔͷͰ
ϘτϧωοΫʹͳΔ
มߋҊ Server Supervisor Worker Worker Worker Worker Worker Worker SubSupervisor
WorkerSupervisor WorkerSupervisor
มߋҊ Server Supervisor Worker Worker Worker Worker Worker Worker SubSupervisor
WorkerSupervisor WorkerSupervisor ❌
มߋҊ Server Supervisor ❌
มߋҊ Server Supervisor ❌ 4FSWFS͕410' Ϋϥογϡ͢ΔͱશͯͷϫʔΧʔ Ϋϥογϡ͢Δ
มߋҊ Server Supervisor 4FSWFS͕410' Ϋϥογϡ͢ΔͱશͯͷϫʔΧʔ Ϋϥογϡ͢Δ
w ͯ͢ͷϫʔΧʔͷϝοηʔδΛҰͭͷ4FSWFSϓϩ ηε͕ड͚औΔ͜ͱʹͳΔ w 8PSLFS4VQFSWJTPSͷ͕૿͑Δͱ4FSWFSͷϝʔϧ ϘοΫε͕ҲΕΔةݥ͕͋Δ w 4FSWFS͕410'ʹͳΔ
w ϫʔΧʔͷঢ়ଶΛཧ͢Δ4FSWFSϓϩηεϫʔ Χʔϓʔϧʢݺͼग़͠ઌͷ֎෦"1*ʣ͝ͱʹ༻ҙ͢ Δ
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ"ͷϫʔΧʔ
ͷঢ়ଶΛཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ"ͷϫʔΧʔ
ͷঢ়ଶΛཧ͢Δ ֎෦αΠτ #ͷϫʔΧʔͷঢ়ଶΛཧ ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ
#ͷϫʔΧʔͷঢ়ଶΛཧ ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker ❌
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer WorkerSupervisor Worker
Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker
Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker
Worker ผͷϓʔϧͷϫʔΧʔ ʹӨڹ͠ͳ͍
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker
Worker
มߋͨ͠ͱ͜Ζ w ঢ়ଶཧΛ͢Δ1PPM4FSWFSϓϩηε ࠓ·Ͱͷ 4FSWFS ΛϫʔΧʔϓʔϧʢ֎෦"1*ʣ͝ͱʹՃ w 4VC4VQFSWJTPS͕ϫʔΧʔϓʔϧ͝ͱʹଘࡏ͢Δ 1PPM4VQFSWJTPSΛࢹ͢Δ
'BJMPWFS5BLFPWFS
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Application Node B Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Application Node B Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node B Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node B Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Node C Application
w 'BJMPWFSɿΫϥελͷϊʔυ͕ఀࢭͨ͠߹ʹΞ ϓϦέʔγϣϯ͕ผͷϊʔυͰىಈ͢Δ w 5BLFPWFSɿΞϓϦέʔγϣϯ͕ݱࡏىಈ͍ͯ͠Δ ϊʔυΑΓߴ͍༏ઌΛ࣋ͭϊʔυ͕͋Δ߹ɺݱ ࡏىಈ͍ͯ͠ΔϊʔυͰΞϓϦέʔγϣϯΛఀࢭ͞ ͤߴ͍༏ઌͷϊʔυͰىಈ͢͜͠ͱ
DMVTUFSͷઃఆྫ [{kernel, [{distributed, [{sample, 5000, ['
[email protected]
', {'
[email protected]
', '
[email protected]
'}]}]}, {sync_nodes_mandatory, ['
[email protected]
',
'
[email protected]
']}, {sync_nodes_timeout, 30000} ]}]. w EJTUSJCVUFEDMVTUFSΛߏ͢Δϊʔυ܈ɻ༏ઌBɺCɺDͷॱ w TZOD@OPEFT@NBOEBUPSZɿ͜͜ʹઃఆͨ͠શͯͷϊʔυ͕ىಈ͢Δ·ͰΞϓϦέʔ γϣϯΛϩοΫ͢Δ w TZOD@OPEFT@UJNFPVUɿ͜ͷ࣌ؒ·Ͱʹࢦఆͨ͠ϊʔυ͕ىಈ͠ͳ͚Εҟৗऴ ྃ͢Δ
σϞ w Bϊʔυ͕ఀࢭ͢ΔͱCϊʔυͰΞϓϦέʔγϣϯ ͕ىಈ͢Δʢ'BJMPWFSʣ w Bϊʔυ͕ఀࢭঢ়ଶ͔Βىಈঢ়ଶʹΔͱɺΞϓϦ έʔγϣϯ͕BϊʔυͰىಈ͢͠ʢ5BLFPWFSʣ
·ͱΊ w &MJYJSʹࢄΞϓϦέʔγϣϯʹඞཁͳػೳ͕༻ ҙ͞Ε͍ͯΔʢ051ɺ7.ʣ w ࢄΞϓϦέʔγϣϯΛ࡞Δ্Ͱͭ·͖͍ͮ͢ϙ Πϯτ͕͢Ͱʹ051ʹϥΠϒϥϦͱͯ͠༻ҙ͞Εͯ ͍ͯɺ։ൃऀΛࢧԉͯ͘͠ΕΔ