Slide 1

Slide 1 text

1)1൛ʂ 4XPPMFͷϑϨʔϜϫʔΫΛ ൺ΂ͯΈͨ גࣜձࣾαΠόʔΤʔδΣϯτ നҪӳ  QIQFSLBJHJ !HPPEPP

Slide 2

Slide 2 text

• גࣜձࣾαΠόʔΤʔδΣϯτ • 4(&౷ׅຊ෦ٕज़౷ׅࣨࣨ௕ • ࢠձࣾࣾ$50 • גࣜձࣾ$SBGU&HH • גࣜձࣾαϜβοϓ • നҪɹӳ • ΤϯδχΞ • #MPH IUUQBNFCMPKQHPPEPP ͓લɺ୭Α • 5XJUUFS !HPPEPP • %2 ͙ͪ͢Ή '#  
 ϓΫϦϙ ཱྀܳਓ

Slide 3

Slide 3 text

"HFOEB w4XPPMFͱ͸ w4XPPMFΛ༻͍ͨϑϨʔϜϫʔΫ wࠓճ͓࿩͢ΔϑϨʔϜϫʔΫΛ 
 ਂ۷Γ wϕϯνϚʔΫ݁Ռ w·ͱΊ

Slide 4

Slide 4 text

4XPPMFͱ͸

Slide 5

Slide 5 text

1)1ͰΠϕϯτۦಈͷඇಉظ ˍίϧʔνϯϕʔεͷฒߦॲཧ

Slide 6

Slide 6 text

1)1ͷFYUFOTJPOͱͯ͠ ಋೖ͠·͢ # pecl install swoole

Slide 7

Slide 7 text

4XPPMFΛ༻͍ͨ ϑϨʔϜϫʔΫ

Slide 8

Slide 8 text

4XPPMFΛ༻͍ͨ ϑϨʔϜϫʔΫ͸ ͍͔ͭ͋͘Γ·͢ ެࣜαΠτΛݟͯΈ·͠ΐ͏

Slide 9

Slide 9 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫͷIJTUPSZΛΈͯΈ·͢ https://github.com/swoole/swoole-src ࣌఺

Slide 10

Slide 10 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̍ʣ࠷ॳظߋ৽ 4XPGUͷ௥Ճ

Slide 11

Slide 11 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̎ʣͦͷ̎ߋ৽ &BTZ4XPPMFͷ௥Ճ

Slide 12

Slide 12 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̏ʣͦͷ̏ߋ৽ 4BCFSͷ௥Ճ

Slide 13

Slide 13 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̐ʣͦͷ̐ߋ৽ )ZQFSGͷ௥ՃʢҰ൪্ʹʣ

Slide 14

Slide 14 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̑ʣͦͷ̑ߋ৽ .JY1)1ͷ௥Ճ

Slide 15

Slide 15 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̒ʣͦͷ̒ߋ৽ JNJͷ௥Ճ

Slide 16

Slide 16 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̓ʣݱࡏߋ৽ 0OFͷ௥Ճ

Slide 17

Slide 17 text

4XPPMFͷ(JU)VCͷ3&"%.&Ͱ঺հ͞Εͯ ͍ΔϑϨʔϜϫʔΫ https://github.com/swoole/swoole-src ʢ̓ʣݱࡏߋ৽

Slide 18

Slide 18 text

ࠓճऔΓ্͛Δ ϑϨʔϜϫʔΫΛ ؆୯ʹ͝঺հ

Slide 19

Slide 19 text

)ZQFS )ZQFSTQFFE 'MFYJCJMJUZ)ZQFSG ໊͕લͷ༝དྷ ϚΠΫϩαʔϏεΛҙࣝͨ͠ϑϨʔϜϫʔΫ εϐʔυͱॊೈੑΛ௥ٻʂ 4XPPMFͷ(JU)VCͰ͸ɺϑϨʔϜϫʔΫͷ঺հͷதͰ Ұ൪্ʹ঺հ͞Ε͓ͯΓɺίϛοτ਺΋࠷΋ଟ͍

Slide 20

