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
what is model?
Search
to4iki
January 17, 2017
Technology
63
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
what is model?
"モデル"という言葉を様々な観点から考えてみる
to4iki
January 17, 2017
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
180
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.7k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.8k
ビューインプレッションの計測方法
to4iki
1
1.2k
秘伝の `gitconfig`
to4iki
1
470
Abema iOS Architecture
to4iki
12
3.6k
timetable-bot
to4iki
0
15k
BLoC Pattern Introduction with Swift
to4iki
2
1.4k
nel
to4iki
0
200
Other Decks in Technology
See All in Technology
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
140
AIに狂うスタートアップが、あえて「人との協働」に全振りした新卒エンジニア研修 / New Graduate Engineer Training at a Startup Accelerating AI Adoption
ohnoeight
0
220
Kiro5兄弟のいまどきのセキュリティ基礎知識
kentapapa
0
170
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
AI開発に用いられるHPC技術について
gpuunite_official
0
280
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
220
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
440
dbt in Microsoft Fabric
ryomaru0825
0
250
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
3
710
Windows の互換機能 - 古いプログラムはなぜ動作できるのか
murachiakira
PRO
0
100
電話に出る Python のログの話
shinnosuke_kishida
0
220
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Exploring anti-patterns in Rails
aemeredith
3
470
Become a Pro
speakerdeck
PRO
31
6.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
430
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.4k
Ethics towards AI in product and experience design
skipperchong
2
350
Typedesign – Prime Four
hannesfritz
42
3.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Transcript
Ϟσϧͱ͍͏ݴ༿ᐆດ shinjyuku.lt #3 @to4iki
People • @to4iki • GANMA!ͱ͍͏ອըͷαʔϏεΛ࡞ͬͯ·͢ • iOSɺΞʔΩςΫνϟʹڵຯ͕͋Γ·͢ • ߦͧ͘ʂ(͓͢͢Ίڭ͑ͯ͘Ε) •
ΫϦεϚεͲ͏͠Α͏ɻɻ(´ɾωɾ`)
Agenda • ͡Ίʹ • ϞσϧΛ৭Μͳ؍͔Βߟ͑ͯΈΔ • ΦϒδΣΫτࢦɺDDD…
എܠ
Ϟσϧͱ͍͏ݴ༿ᐆດ • ҙຯ͕͗͢Δ • ͨͩͷσʔλΛ֨ೲ͢Δശͱͯ͠ଘࡏ͢ΔέʔεࢁΈ͖ͯͨ • ϏδωεϞσϧ • MVC, MVVM,
MVP, DDD…ͰͷϞσϧ • αʔόʔαΠυͷϞσϧɺΫϥΠΞϯταΠυͷϞσϧ • ActiveRecord, DAO, DTO…
“ϞσϧͱԿ͔”͕ڞ༗Ͱ͖͍ͯͳ͍
ผͷྑ͍ݴ༿͕͋Εྑ͍Μ͚ͩͲɻ தʑݟ͔ͭΒͳ͍
ϞσϧͷఆٛΛগ͠Ͱɺ ͖ͬΓͱ͍ͤͨ͞
༷ʑͳΓޱ͔Βߟ͑ͯΈΔ • semantics: Ϟσϧͷҙຯ • expression: Ϟσϧͷදݱ • utility: Ϟσϧͷ༗ޮੑ
• target: Ϟσϧͷର
Ϟσϧͱ (ࣗͳΓͷղऍͳͷͰؒҧͬͯΔՄೳੑ͕͋Γ·͕͢ɺ͓खॊΒ͔ʹ)
͍ͬͺ͍Ҿ༻ͨ͠ ؤுΔͧ
ͱ͍͑ɺ ݀ͩΒ͚͔ͩΒ͠ʹདྷͯ΄͍͠
ݩདྷͷҙຯͰͷϞσϧ • ݟຊɺखຊɺൣɺܗ(ϞσϧϧʔϜ) • ੍࡞ͷૉࡐͷର(ਓըͷʙ) • ෳࡶͳݱΛઆ໌͢ΔͨΊʹ༻͍ΒΕΔ୯७Խͨ͠ཧԾઃ • খઆͳͲͷొͷૉࡐͱͳ࣮ͬͨࡏͷਓɺΞχϝͷ •
ϑΝογϣϯϞσϧͷུ ूӳࣾ ࠃޠࣙయ
͜Ε͕Ϟσϧͩʂ
ࢥߟͱͯ͠ͷϞσϧ(1/2) • ϞσϧҙਤΛઆ໌͢Δଘࡏ • ࣝΛཁͨ͠γϯϓϧͰ͔Γ͍͢આ໌ • ෳࡶͳͷ͝ͱΛγϯϓϧʹදݱͨ͠ͷ(ܕ͕ Ϟσϧ) • ϞσϧΛ࡞Δͱࢥߟ͢Δͷ྆ྠΛճ͍ͯ͘͠ͷ͕
ϞσϧԽ • ཁૉɾࣄΛͲͷΑ͏ʹׂ͢Δ͔ɺؔੑ͔Β நԽɾ۩ମԽΛߟ͑ͲͷΑ͏ʹόϥ͍͔ͯ͘͠ɺ όϥͨ͠ཁૉ͔ΒͲͷΑ͏ʹશମΛదʹઆ໌Ͱ ͖ΔΑ͏ʹͳΔ͔ͷԟ෮ӡಈ(ࢥߟ)͕ͦ͜Ϟσϧ ࡞Γͷຊ࣭
ࢥߟͱͯ͠ͷϞσϧ(2/2) • ϞσϧΛ࡞Δͱɺ࿙Εͳ͘ɺॏͳΓͳ͘ ࣄ͕ཧ͞Ε͍ͯΔ͜ͱ͕֬ೝ ͘͢͠ͳΔ • ແବͳใΛͦ͗མͱ͠ࣄΛγϯϓϧʹදݱͰ͖Δ == શମΛཧղ͠၆ ᛌ͢Δ͜ͱʹͭͳ͕Δ
• ྨਪͯ͠࿈͢ΔࣄͰɺൃΛ͛Δ͜ͱ͕Ͱ͖Δ
OOͰͷϞσϧ(1/2) • OOPਓؒͷਫ਼ਆΛ֦ுͨ͠ͷ • OOਓʑͱͦͷϝϯλϧϞσϧʹؔ͢ΔͷͰ͋ΓɺϙϦϞϑΟζϜ ݁߹ɾڽूʹؔ͢ΔͷͰͳ͍ • OOPʹΑͬͯιϑτΣΞΛ࡞͢Δͱ͍͏͜ͱɺݴ͍͑ΕϞ σϧΛ࡞͢Δ͜ͱ =
ϞσϧΛదʹ࡞Ͱ͖͍ͯͳ͍ͷOOPͱݺ ͳ͍ • “σʔλ”ͱ”ৼΔ͍”Λ࣋ͭଘࡏ • ΦϒδΣΫτޓ͍ʹϝοηʔδΛૹΓ߹͏͜ͱͰɺޓ͍ͷৼΔ͍ Λ࣮ߦ͢Δ(ϝοηʔδύογϯά)
OOPͷ৴ 1. ϝοηʔδύογϯά 2. ΦϒδΣΫτಉ࢜ͷִ(isolation) • ࢲͷϓϩάϥϜ͕͋ͳͨͷϓϩάϥϜΛഁյͯ͠͠·Θͳ͍ͱ͍͏͜ͱ 3. ϙϦϞϑΟζϜ •
རศੑͷҝɺϝοηʔδͷૹΓํΛڞ௨ʹ͢Δ
OOͱݱ࣮ੈքશવҧ͏ • ΦϒδΣΫτࢦݱ࣮ੈքΛͦͷ··ιϑτΣΞʹදݱ͢Δٕज़ͱ͍͏આ໌ؒ ҧ͍ 1. ݱ࣮ੈքઌʹ۩ମతͳͷ͕͋ΓɺͦΕΛ༷ʑͳج४Ͱྨ͢Δ 2. ݱ࣮ੈք࣌ؒ࣠ίϯςΩετͰRole͕มԽ͍ͯ͘͠(OOPͰ1छྨͷΫϥ ε͔ΒΠϯελϯε͕࡞ΒΕΔ) 3.
ݱ࣮ੈքݸਓݸਓ͕ҙࢥΛ࣋ͬͯࣗ༝ʹಈ͘ɺOOPͷΠϯελϯε֎෦͔ Βͷࢦ͕ࣔͳ͍ݶΓ͔ࣗΒಈ͘ࣄͳ͍ɺ͋Β͔͡ΊܾΊΒΕͨࣄΛͦͷ௨ Γʹ͔࣮͠ߦͰ͖ͳ͍ • ݱ࣮ੈքͷҰ෦ΛݞΘΓ͢Δ͚ͩͰɺݱ࣮ੈքͦͷͷΛදݱ͢ΔΘ͚Ͱͳ͍ • ݱ࣮ΛදݱͰ͖Δͷ͋͘·Ͱ੩తϞσϧ(֓೦Ϟσϧ)·ͰͰ͋ΓɺಈతϞσϧ( ཧϞσϧ)ݱ࣮ͱͷྨࣅੑ͋·Γͳ͍
OOͰͷϞσϧ(2/2) • OOɺੳʹجͮ͘Ϟσϧ(ʹղऍ)هड़ͷҰൠతख๏Λࢧԉ͢Δ • ରΛཧղ͢ΔͨΊʹɺཁૉΛղ • ߏཁૉ͕ΦϒδΣΫτ • ߏཁૉؒͷؔΦϒδΣΫτͷؔ࿈ •
֊ཧղΧϓηϧԽͱͯ͠ද͢ • ಈతͳৼΔ͍implementationʹԡ͚͠Δ(ղܾͰ͖͍ͯͳ͍?) • OOͷϞσϧݱ࣮ੈքͷ֓೦(੩త)Λදݱͨ͠ଘࡏ
MVC͔ΒݟͨϞσϧ • MVCͩΖ͏͕ɺMVP, MVVM, MVI…ͩΖ͏͕ϨΠϠʔΛͨ͠ΞʔΩςΫ νϟͷతͷҰͭϞσϧΛִ͢Δͱ͍͏ࣄ • MΞϓϦέʔγϣϯͷதͰͷϏδωεϩδοΫΛ୲͢Δɺ͍ΘΞϓϦ έʔγϣϯͷຊମ෦ɺຊ࣭ʹͨΔ •
Mೖग़ྗදࣔͱ͍ͬͨॲཧΛߦ͏͜ͱͰ͖ͳ͍ • Mٕज़ʹґଘ͠ͳ͍Plainͳଘࡏ(POJO, PORO)Ͱ͋Δ͖ • ActiveRecord ͡ΊORMͦΕࣗମ͋͘·ͰMΛࢧ͑ΔͷͰ͋ͬͯ MͰͳ͍ • ۃɺGUI/CUI/WebAppͰมΘΒͳ͍ॲཧ͕͋ΔͳΒͦΕMͷࣄ
DDDͷࢹ
DDDͱ • Domain-Driven Design • υϝΠϯϞσϧΛத৺ʹߟ͑Δઃܭࢥ • DDDݴ༿Λେʹ͢Δઃܭࢥ • XP(ΠϯΫϦϝϯλϧͳઃܭ)
+ OO(ΦϒδΣΫτࢦ) • OOͷຊҙΛܧঝͨ͠··࣮ફͨ͠ͷ͕DDD • ܾͯ͠৽͍͠ͷͰͳ͍ɺۜͷؙͰͳ͍ • ίϛϡχέʔγϣϯίετ͕ߴ͍(ਓ͕ଟ͍)ͱ͜DDD͕අ༻ରޮՌ͕ߴ ͍͔
DDDͷత ιϑτΣΞͷ֩৺ʹ͋Δ ෳࡶੑͱಆ͏͜ͱ
DDDͷҙٛ • ͜Ε·ͰɺϞσϧͱσʔλͷೖΕͰɺͦΕΛૢ࡞ͯ͠खଓ͖Λ࣮ݱ ͢ΔαʔϏεΛ࣮͢Δɺͱ͍͏ٕज़ۦಈͳߟ͑ํ͕த৺ͩͬͨ(τϥϯ βΫγϣϯεΫϦϓτ) • υϝΠϯۦಈͰɺυϝΠϯϞσϧ͕ࣔ͢ߟ͑ํΛ֩৺ʹ͢ΔɻDDDͰ ͜ͷΛ୲͏ΦϒδΣΫτ܈Λڧௐಈ࡞ͤ͞Δ͜ͱΛલఏͱ͍ͯ͠Δɻ • OOͷϞσϧ֓೦Λࣔ͢ͷɻDDDͰɺϞσϧ=ߟ͑ํͱίʔυΛΑ
Γີʹ݁ͼ͚ͭͨιϑτΣΞΛ࣮ݱ͢Δ
υϝΠϯͱ • ιϑτΣΞΛར༻͢Δਓͨͪͷ”׆ಈ”ͱ”ؔ৺ࣄ" == ৫͕ߦ͏ࣄۀͦΕΛऔΓר͘ੈքͷ͜ͱ == ۀྖҬ • ։ൃऀͰͳ͘ར༻ऀͷݴ༿Ͱදݱ͢Δ •
“ιϑτΣΞͷ֩৺υϝΠϯʹؔͨ͠Λ ϢʔβͷͨΊʹղܾ͢ΔೳྗͰ͋Δ”
υϝΠϯϞσϧͱ • υϝΠϯϞσϧಛఆͷਤͰͳ͘ɺਤ͕͑Α͏ͱ͢Δ ߟ͑ํͰ͋Δ • ͦͷ͕ࣝݫີʹߏ͞Εɺબͼൈ͔ΕͯநԽ͞Ε ͨͷ • ϞσϧͱɺϓϩδΣΫτʹܞΘΔਓʑͷ಄ͷதͰߏங͞ Εͨ֓೦ͷू·ΓͰ͋ΓɺυϝΠϯʹ͍ͭͯͷಎΛө
ͨ͠ɺ༻ޠͱ֓೦ͷؔੑ͔ΒͰ͖͍ͯΔ • Ϟσϧͱબͼൈ͔Εγϯϓϧʹ͞ΕɺҙਤతʹΈཱͯ ΒΕͨࣝͷදݱܗࣜͰ͋ΔɻదͳϞσϧใͷ࣋ͭ ҙຯΛ໌Β͔ʹ͠ɺͦͷใΛʹूதͤ͞Δ • υϝΠϯϞσϧྖҬΛදͨ͠ͷ(υϝΠϯϞσϧ ͚ͩͰػೳཁٻΛຬͨ͢͜ͱ͕Ͱ͖ͳ͍) • υϝΠϯϞσϧར༻ऀ(ϝϯλϧ)ͷؔ৺ຖͷܕ
υϝΠϯϞσϧͷՁ 1. Ϟσϧͱઃܭͷ֩৺͕૬ޓʹܗ͠߹͏ 2. ϞσϧνʔϜϝϯόશһ͕༻͢Δݴޠͷج൫Ͱ͋Δ 3. Ϟσϧৠཹ͞ΕͨࣝͰ͋Δ
ϢϏΩλεݴޠ • ͍ͭͰɾͲ͜Ͱɾ୭Ͱ͑Δݴ༿ • υϝΠϯΤΩεύʔτιϑτΣΞ։ൃऀΛؚΊͨνʔϜશମͰ࡞Γ্ ͛Δڞ༗ݴޠ • ϢϏΩλεݴޠͷޠኮυϝΠϯϞσϧͦͷৼΔ͍ʹඥͮ͘Ұ؏ͨ͠ ݴޠΛఆٛͯ͠ɺ։ൃνʔϜ/PO/ސ٬ͱͷίϛϡχέʔγϣϯΪϟοϓΛ ຒΊΔ
ϢϏΩλεݴޠ σβΠϯύλʔϯ ٕज़༻ޠ ઐత Ϗδωε༻ޠ
ڥք͚ͮΕͨίϯςΩετ(1/2) • υϝΠϯۭؒͱղܾۭؒΛ͍࣋ͬͯΔ • ۭؒ: ղܾ͖͢Ϗδωεઓ্ུͷ՝Λු͖ ூΓʹ͢Δͷ • ղܾۭؒ: ιϑτΣΞΛͲͷΑ͏ʹ࣮ͯͦ͠ͷ
՝Λղܾ͢Δ͔ʹ͢Δͷ(ڥք͚ΒΕͨ ίϯςΩετ) • ڥք͚ͮΕͨίϯςΩετ໌ࣔతͳڥքͰ͋Γɺυϝ ΠϯϞσϧ͕Ͳ͜ʹଐ͢Δ͔Λද͢ͷ • ex. จ຺͕நԽ͞Εͨͷ͕ه߸ɻจ຺͕ڞ༗͞Εͯ ͍ͳ͍ͱҙຯΛղऍͰ͖ͳ͍ɻͦͷจ຺͕ͦ͜ڥք͚ ΕͨίϯςΩετ
ڥք͚ͮΒΕͨίϯςΩετ(2/2) • ݴ༿ͷڥքΛؾʹ͢Δ(จ຺ʹΑͬͯಉ͡ϞϊͰҙຯ͕ҧ͏) • ڥք͚ͮΒΕͨίϯςΩετͷओతɺϢϏΩλεݴޠͦͷυϝΠϯ ϞσϧΛΧϓηϧԽ͢Δ͜ͱ • DDDͰಉ໊͡લͰBC͕ҟͳΕɺҟͳΔϞσϧͱͯ͠ఆٛ͢Δ
Ϟσϧۦಈઃܭ(1/2) • ͔࣍Β࣍ͱػೳΛຬͨ͢ίʔυΛ࡞͢Δ͚ͩͷϓϩδΣΫτɺࣝ ͷטΈࡅ͖ͱίϛϡχʔέʔγϣϯʹ͓͚ΔԸܙΛ΄ͱΜͲड͚ͳ͍ • ͕ى͖ΔͷɺϞσϧۦಈઃܭʹ͓͍ͯ݁ͼ͚ͭͯߟ͍͑ͯΔ2ͭͷ ࡞ۀɺϞσϦϯάͱ࣮Λͯ͠͠·ͬͨ࣌ • ઃܭ͕͋Δ͍ઃܭͷத৺ͱͳΔ෦͕ɺυϝΠϯϞσϧʹඥ͍͍ͮͯͳ ͍ͳΒɺͦͷϞσϧʹ΄ͱΜͲՁͳ͘ɺιϑτΣΞ͕ਖ਼֬Ͱ͋Δ
͔Ͳ͏͔ٙΘ͍͠ɻಉ͡Α͏ʹɺϞσϧͱઃܭ͞Εͨػೳͱͷඥ͚͕ͮ ෳࡶͩͱཧղ͢Δͷ͕͘͠ɺ࣮ࡍʹɺઃܭ͕มߋ͞Εͨ࣌ʹඥ͚ͮΛ ҡ࣋Ͱ͖ͳ͘ͳΔ
Ϟσϧۦಈઃܭ(2/2) • ඥ͚͕໌Β͔ʹͳΔΑ͏ʹɺυϝΠϯϞσϧΛจࣈ௨ΓͷҙຯͰ࣮ʹ өͤ͞Δ͜ͱɻϞσϧʹ͍ͭͯ࠶ݕ౼͠ɺΑΓࣗવʹιϑτΣΞʹ࣮ ͞ΕΔΑ͏ʹमਖ਼͢Δ͜ͱ • ίʔυϞσϧͷදݱͱͳΔ͔Βɺίʔυʹର͢ΔมߋϞσϧʹର͢Δ มߋʹͳΔ͔͠Εͳ͍ɻͦͷӨڹɺϓϩδΣΫτͷଞͷ׆ಈશମͱ దٓΘ͍͔ͬͯͳ͚ΕͳΒͳ͍
TPS͔Β • શͯͷ࡞ۀऀ͕ੜ࢈ϥΠϯશମʹΛ࣋ͭɻܽ ؕΛݟ͚ͭͨΒɺඥΛҾͬுͬͯɺϥΠϯΛࢭΊΔɻ ͦ͏ͯ͠ɺϥΠϯͷશһͰͷࠜຊݪҼΛൃݟ͠ ͦΕΛमਖ਼͢Δ
Ϟσϧ(ۀ)ʹΛ࣋ͱ͏ Ϟσϧ(ۀ)Λߟ͑ଓ͚Α͏
·ͱΊ • Ϟσϧ/ۀྖҬ • Ϟσϧ֓೦Λࣸ͠औΔखஈ • ϞσϧେͳࣝΛཁͨ͠γϯϓϧͰΘ͔Γ͍͢આ໌ • ͕ࣗͨͪܞΘΔۀʹڵຯɺɺਅʹऔΓΉ͜ͱͰɺΑΓྑ͍Ϟ σϧ͕ੜ·ΕΔ
See also(links) • ϞσϧͱԿ͔ʁ http://dse.ssi.ist.hokudai.ac.jp/~onosato/lectures/DSE19/H19-Model.pdf • ΦϒδΣΫτࢦͱ10ઓͬͯΘ͔ͬͨ͜ͱ http://qiita.com/tutinoco/items/ 6952b01e5fc38914ec4e •
ϨΠϠʔઃܭͱ͔ɺΦϒδΣΫτࢦͱ͔ɺDDDͱ͔ɺͦͷล http://mattun.hatenablog.com/ entry/2014/07/19/135320 • OO੩తߏΛɺؔܕಈతৼΔ͍ΛϞσϧԽ͢Δͷʹ༗༻ͩͱ͍͏ɹhttp:// tanakakoichi9230.hatenablog.com/entry/3741984190 • ʮMVCͷצҧ͍ʯʹ͍ͭͯɺ͏Ұߟ͑ͯΈΔ http://at-grandpa.hatenablog.jp/entry/2013/11/ 01/072636 • FiNC DDDୈҰճษڧձ http://www.slideshare.net/hirokishigemura9/ruby-ddd • ϞσϦϯά͠ͳ͍ͰXPͱԿࣄͩ http://www.slideshare.net/iwaoRd/xp-20150912
See also(links) • ϦΞΫςΟϒDDD https://speakerdeck.com/j5ik2o/riakuteibuddd?slide=23 • GANMA!ͰDDDΛͬͯΈ͔ͯΒ1͘Β͍ܦͬͨ http://www.slideshare.net/ yasuyukisugitani/septeni-scala3 •
DCIΞʔΩςΫνϟʹ͍ͭͯޠͬͯΈΔΑ http://uehaj.hatenablog.com/entry/20100528/ 1275011951 • ͦͷޙͷJoe ArmstrongͷΦϒδΣΫτࢦʹର͢Δݟղ http://qiita.com/lambda-knight/ items/a33feffe947a958a2d3a • DCIΞʔΩςΫνϟͷཧͱGrailsʹΑΔ࣮ http://d.hatena.ne.jp/digitalsoul/20101110/ 1289315452)
See also(books) • εʔύʔϓϩάϥϚʔʹֶͿ ࠷ڧγϯϓϧࢥߟज़ • ΦϒδΣΫτࢦͰͳͥͭ͘Δͷ͔ • ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ •
࣮ફυϝΠϯۦಈઃܭ • ΤΫετϦʔϜϓϩάϥϛϯά • τϤλੜ࢈ํࣜ
Any Questions?