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
20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on ...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yuichi Sugiyama
PRO
October 12, 2022
Technology
0
590
20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on Kubernetes after talk
サイボウズのPHP Conference 2022の後日談イベントの発表資料です
Yuichi Sugiyama
PRO
October 12, 2022
Tweet
Share
More Decks by Yuichi Sugiyama
See All by Yuichi Sugiyama
サイボウズ と Garoon と The PHP Foundation と 私 / Cybozu and Garoon and The PHP Foundation and me
oogfranz
PRO
1
570
可能な限り確実にmkdirを成功させるには / Make mkdir
oogfranz
PRO
0
660
サイボウズ #Garoon 開発チームの 「 完成度低いの歓迎LT大会 」 PHPerKaigi出張版 / Low quality LT in PHPerKaigi 2023
oogfranz
PRO
0
670
20年ものの巨大プロダクトをKubernetesに移行している話/Garoon on Kubernetes
oogfranz
PRO
0
490
PHPアプリケーションだってモニタリングしたい / Monitoring PHP application
oogfranz
PRO
1
650
効果的な静的解析の CI導入パターンを求めて / Great static analysis with CI
oogfranz
PRO
3
3.9k
Dev-meets-Ops
oogfranz
PRO
1
1k
GitHub力の低い僕でも、 OSSコントリビュートできたワケ / GitHub Power
oogfranz
PRO
1
640
静的解析の育て方 / How to make your static analysis strong
oogfranz
PRO
3
3.1k
Other Decks in Technology
See All in Technology
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
41k
Databricks Free Edition講座 データサイエンス編
taka_aki
0
290
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
140
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
1.6k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
170
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1k
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.1k
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
130
Amazon Bedrock AgentCore 認証・認可入門
hironobuiga
2
500
データの整合性を保ちたいだけなんだ
shoheimitani
6
2.4k
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
1.9k
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
4
4.7k
Featured
See All Featured
Fireside Chat
paigeccino
41
3.8k
Faster Mobile Websites
deanohume
310
31k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
110
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Why Our Code Smells
bkeepers
PRO
340
58k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
120
Un-Boring Meetings
codingconduct
0
200
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
62
Transcript
20ͷͷڊେϓϩμΫτΛ KubernetesʹҠߦ͍ͯ͠Δ αΠϘζגࣜձࣾ Garoon։ൃ ਿࢁ ༞Ұ PHP Conference 2022 ޙஊ
#phpcon #phpcon2022
Whoami • ਿࢁ ༞Ұ @oogFranz • αΠϘζ8ΤϯδχΞ • େاۀ͚άϧʔϓΣΞGaroon(Ψϧʔϯ) ࡞ͬͯΔ
• ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ
αΠϘζ Garoon • ։ൃ20ʂ • େاۀ͚ͷάϧʔϓΣΞ • PHPͱMySQLͰಈ͘ • ύοέʔδ൛ͱΫϥυ൛͕͋Δ
αΠϘζ Garoon • ։ൃ20ʂ • େاۀ͚ͷάϧʔϓΣΞ • PHPͱMySQLͰಈ͘ • ύοέʔδ൛ͱΫϥυ൛͕͋Δ
ݱΫϥυΠϯϑϥج൫ʢForestʣ • 2011ʹαʔϏε։࢝ • ࣗࣾσʔληϯλʔ • 10ఔͷVMΛ1ηοτʹͯ͠ߏ ʢApplication, DB,
ϑΝΠϧαʔό…ʣ • ߏஙʹܞΘͬͨ̋͞Μͷ໊લ͔ΒForestͱݺΕΔ
ݱΫϥυΠϯϑϥج൫ʢForestʣ Forest ʹଟ༷ͳׂΛ࣋ͬͨཧɾԾαʔόʔ܈ͱɺ ͦΕΒΛཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ ͦͷෳࡶ͔͞Β໎͍ͷͷΑ͏ʹײ͡Δ͜ͱ͋Δ͔͠Ε·ͤΜɻ ͔͠͠ɺਖ਼͍ࣝ͠ΛಘͯɺͷਤϧʔϧΛཧղ͢Εɺ
๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ “ αΠϘζࣾ༻ޠࣙయ BozupediaΑΓ
ݱΫϥυΠϯϑϥج൫ʢForestʣ Forest ʹଟ༷ͳׂΛ࣋ͬͨཧɾԾαʔόʔ܈ͱɺ ͦΕΒΛཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ ͦͷෳࡶ͔͞Β໎͍ͷͷΑ͏ʹײ͡Δ͜ͱ͋Δ͔͠Ε·ͤΜɻ ͔͠͠ɺਖ਼͍ࣝ͠ΛಘͯɺͷਤϧʔϧΛཧղ͢Εɺ
๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ “ αΠϘζࣾ༻ޠࣙయ BozupediaΑΓ Ҏ্ͷ'PSFTUͷʹΑΓɺ ͞·͟·ͳ͕ൃੜ͍ͯ͠Δ
ݱΫϥυΠϯϑϥج൫ʢForestʣͷ՝ εέʔϥϏϦςΟ͕ ͍ ϝϯςφϯεੑ͕ ͍ ϝϯςφϯεͷ μϯλΠϜ͕͍ ։ൃͱӡ༻ͷؒʹน αʔϏεͷߏมߋ͕
ࠔ
ΫϥυΠϯϑϥج൫৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟϝϯςφϏϦςΟͷ͔Βελʔτ • VMϕʔεͷߏ͔Βίϯςφϕʔεͷߏʹ৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ2018։࢝ɻ2021ʹҰ୴ྃʂ
• https://blog.cybozu.io/entry/ever-lasting-neco
ΫϥυΠϯϑϥج൫৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟϝϯςφϏϦςΟͷ͔Βελʔτ • VMϕʔεͷߏ͔Βίϯςφϕʔεͷߏʹ৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ2018։࢝ɻ2021ʹҰ୴ྃʂ
• https://blog.cybozu.io/entry/ever-lasting-neco (BSPPOͷҠߦ͕ࠓ͔Βελʔτʂ
ΫϥυΠϯϑϥج൫৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟϝϯςφϏϦςΟͷ͔Βελʔτ • VMϕʔεͷߏ͔Βίϯςφϕʔεͷߏʹ৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ2018։࢝ɻ2021ʹҰ୴ྃʂ
• https://blog.cybozu.io/entry/ever-lasting-neco (BSPPOͷҠߦ͕ࠓ͔Βελʔτʂ ྃඪʂ
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
Garoon Pods ίϯςφ͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ΞΫηεࢄ
Garoon Pods ίϯςφ͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ❌ ❌ ͍ͣΕ͔ͷίϯςφ 1PEʹ͕͋ͬͨΒ
Garoon Pods ίϯςφ͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ❌ ❌ ͍ͣΕ͔ͷίϯςφ 1PEʹ͕͋ͬͨΒ /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ͷ1PEΛऔΓআ͖ ৽͘͠1PEΛ࡞͢Δ
VMϕʔεͷ • VMجຊతʹམͱͤͳ͍ʢԽ͍ͯ͠Δ͕ʣ • ͕͋ͬͨ࣌ʹVMΛ1Ճͯ͠ɺɺɺͱ͍͏ରॲࠔ • VMͷઃఆ10Ҏ্ͷΫϥυӡ༻ʹ͍ෳࡶʹ • ӡ༻ଆͷઃఆΞϓϦέʔγϣϯʢGaroonʣଆͷઃఆෳࡶ
ίϯςφ͙͢ࢮ͵ʂ • ίϯςφͰ͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ ৽͍͠ͷΛ࡞Δɻ • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞτ͕࣮ݱՄೳ • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ
ίϯςφ͕͍ͭࢮΜͰྑ͍લఏͰઃܭ͠Α͏ɺ ͱݴ͏͓ɻ
ίϯςφ͙͢ࢮ͵ʂ • ίϯςφͰ͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ ৽͍͠ͷΛ࡞Δɻ • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞτ͕࣮ݱՄೳ • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ
ίϯςφ͕͍ͭࢮΜͰྑ͍લఏͰઃܭ͠Α͏ɺ ͱݴ͏͓ɻ ύοέʔδͰ࢝·ͬͨ(BSPPOʹͦͷલఏ͕ͳ͍
Garoon Pods ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ϑΝΠϧΞοϓϩʔυ ϩάϑΝΠϧ Ωϟογϡ
Garoon Pods ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ϑΝΠϧΞοϓϩʔυ ϩάϑΝΠϧ Ωϟογϡ ❌ ❌ 1PE͕ෆ༻ҙʹམͪΔͱɺಓ࿈ΕͰ͍Ζ͍Ζফ͑ͯ͠·͏ ❌ ❌
Garoon Pods ղܾࡦ1ɿঢ়ଶΛ֎෦αʔϏεʹ͓͘ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY
$POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS KVS ϑΝΠϧετϨʔδ ϩάαʔϏε
Garoon Pods ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS -PHಡΈग़͠ -PHಡΈग़͠ -PHಡΈग़͠ ϩάج൫αʔϏε Volumeʹॻ͖ग़͢
Garoon Pods ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS -PHಡΈग़͠ -PHಡΈग़͠ -PHಡΈग़͠ ϩάج൫αʔϏε Volumeʹॻ͖ग़͢ ͜Ε͔Βؤுͬͯ࡞Γ·͢ɻɻɻ😇
ίϯςφϕʔεͰ • ίϯςφ͍ͭམͪͯྑ͍Α͏ʹઃܭ͢Δ • K8sίϯςφ͕མͪͨΒࣗಈతʹ৽ͨͳίϯςφΛ࡞ • ઃఆͯ͢ίʔυԽ • ঢ়ଶΛίϯςφ֎෦ʹ͍ΔʢϛυϧΣΞɺαΠυΧʔί ϯςφʣ
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
ΦϨΦϨϑϨʔϜϫʔΫ • 20ͷͷϑϨʔϜϫʔΫ • ։ൃॳʢ20Ҏ্લʣͱͯ͠ଥͳબ • DBଓͳͲ͕ύοέʔδલఏͰॻ͔Ε͍ͯΔ • ϑΝΠϧͷಈతಡΈࠐΈͳͲɺՄಡੑʹ͋Γ
is_forest() ࠈ • ύοέʔδ൛͔ݱΫϥυ൛ʢForestʣ͔ͷݟ͚ɺ ઃఆϑΝΠϧͷΛࢀর͍ͯ͠Δ • ΫϥυڥԼΛௐΔϝιουɺ if(is_forest())
͕ඦՕॴʹॻ͔Ε͍ͯΔ if (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ }
is_forest() ࠈ • ύοέʔδ൛͔ݱΫϥυ൛ʢForestʣ͔ͷݟ͚ɺ ઃఆϑΝΠϧͷΛࢀর͍ͯ͠Δ • ΫϥυڥԼΛௐΔϝιουɺ if(is_forest())
͕ඦՕॴʹॻ͔Ε͍ͯΔ if (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } ͜͜ʹJT@OFDP Λ࡞͍ͬͯͯ͘͠ͷݱ࣮తͰͳ͍
ͬͯͯΑ͔ͬͨDIίϯςφ • ͜͜ͷվળʹΑΓDIίϯςφ͕ಋೖʂʂ • ΦϨΦϨϑϨʔϜϫʔΫͳͷͰɺcomposerͰphp-diΛಋೖ • ৽ج൫(Neco)Ͱ͋Δ͔Ͳ͏͔ΛݟΔͷDIίϯςφͷొ෦ʹӅṭ • ͍ͭͰʹύοέʔδ൛͔ݱج൫(Forest)͔
DIίϯςφͰ֬ೝ͢ΔΑ͏ʹϦϑΝΫλ https://speakerdeck.com/ynkt/sok-gai-shan-shi-bai-karaxue-bu-regasipurodakutonili-tixiang-kautimuzuo-ri?slide=23
ͬͯͯΑ͔ͬͨࣗಈςετ • ͜͜ͷվળͰϢχοτςετͱE2Eςετͷඋ͕ਐΜͩ • ج൫෦ʹखΛՃ͑ͨͱ͖ͷӨڹൣғͰ͔͍͕ɺ Ͳ͔͜ͷςετͰམͪΔ͔ΒٯʹେৎͩΖ͏ɺͱ͍͏҆৺ײ • ·ͩ·ͩΓ͍ͯͳ͍͕ɺ͕Μͬͯ࡞͍͔͍ͬͯͨ͋ͬͨ
Ͳ͏ͤϑϨʔϜϫʔΫ෦ʹ৮ΔͳΒ • ϑϨʔϜϫʔΫ෦Մಡੑʹ͋Γ • ίʔυΛมߋ͢Δػձগͳ͍😇 • ίʔυΛಡΉػձଟ͍😩 • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦ͷ
ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ
Ͳ͏ͤϑϨʔϜϫʔΫ෦ʹ৮ΔͳΒ • ϑϨʔϜϫʔΫ෦Մಡੑʹ͋Γ • ίʔυΛมߋ͢Δػձগͳ͍😇 • ίʔυΛಡΉػձଟ͍😩 • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦ͷ
ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ νʔϜͰ߹ҙΛऔΓͭͭɺۃྗϦϑΝΫλΛਐΊ͍ͯΔͧʂ
ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯ͜ΕΔ͔ • ͜͜ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ ਐḿ͕ग़͘͢͠ͳ͍͍ͬͯΔ • ͱ͍͑खΛग़͠ʹ͍͘ͱ͜Ζଟ͍ • ͦ͏͍͏ͱ͜ΖੵۃతʹϦϑΝΫλ͍ͯ͘͠😤
ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯ͜ΕΔ͔ • ͜͜ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ ਐḿ͕ग़͘͢͠ͳ͍͍ͬͯΔ • ͱ͍͑खΛग़͠ʹ͍͘ͱ͜Ζଟ͍ • ͦ͏͍͏ͱ͜ΖੵۃతʹϦϑΝΫλ͍ͯ͘͠😤
ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯ͜ΕΔ͔ • ͜͜ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ ਐḿ͕ग़͘͢͠ͳ͍͍ͬͯΔ • ͱ͍͑खΛग़͠ʹ͍͘ͱ͜Ζଟ͍ • ͦ͏͍͏ͱ͜ΖੵۃతʹϦϑΝΫλ͍ͯ͘͠😤
ෛ࠴ฦࡁͱͷόϥϯε͍͠ɻɻɻ😇
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
Πϯϑϥࣝ0͔ΒͷνʔϜ࡞Γ • Garoon։ൃνʔϜ͍··Ͱྑ͘ѱ͘ɺ ΠϯϑϥपΓΛؾʹͤͣ։ൃΛਐΊΒΕ͍ͯͨ • ΞϓϦέʔγϣϯϨΠϠͱΠϯϑϥϨΠϠ͕ผΕ͍ͯͨ • ίϯςφʁK8sʁͳʹͦΕ͓͍͍͠ͷʁ
ΤΩεύʔτνʔϜͷڠྗ • ੜ࢈ੑ্νʔϜϝϯόʔʹظతʹJoin • Docker, CIͷΤΩεύʔτ • ίϯςφԽͷݟΛνʔϜʹ ڞ༗ͯ͠Β͏
• खͷपΓʹ͍͘CIͷඋਐΊͯΒ͏ https://blog.cybozu.io/entry/2020/08/31/080000
Ϟϒ • ࡞ۀجຊϞϒ • ϞϒͷதͰνʔϜͷݟΛڞ༗͍ͯ͘͠ • ΤΩεύʔτʹϞϒʹೖͬͯΒ͏
ใ • ใʹٙΛॻ͖ࠐΉͱ ӡ༻νʔϜNecoνʔϜ͔Βճ͕ಧ͘
νʔϜͰͷษڧձ • ӡ༻ͷجૅࣝΛνʔϜͰ͚ͭΔ • DevOpsϋϯυϒοΫͷྠߨ
ΠϯϑϥͰֶͿ͜ͱଟ͍ • ΤΩεύʔτνʔϜʹϞϒʹೖͬͯΒ͏ • ٙΛใʹॻ͘ͱ͑ͯ͘ΕΔ • ࣭ശ͋Δ • ྠಡ͍͖ͬͯ