Slide 20 text

4XPGU ϞμϯͰɺߴੑೳͰ "01ͱ$PSPVUJOFΛ උ͑ͨϑϨʔϜϫʔΫ 1)1$PO4FOEBJͷ-5Ͱ ࿩͠·ͨ͠ https://speakerdeck.com/sgeengineer/swoolewotukatutahuremuwakuswoftwotafalsesimu ϞμϯͳϑϨʔϜϫʔΫͳΒɺͪ͜Β

Slide 21

Slide 21 text

&BTZTXPPMF ؆୯ʹ4XPPMFΛࢼ͢ͷͳΒɺͪ͜Β https://speakerdeck.com/sgeengineer/isucon8deyu-xuan-luo-tisitafalsede-swoole-easyswoole-deshu-kihuan-ete-gan-xiang-zhan-debentizou-rasetemitahua 1)1$POGFSFODFͷ -5Ͱ࿩͠·ͨ͠ɾɾɾ

Slide 22

Slide 22 text

4XPPMFͷ(JU)VCͰ঺հ͞Ε͸͞Ε͍ͯͳ͍ Ͱ͕͢ɺݸਓతʹ஫໨͍ͯ͠ΔϑϨʔϜϫʔΫ

Slide 23

Slide 23 text

͜ͷηογϣϯΛࢹௌ͞Ε͍ͯΔօ͞ΜͳΒ Ί΋Γʔ͞Μͷൃද΋ฉ͍ͯΔͱࢥ͏ͷͰ ৄ͘͠͸ͦͪΒͰʂ ʢࣗ෼΋ΊͬͪΌڵຯ͋Δʣ

Slide 24

Slide 24 text

ࠓճ͓࿩͢Δ ϑϨʔϜϫʔΫ Λগ͠ਂ۷Γ

Slide 25

Slide 25 text

w)ZQFSG W  w&BTZ4XPPMF W  w4XPGU W  w-BSBWFM4XPPMF W

Slide 26

Slide 26 text

ؓ࿩ٳ୊

Slide 27

Slide 27 text

4XPPMFͷ 1)1ͱ+*5ͷରԠঢ়گ͸ Ͳ͏ͳͷ͔ʁ

Slide 28

Slide 28 text

4XPPMFͷهड़ 1)1Ҏ্Ͱ ίϯύΠϧՄೳ

Slide 29

Slide 29 text

4XPPMF͸ 1)1ͷ؀ڥͰQFDMͰ ΠϯετʔϧͰ͖ͨ

Slide 30

Slide 30 text

શવ໰୊ͳ͍͚͘Δ͡ΌΜ ͱࢥͬͨࣗ෼͕͍·ͨ͠

Slide 31

Slide 31 text

+*5͕ɾɾɾɾɾɾ https://github.com/swoole/swoole-src/issues/3986

Slide 32

Slide 32 text

+*5͕ɾɾɾɾɾɾ

Slide 33

Slide 33 text

ࠓճͷ؀ڥΛ࡞Δͱ͖ʹ 1)1 4XPPMF ͷ૊Έ߹ΘͤΛ બΜͰ͠·ͬͨͨΊ ΊͬͪΌযΓ·ͨ͠

Slide 34

Slide 34 text

ࠓ͸ղܾ͞Ε͍ͯ·͢ 1)1YܥͰ͸ 4XPPMFҎ্Λ ͓࢖͍͍ͩ͘͞

Slide 35

Slide 35 text

ؓ࿩ٳ୊ऴΘΓ

Slide 36

Slide 36 text

w)ZQFSG W  w&BTZ4XPPMF W  w4XPGU W  w-BSBWFM4XPPMF W

Slide 37

Slide 37 text

 )ZQFSG  )ZQFSG https://github.com/hyperf/hyperf

Slide 38

Slide 38 text

ϕʔεͷΞʔΩςΫνϟ  )ZQFSG •Coroutin e •Dependency injectio n •Event s •Annotatio n •AOP(asset-oriented programming

Slide 39

Slide 39 text

ϦϦʔεܭը͕͔ͬ͠Γͯ͠Δʂ  )ZQFSG https://hyperf.wiki/2.1/#/en/release-planning

