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
Rustでon-diskなB+Treeを作ったときの細かな話
Search
KOBA789
May 19, 2021
Programming
2k
11
Share
Rustでon-diskなB+Treeを作ったときの細かな話
Rust LT Online #3 で発表したスライドです
https://rust.connpass.com/event/209279/
KOBA789
May 19, 2021
More Decks by KOBA789
See All by KOBA789
メモリが足らない2026
koba789
4
2.2k
直接メモリアクセス
koba789
0
560
人工衛星のファームウェアをRustで書く理由
koba789
16
9.9k
令和最新版手のひらコンピュータ
koba789
14
9.3k
時の流れが許せない
koba789
0
270
ついに生産が終わったけどZ80でまだまだ遊びたい
koba789
5
4.7k
ISUCONの練習を楽しくたくさんやる方法
koba789
2
1.5k
Z80をRustで動かすまで年が越せない
koba789
0
410
ISUCON練習環境を最も簡単に用意する方法
koba789
2
3.4k
Other Decks in Programming
See All in Programming
「速くなった気がする」をデータで疑う
senleaf24
0
180
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報と Neovimのlsp設定例]
yasunori0418
1
140
tRPCの概要と少しだけパフォーマンス
misoton665
2
200
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
210
飯MCP
yusukebe
0
510
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.4k
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
250
おれのAgentic Coding 2026/03
tsukasagr
1
150
의존성 주입과 모듈화
fornewid
0
140
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
290
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
1
140
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
22
13k
Featured
See All Featured
Leo the Paperboy
mayatellez
7
1.7k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
260
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.6k
A Soul's Torment
seathinner
6
2.7k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
520
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
310
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
A designer walks into a library…
pauljervisheath
211
24k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.8k
Context Engineering - Making Every Token Count
addyosmani
9
830
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
270
Transcript
KOBA789 RustͰ on-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷ ࡉ͔ͳ
KOBA789 ݱࡏਐߦܗͰແ৬ ‣ 3VTUྺ͘Β͍ ‣ ී௨ʹΣϒαʔόʔΛॻ͍ͨΓ ‣ %#.4Λॻ͍ͨΓ ‣ ϒϥβͰಈ͘ճ࿏$"%Λॻ͍ͨΓ
8"4.λʔήοτ ‣ ࣗ࡞ΩʔϘʔυͷ ϑΝʔϜΣΞΛॻ͍ͨΓ ͍ΘΏΔΈࠐΈ3VTU ͓͢͢Ίͷࣄʹؔ͢Δใ ͍ͭͰܴ͍ͯ͠·͢ https://gihyo.jp/magazine/wdpress/archive/2021/vol122 ʲະঝࠂʳࡶࢽʹهࣄॻ͖·ͨ͠
RustͰ on-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷ ࡉ͔ͳ ࠓճͷλΠτϧ ʢ࠶ܝʣ
RustͰ on-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷ ࡉ͔ͳ ͱʁ
RustͰ on-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷ ࡉ͔ͳ ͱʁ " ༰ΛσΟεΫʹӬଓԽͰ͖ͨΓɺ ϝϞϦΑΓେ͖ͳ༰ΛσΟεΫ্Ͱѻ͑ͨΓ͢Δ
# 5SFF ˞ಠࣗͷఆٛͰ͢
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
͜͏͍͏# 5SFFΛߟ͑Δ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ͱΓ͋͑ͣ࣍ݩʹͭͿ͢
σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ σΟεΫ͕͋Δͱ͢Δ
σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ σΟεΫʹೖͬͨ
σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ CPU # 5SFFΛૢ࡞͍ͨ͠
σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ CPU # 5SFFΛૢ࡞͍ͨ͠ σΟεΫΛಡΈॻ͖͢Δͷ͍͠ෆศ
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ CPU ϝϞϦʹόοϑΝΛ༻ҙ
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU ϊʔυͷҰ෦ΛϝϞϦ
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU ಡΈॻ͖ ೖΕସ͑ όοϑΝϓʔϧϚωʔδϟ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
Ұ෦ͷϊʔυͷΈ͕ϝϞϦʹ͋Δ# 5SFFͱ͍͑Δ ന͍ϊʔυσΟεΫʹ͔͠ͳ͍
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU ಡΈॻ͖ ೖΕସ͑ ͱ͜ΖͰɺ
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU ಡΈॻ͖ ೖΕସ͑ ϚϧνίΞΛ׆༻͍ͨ͠Ͱ͢ΑͶʁ CPU CPU CPU
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU ར༻தͷϊʔυΛόοϑΝ͔Β͍ग़ͨ͠Γ͢Δͱ͍ͨΜͳ͜ͱʹ CPU CPU CPU ΛಡΈ͍ͨɻΛ͍ग़ͦ͏ ͯίϥ ϊʔυ ར༻த
ϝϞϦ σΟεΫʢϑΝΠϧʣ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ CPU ར༻தͷϊʔυΛόοϑΝ͔Β͍ग़ͨ͠Γ͢Δͱ͍ͨΜͳ͜ͱʹ CPU CPU CPU ΛಡΈ͍ͨɻΛ͍ग़ͦ͏ ͯίϥ ϊʔυ ར༻த ͜ͷΜͷ σʔλߏɾΞϧΰϦζϜΛ 3VTUͰͲ͏͢Δ͔ POEJTLಛ༗ͷ͕͋͠͞Δ
3VTUͰPOEJTLͳ# 5SFFΛ࡞Δͱ͖ͷݒ೦ࣄ߲ w όοϑΝϓʔϧϚωʔδϟͷ σʔλߏͱΞϧΰϦζϜ w # 5SFFͷϊʔυͷσʔλߏ w
# 5SFFͷഉଞ੍ޚ
όοϑΝϓʔϧϚωʔδϟͷ σʔλߏͱΞϧΰϦζϜ
ར༻தͷϊʔυΛอޢ͢Δʹ $.6ͷߨٛͰΘΕ͍ͯΔ#VT5VC $ ͱ͍͏࣮ͷ߹ ϊʔυʢϖʔδʣʹΧϯλΛ ࣋ͬͯཧ͍ͯ͠Δ https://github.com/cmu-db/bustub/blob/master/src/include/storage/page/page.h ϐϯ 1JO
ʮར༻தʯͷҙຯ ˞3VTUͷ1JOͱؔͳ͍
3VTUͰͲ͏͢Δ͔ Ҋ$ ಉ༷ʹΧϯλͰอޢ w ڞ༗ϝϞϦΛॻ͖͑ΔͨΊɺ વͷΑ͏ʹVOTBGF͕ొ w ઈରʹόάΒͤΔࣗ৴͔͠ͳ͍ w
͜ΕͳΒ$ Ͱॻ͚͍͍ w ଈߦͰϘπ
3VTUͰͲ͏͢Δ͔ Ҋ3X-PDLͰอޢ w ར༻த4IBSFEMPDLΛ͓࣋ͬͯ͘ w ͍ग़ͨ͘͠ͳͬͨΒ&YDMVTJWFMPDLΛऔΔ w (VBSEܥͷߏମTUBUJD͡Όͳ͍ͷͰ औΓճ͕͠ѱ͍
3VTUͰͲ͏͢Δ͔ Ҋ"SDͰอޢ w "SDʹHFU@NVU NVU"SD5 ͱ͍͏ ϝιου͕͋Δ w ࢀরΧϯλ͕ͷͱ͖ʹ͚ͩNVU5͕औΕΔ
w όοϑΝϓʔϧͷʮϐϯʯͱ૬ੑ͕Αͦ͞͏ͳػೳ w ͨͩ͠ϨγʔόNVU w όοϑΝϓʔϧશମΛอޢ͢Δ.VUFY͕͋ΔͷͰ Մมࢀর͕औΕΔ
# 5SFFͷϊʔυͷ σʔλߏ
# 5SFFͷϊʔυͷߏ ૉʹΔͱɺ͜͏
⚠ϊʔυσΟεΫʹ ॻ͖ग़ͤͳ͚ΕͳΒͳ͍ ͪΖΜɺಡΈग़͠Ͱ͖ͳ͚ΕͳΒͳ͍
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢Δʁ
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢Δʁ TFSEF
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢Δʁ TFSEF γϦΞϥΠζޙͷσʔλ͕Θ͔Βͳ͍͠ ޮѱ͍ͷͰμϝ
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢Δʁ "ͦͷ··ॻ͖ग़ͤΔ σʔλߏΛ͕Μ࣮ͬͯ͢Δ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ϊʔυ ͖ͬ͞ొͨ͠ϊʔυ͘Μ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ࣮͜͏͍͏େ͖͞
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ,FZ 7BMVF ͜Ε,FZ7BMVFͷϖΞ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF ͞όϥόϥ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF ͜ΕΛͦͷ··ෑ͖٧ΊΔͱ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF Φϑηοτִ͕ؒͰͳ͍ͷͰೋ୳ࡧͰ͖ͳ͍
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF Γ͠
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF ,FZ7BMVFޙΖʹ٧Ίͯ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# 1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF
1US 1US ݻఆͷϙΠϯλΛ಄ʹฒΔ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# 1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF
1US 1US ͜ΕΛ3VTUͰॻ͘
ͱ͜ΖͰ͜ΕΛͲ͏ͬͯ Ωϟετ͢Δͷ͔
std::mem::transmute
std::mem::transmute ͦΜͳةݥͳͷ͏Θ͚ͳ͍
ศརDSBUFl[FSPDPQZz ΞϥΠϝϯτͳͲΛߟྀͯ҆͠શʹܕΩϟετͰ͖Δ w (PPHMFͷ'VDITJBͰΘΕ͍ͯΔͬΆ͍ w ͍ํʹ͔ͳΓΫη͕͋Δ w υΩϡϝϯτۃΊͯগͳ͍ w αϯϓϧίʔυ'VDITJBͷωοτϫʔΫελοΫ
LayoutVerifiedͱ͍͏ εϚʔτϙΠϯλܦ༝Ͱૢ࡞͢Δ new_from_prefixϝιου ϔομͱϘσΟʹ͔Ε͍ͯΔ σʔλߏʹ͑Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US OVN@TMPUT
IFBEFS CPEZ
new_sliceϝιουͰ ϙΠϯλͷεϥΠεΛΓग़͍ͯ͠Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US OVN@TMPUT
QPJOUFST IFBEFS CPEZ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US OVN@TMPUT
QPJOUFST IFBEFS CPEZ ͜ͷਤΛΑ͘ݟͯ΄͍͠
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US OVN@TMPUT
QPJOUFST IFBEFS CPEZ QPJOUFSTCPEZΛआ༻͍ͯ͠Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US OVN@TMPUT
QPJOUFST IFBEFS CPEZ QPJOUFSTCPEZΛआ༻͍ͯ͠Δ ͭ·Γɺ,FZ7BMVFϖΞΛมߋ͢Δͱ͖ʹ ͍͍ͪͪQPJOUFSTΛख์͞ͳ͚ΕͳΒͳ͍ ͩΔ͍ ʢ͔ͨ͠ͳ͠ʣ
# 5SFFͷഉଞ੍ޚ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU Modify Modify 💥 😩 😩
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU ϩοΫ্͔ΒॱʹऔΔ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϩοΫ্͔ΒॱʹऔΔ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϩοΫ্͔ΒॱʹऔΔ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϩοΫ͕औΕͨΒɺ্ͷϩοΫख์ͯ͠Α͍ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ଞͷεϨου͕ಈ͚ͯฒྻ্͕͕Δ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU ಉ༷ʹଓ͚Δ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
Լͷϊʔυ͕ᷓΕͦ͏ͳ߹ɺ্ͷϩοΫΛख์ͯ͠ͳΒͳ͍ ʢॻ͖ࠐΈͷ߹ʣ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU ͜ΕΛ3VTUͰ࣮͢Δ
# 5SFFͷഉଞ੍ޚ ૉʹ࣮
# 5SFFͷഉଞ੍ޚ ૉʹ࣮
# 5SFFͷഉଞ੍ޚ ૉʹ࣮ page: Arc<RwLock<Page>> ro_page: RwLockReadGuard<_, Page>
next_page: Arc<RwLock<Page>> ro_next_page: RwLockReadGuard<_, Page> next_pageΛಈ͔͍͕ͨ͠ かといってRwLockReadGuardΛ ख์͢Θ͚ʹ͍͔ͳ͍ ro_page͕pageΛɺ ro_next_page͕next_pageΛ ࢀর͍ͯ͠ΔͷͰಈ͔ͤͳ͍
# 5SFFͷഉଞ੍ޚ ૉʹ࣮ page: Arc<RwLock<Page>> ro_page: RwLockReadGuard<_, Page>
next_page: Arc<RwLock<Page>> ro_next_page: RwLockReadGuard<_, Page> next_pageΛಈ͔͍͕ͨ͠ かといってRwLockReadGuardΛ ख์͢Θ͚ʹ͍͔ͳ͍ ro_page͕pageΛɺ ro_next_page͕next_pageΛ ࢀর͍ͯ͠ΔͷͰಈ͔ͤͳ͍ ٧Έ
͜ΕΑ͋͘Δ4UBCMF"EESFTT "SDͷࢦ͢ϙΠϯλෆมͳΜ͔ͩΒNPWFͤͯ͘͞Ε w PXOJOH@SFGΫϨʔτͳͲͰ ղܾ͕ࢼΈΒΕ͍ͯΔ w ࠓճ3X-PDL3FBE(VBSEʹ ಛघͳϝιουΛੜͯ͠ճආ
0XOFE3X-PDL3FBE(VBSE ΊͬͪΌVOTBGF͚ͩͲ͔ͨ͠ͳ͍
ࠓհͨ͠ίʔυ͍͍ͩͨ(JU)VCʹ͋Δ RQ w IUUQTHJUIVCDPN,0#"RQ w ϚϧνεϨου w ίʔυ͕ͱͯԚ͍ SFMMZ w
IUUQTHJUIVCDPN,0#"SFMMZ w γϯάϧεϨου w 8&# %#13&447PMͷͨΊʹ ॻ͖ԼΖͨ͠ w ͪΐͬͱίʔυ͕៉ྷ
·ͱΊ ಈతͳσʔλߏΛ࣮͢Δͱ3VTUಛ༗ͷ͕ͯ͠͞Μ͜Γʂ w "SDHFU@NVUͷΑ͏ͳϚΠφʔͳ ϝιουΛ͓ͬͯ͘ͱʹཱͭ w TUEΫϨʔτΛ׆͔ͤΔΑ͏ʹ σʔλߏΛมܗ͢ΔεΩϧ͕ॏཁ
w ίϯύΠϧΤϥʔΛோΊΔ͚ͩͰͳ͘ɺ ϝϞϦͷ༷ࢠΛ૾͢Δ w ͋Δ͖ϝϞϦͷߏ͔Β σʔλߏΛٯࢉ͢Δͷ͕ίπ