Slide 40

Slide 40 text

)ZQFSGͷϑΥϧμߏ੒ ࠷খݶ Projec t ! appɹɹɹɹɹɹɹɹ "ɹ! Controller s "ɹ"ɹ! AbstractController.ph p "ɹ"ɹ# BooksController.ph p "ɹ! Model s "ɹ"ɹ# Books.ph p "ɹ! Exceptio n "ɹ# Listene r ! confi g "ɹ! config.ph p "ɹ# routes.ph p ! publi c ! runtim e "ɹ! log s "ɹ! containe r "ɹ# sessio n ! storag e "ɹ# view s "ɹɹɹ# index.twi g # bi n ɹɹ# hyperf.ph p  )ZQFSG

Slide 41

Slide 41 text

ίϯτϩʔϥʔ  )ZQFSG

Slide 42

Slide 42 text

ίϯτϩʔϥʔ  )ZQFSG w 63-ͷϚοϐϯάɺϝιουࢦఆΛ BOOPUBUJPOͰઃఆ w .JEEMFXBSFͷݺͼग़͠Λ BOOPUBUJPOͰઃఆ

Slide 43

Slide 43 text

 )ZQFSG 7JFX DPO fi H

Slide 44

Slide 44 text

 )ZQFSG 7JFX DPO fi H w 5FNQMBUFΤϯδϯͷࢦఆ 
 #MBEF 4NBSUZͳͲʹ΋ରԠ

Slide 45

Slide 45 text

 )ZQFSG 7JFX DPO fi H w 7JFXͷϨϯμϦϯάΛ 5BTL8PSLFSʹͤ͞Δ 
 ผϓϩηεͱͳΔ

Slide 46

Slide 46 text

ਵॴʹ)ZQFS4QFFE Λҙࣝͨ͠࡞ΓࠐΈʂ  )ZQFSG

Slide 47

Slide 47 text

 4XPGU  4XPGU http://swoft.io/

Slide 48

Slide 48 text

• Built-in high performance network server(Http/Websocket/RPC/TCP ) • Flexible componentizatio n • Flexible annotation functio n • Diversi fi ed command terminal(Console ) • Powerful Aspect Oriented ProgrammingʢAOPʣ • Perfect Container management, Dependency Injection (DI ) • Flexible event mechanis m • Implementation of HTTP message based on PSR- 7 • Event Manager Based on PSR-1 4 • Middleware based on PSR-1 5 • Internationalization(i18n) suppor t • Simple and ef fi cient parameter validato r •High performance connection pool(Mysql/Redis/RPC)ɼAutomatic reconnectio n •Database is highly compatible Larave l •Cache Redis highly compatible Larave l •Ef fi cient task processin g •Ef fi cient seconds cronta b •Process poo l •Flexible exception handlin g •Powerful log syste m •Service registration & discover y •Service breake r •Service restriction s •Service fallbac k •Con fi guration Cente r •Apoll o •Consul https://github.com/swoft-cloud/swoft ͷREADME Ҿ༻ɿ  4XPGU

Slide 49

Slide 49 text

•Built-in high performance network serve r •Flexible annotation functio n •Powerful Aspect Oriented ProgrammingʢAOPʣ •Perfect Container management, Dependency Injection (DI ) •Implementation of HTTP message based on PSR- 7 •Middleware based on PSR-1 5 •High performance connection pool(Mysql/Redis/RPC)ɼ Automatic reconnectio n •Database is highly compatible Larave l •Cache Redis highly compatible Larave l ಛ௃  4XPGU

Slide 50

Slide 50 text

4XPGUͷϑΥϧμߏ੒ ࠷খݶ Projec t ! appɹɹɹɹɹɹɹɹ "ɹ! Controller s "ɹ"ɹ# BooksController.ph p "ɹ! Model s "ɹ"ɹ# Entit y "ɹ"ɹ # Books.php "ɹ# bean.ph p ! publi c ! runtim e "ɹ! log s "ɹ! cache s "ɹ# session s ! resource s "ɹ# view s "ɹɹɹ# book s "ɹɹɹɹɹ# view.ph p # bi n ɹɹ! bootstrap.ph p ɹɹ# swoft  4XPGU

Slide 51

Slide 51 text

w "OOPUBUJPOͷॻ͕ࣜҰ෦มΘͬͨ 
 3FRVFTU.BQQJOHͷNFUIPEͷࢦఆ  w %#Ϋϥεͷվળ 
 4XPGUa%Ca%#  w 4FTTJPOΫϥεͷվળ 
 4XPGUa)UUQa4FTTJPOa)UUQ4FTTJPO  4XPGU Wͷؾ͍ͮͨมߋ఺

Slide 52

Slide 52 text

Ұ௨Γἧ͍ͬͯΔ ϑϧελοΫ ϑϨʔϜϫʔΫ  4XPGU

Slide 53

Slide 53 text

 &BTZ4XPPMF  &BTZ4XPPMF https://github.com/easy-swoole/easyswoole

Slide 54

Slide 54 text

ಛ௃  &BTZ4XPPMF •Built-in HTTP, TCP, WebSocket,Udp Coroutine Serve r •Global dependency injection containe r •PSR-7 based HTTP message implementatio n •RESTful supporte d •HTTP,TCP, WebSocket, Udp middleware suppor t •Mysql, Redis, RPC, HTTP Coroutine Client s •High performance route r •Universal connection pool s •Remote Console support W

Slide 55

Slide 55 text

&BTZ4XPPMFͷϑΥϧμߏ੒ ࠷খݶ Projec t ! Appɹɹɹɹɹɹɹɹ "ɹ! HttpControlle r "ɹ"ɹ! BooksController.ph p "ɹ"ɹ# Router.ph p "ɹ! Mode l "ɹ"ɹ# BookModel.ph p "ɹ# Utilit y "ɹɹɹ# Poo l "ɹɹɹɹɹ# MysqlObject.ph p ! EasySwooleEvent.ph p ! View s "ɹ# index.twi g ! Lo g ! Tem p ! vendo r ! Stati c "ɹ! cs s "ɹ# j s ! easyswool e ! produce.ph p # dev.php  &BTZ4XPPMF

Slide 56

Slide 56 text

w ίωΫγϣϯϓʔϧͷ࢓૊Έ͕গ͠վળ͞Εͨ 
 ઐ༻ͷΫϥε͕ඪ४ʹ &BTZ4XPPMFa1PPMa.BOBHFS  w 4FTTJPOΛѻ͏Ϋϥεͷվળ 
 &BTZ4XPPMFa4FTTJPOa4FTTJPO  w $PO fi Hͷॻࣜ΋গ͠มߋ 
 5BTL8PSLFSͷ߲໨͕ಠཱ  &BTZ4XPPMF Wͷؾ͍ͮͨվળ఺

Slide 57

Slide 57 text

ΘΓͱૉ௚ʹѻ͑Δ ϑϨʔϜϫʔΫ  &BTZ4XPPMF

Slide 58

Slide 58 text

 -BSBWFM4XPPMF  -BSBWFM4XPPMF https://github.com/swooletw/laravel-swoole

Slide 59

Slide 59 text

ಛ௃ -BSBWFMͷ ΞϓϦέʔγϣϯ͕ 4XPPMFͰಈ͘  -BSBWFM4XPPMF

Slide 60

Slide 60 text

-BSBWFM UP -BSBWFM4XPPMF  -BSBWFM4XPPMF

Slide 61

Slide 61 text

 DPNQPTFSʹ௥Ճ  -BSBWFM4XPPMF  DPO fi Hͷ1SPWJEFS௥Ճ

Slide 62

Slide 62 text

 4XPPMF༻ͷDPO fi Hੜ੒  -BSBWFM4XPPMF $ php artisan vendor:publish --tag=laravel-swoole  DPO fi HTXPPMF@IUUQQIQΛઃఆ

Slide 63

Slide 63 text

 ىಈ  -BSBWFM4XPPMF $ php artisan swoole:http start ॳظઃఆͩͱ൪ϙʔτͰ଴ͪड͚·͢  OHJOYͷઃఆ proxy_pass http://127.0.0.1:1215 QSPYZ@QBTTͰઃఆ͠·͢ https://github.com/swooletw/laravel-swoole/wiki

Slide 64

Slide 64 text

-BSBWFMͰॻ͍ͨ ΞϓϦέʔγϣϯ͕ ΄Μͱ͏ʹͦͷ·· 4XPPMFͰಈ͘ʂ  -BSBWFM4XPPMF

Slide 65

Slide 65 text

ϕϯνϚʔΫ ݁Ռ

Slide 66

Slide 66 text

*46$0/ ϕϯνϚʔΫ݁Ռ ൺֱ

Slide 67

Slide 67 text

*46$0/ͷ͓୊ 8FCαΠτͷ࢓༷

Slide 68

Slide 68 text

νέοτ༧໿αΠτ

Slide 69

Slide 69 text

ϩάΠϯ͕͋Γɺηογϣϯ؅ཧඞཁ

Slide 70

Slide 70 text

੮༧໿ͷτϥϯβΫγϣϯ੍ޚ͋Γ

Slide 71

Slide 71 text

؅ཧը໘Ͱ$47μ΢ϯϩʔυ΋͋Δ

Slide 72

Slide 72 text

ຊ൪ͱಉ͡؀ڥ͸ ༻ҙͰ͖ͳ͔ͬͨͷͰ ($1্Ͱଌͬͨ ݁ՌͰ͢ n2-highcpu-2ʢvCPU x 2ɺϝϞϦ 2 GBʣ

Slide 73

Slide 73 text

ߏ੒ 4MJNɺ-BSBWFM ߏ੒ )ZCFSG &BTZ4XPPMF 4XPGU -BSBWFM4XPPMF h2o php-fpm MySQL h2o Swoole MySQL ୆ ୆

Slide 74

Slide 74 text

ࠓճ͸࣍ͷͭͷ؀ڥΛൺֱ w 1)1 01DBDIF w 1)1 01DBDIF w 1)1 01DBDIF +*5

Slide 75

Slide 75 text

ಥવͷؓ࿩ٳ୊ ճ໨ʣ

Slide 76

Slide 76 text

ͦΕͧΕͷϑϨʔϜ ϫʔΫͬͯ1)1ʹ ରԠ͍ͯ͠Δͷʁ

Slide 77

Slide 77 text

)ZQFSGͷDPNQPTFSKTPO

Slide 78

Slide 78 text

͍͚ΔΜ͡ΌͶ

Slide 79

Slide 79 text

൵͍͠ݱ࣮

Slide 80

Slide 80 text

൵͍͠ݱ࣮ %*͕ґଘ͍ͯ͠ΔϞδϡʔϧ ͕1)1ʹରԠ͍ͯ͠ͳ͍

Slide 81

Slide 81 text

࢑ఆରԠ 1)1Ͱಈ͍ͨιʔεΛ ͦͷ··ίϐʔͯ͠ DPNQPTFSJOTUBMMΛར༻͠ͳ͍  ແཧ໼ཧ࣮ߦ ʢҰԠಈ͍ͨ

Slide 82

Slide 82 text

MBSBWFMTXPPMFͷDPNQPTFSKTPO

Slide 83

Slide 83 text

ͩΊ͡ΌΜ

Slide 84

Slide 84 text

࢑ఆରԠ ࠶ͼ 1)1Ͱಈ͍ͨιʔεΛ ͦͷ··ίϐʔͯ͠ DPNQPTFSJOTUBMMΛར༻͠ͳ͍  ແཧ໼ཧ࣮ߦ ʢҰԠಈ͍ͨ

Slide 85

Slide 85 text

&BTZ4XPPMF W ͱ 4XPGU W  ͸0,Ͱͨ͠

Slide 86

Slide 86 text

ؓ࿩ٳ୊ऴΘΓ

Slide 87

Slide 87 text

͓଴͔ͪͶͷ ൺֱ݁Ռ

Slide 88

Slide 88 text

ͦΕͧἘճܭଌͯ͠ ࠷େ஋ɺ࠷খ஋Λআ͍ ͨ̑ճͷฏۉ஋Ͱൺֱ ϩδοΫมߋͳ͠

Slide 89

Slide 89 text

%FGBVMU 4MJN )ZQFSG W 4XPGU W &BTZ4XPPMF W -BSBWFM W -BSBWFM 4XPPMF ճ໨       ̎ճ໨       ճ໨       ճ໨       ̑ճ໨       ճ໨       ճ໨       ճͷฏۉ        1)14XPPMF

Slide 90

Slide 90 text

%FGBVMU 4MJN )ZQFSG W 4XPGU W &BTZ4XPPMF W -BSBWFM W -BSBWFM 4XPPMF ճ໨       ̎ճ໨       ճ໨       ճ໨       ̑ճ໨       ճ໨       ճ໨       ճͷฏۉ        1)1 +*5PGG 4XPPMF

Slide 91

Slide 91 text

%FGBVMU 4MJN )ZQFSG W 4XPGU W &BTZ4XPPMF W -BSBWFM W -BSBWFM 4XPPMF ճ໨       ̎ճ໨       ճ໨       ճ໨       ̑ճ໨       ճ໨       ճ໨       ճͷฏۉ        1)1 +*5PO 4XPPMF

Slide 92

Slide 92 text

%FGBVMU 4MJN )ZQFSG W 4XPGU W &BTZ4XPPMF W -BSBWFM W -BSBWFM 4XPPMF 1)1       1)1 +*5PGG       1)1 +*5PO       ؀ڥ͝ͱͷൺֱ

Slide 93

Slide 93 text

%FGBVMU 4MJN )ZQFSG W 4XPGU W &BTZ4XPPMF W -BSBWFM W -BSBWFM 4XPPMF 1)1       1)1 +*5PGG       1)1 +*5PO       ؀ڥ͝ͱͷൺֱ ≒ ≒ ≒ ≒ ≒ ≒ ≒ ≒ 61 61

Slide 94

Slide 94 text

)ZQFSG͕ϕϯνϚʔΫGBJM ͢Δ͜ͱ΋͋ͬͨ TFTTJPO·ΘΓ  ࢲͷιʔε͕ѱ͍Մೳੑ΋େ͍ʹ͋Γʣ 
 ϕϯνϚʔΫॴײ

Slide 95

Slide 95 text

%#ʹෛՙ͕͔͔ΔϕϯνϚʔ ΫͷͨΊɺ࿈ଓͰ͔͚Δͱ ίωΫγϣϯϓʔϦϯάͯ͠ ͍ΔϑϨʔϜϫʔΫ͸ Τϥʔ͕ग़Δ͜ͱ΋͋ͬͨ ϕϯνϚʔΫॴײ

Slide 96

Slide 96 text

·ͱΊ

Slide 97

Slide 97 text

4XPPMFͷϑϨʔϜ ϫʔΫͷ1)1΁ͷ ຊ֨తͳରԠ͸ ͜Ε͔ΒͱࢥΘΕΔ

Slide 98

Slide 98 text

ࠓޙ΋ಈ޲Λ ௥͍ͬͯ͘

Slide 99

Slide 99 text

ݱ࣌఺ͷ͓͢͢Ί͸ʁ

Slide 100

Slide 100 text

ࠓޙͷظ଴΋ࠐΊͯ )ZQFSG ͋͘·Ͱݸਓͷײ૝Ͱ͢

Slide 101

Slide 101 text

-BSBWFM4XPPMF ΋Ҿ͖ଓ͖XBUDI ͋͘·Ͱݸਓͷײ૝Ͱ͢

Slide 102

Slide 102 text

Έͳ͞Μ΋ 4XPPMFΛ͔ͭͬͨ ϑϨʔϜϫʔΫʹ νϟϨϯδ͠·͠ΐ͏

Slide 103

Slide 103 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