Slide 1

Slide 1 text

1)1ͰͷH31$ΫϥΠΞϯτ࡞੒ͱ Ϣʔεέʔε 1)1$POGFSFODF

Slide 2

Slide 2 text

© Chatwork ࣗݾ঺հ ˔ଜ্ढ़հ ˔$IBUXPSLגࣜձࣾ ˔ೖࣾ ˔1)1ΤϯδχΞ ˔*46$0/ͷຊઓʹ1)1Ͱग़৔ͨ͠Αʂ

Slide 3

Slide 3 text

© Chatwork $IBUXPSLʹ͍ͭͯ ˔ϏδωενϟοταʔϏε ˓άϧʔϓνϟοτ λεΫ؅ཧ ϑΝΠϧڞ༗ ϏσΦԻ੠௨࿩ ˔ಋೖاۀ ࣾҎ্ ݱࡏ

Slide 4

Slide 4 text

© Chatwork 5PQJDT ˔ಋೖ ˔H31$ʹ͍ͭͯ ˔1)1ͰͷH31$ΫϥΠΞϯτ࣮૷ ˔$IBUXPSLͷH31$Ϣʔεέʔε

Slide 5

Slide 5 text

© Chatwork

Slide 6

Slide 6 text

© Chatwork (3085) ˔αʔϏε͕(SPXUIͨ͠ͱ͖ʹͲ͏͢Δ͔ʁ ˔ڊେͳϞϊϦεͷγεςϜ͸େମπϥ͍ ˓ಡΈղ͚ͳ͍εύήοςΟίʔυ ˓ྺ࢙తܦҢɺ҉໧஌ ˓ؔ܎ͳ͍͸ͣͷมߋ͕΋ͨΒ͢όά

Slide 7

Slide 7 text

© Chatwork (3085) ˔ҙຯͷ͋Δ୯ҐͰ෼ׂ͍ͨ͠ ˓ίϯϙʔωϯτΛ"1*Ͱ΍ΓऔΓ͢Δέʔε͸Α͋͘Δ ˙มߋͷӨڹΛখ͘͢͞Δ ˙վળΛ༰қʹ ˔㱠.JDSPTFSWJDFT

Slide 8

Slide 8 text

© Chatwork (3085) ˔+40/Ͱ௨৴͢Δ)551ϕʔεͷ"1* ˓"1*ͷϑΥʔϚοτΛڞ༗͢Δͷ͸େม ˓௨৴ʹΑΔύϑΥʔϚϯε΁ͷӨڹ͕খ͘͞ͳ͍ ˔ϋΠύϑΥʔϚϯεɺ։ൃ༰қੑ ˓H31$Λ࢖ͬͯղܾͰ͖Δ͔΋͠Εͳ͍

Slide 9

Slide 9 text

© Chatwork 1)1ΞϓϦέʔγϣϯͷจ຺Ͱߟ͑Δͱ ˔1)1ϞϊϦε͔ΒίϯϙʔωϯτΛ੾Γग़͢λΠϛϯάͰ ผݴޠΛબ୒͢Δέʔε ˓ΞʔΩςΫνϟɺύϑΥʔϚϯε্ͷཧ༝ͱ͔ ˓ 1)1πϥ͍ͱ͔υϠΕΔݴޠΛ࢖͍͍ͨͱ͔  ˔H31$ͷ࢓্༷ύϑΥʔϚϯε͕༏Ε͍ͯΔ ˓1)1ΛH31$ΫϥΠΞϯτͱͯ͠Քಇ͍ͤͨ͞

Slide 10

Slide 10 text

© Chatwork gRPCʹ͍ͭͯ

Slide 11

Slide 11 text

© Chatwork H31$ ˔(PPHMF͕։ൃͨ͠ϓϩτίϧ ˔)UUQϕʔεͰߴ଎ͳ௨৴͕Մೳ ˓4USFBNJOH ˔3FRVFTU3FTQPOTF4FSJBMJ[BUJPO ˔ৄࡉͳυΩϡϝϯτ ˓IUUQTHSQDJP ˓IUUQTHJUIVCDPNHSQDHSQDUSFFNBTUFSEPD ˙HSQDJP͸ݹ͍ͱ͜Ζ͕͋ΔͷͰ(JU)VC΋ݟͨํ͕͍͍

Slide 12

Slide 12 text

© Chatwork 1SPUPDPM#VGGFST ˔ߏ଄σʔλͷγϦΞϥΠζϝΧχζϜ ˓3FRVFTU3FTQPOTFͷ4FSJBMJ[FSͱͯ͠H31$ͷσϑΥϧ τʹͳ͍ͬͯΔ ˔*%- *OUFSGBDF%FGJOJUJPO-BOHVBHF  ˓3FRVFTU3FTQPOTFΛఆٛ͢Δ%4- QSPUP  ˓αʔόʔΫϥΠΞϯτ͕ڞ௨Ͱ࢖༻͢Δ"1*ϑΥʔϚοτ Λ౷ҰͰ͖Δ

Slide 13

Slide 13 text

© Chatwork 1SPUPDPM#VGGFSTTBNQMF syntax = “proto3"; message Person { string name = 1; string email = 2; enum PhoneType { MOBILE = 0; HOME = 1; } message PhoneNumber { string number = 1; PhoneType type = 2; } } service GreetingService { rpc greet (Person) returns (stream PersonResponse); }

Slide 14

Slide 14 text

© Chatwork QSPUPD ˔1SPUPDPM#VGGFST$PNQJMFS ˔1SPUPDPM#VGGFSTͷҰ෦ ˓ϏϧυࡁΈͷ࣮ߦϑΝΠϧ͕(JU)VCʹ্͕͍ͬͯΔ ˓CSFXͳͲͷύοέʔδϚωʔδϟʔͰ΋औಘՄೳ ˔QSPUPϑΝΠϧΛίϯύΠϧͯ͠ίʔυΛੜ੒

Slide 15

Slide 15 text

© Chatwork QSPUPDίϚϯυαϯϓϧ $ protoc \ --proto_path=./proto \ --php_out=./dest \ --grpc_out=./dest \ --plugin=protoc-gen-grpc=./grpc/bins/opt/grpc_php_plugin \ ./proto/sample.proto

Slide 16

Slide 16 text

© Chatwork ੜ੒ϑΝΠϧ $ tree dest ├── GPBMetadata │ └── Sample.php ├── GreetingServiceClient.php ├── Person │ ├── PhoneNumber.php │ └── PhoneType.php ├── Person.php proto └── sample.proto syntax = “proto3"; message Person { string name = 1; string email = 2; enum PhoneType { MOBILE = 0; HOME = 1; } message PhoneNumber { string number = 1; PhoneType type = 2; } } service GreetingService { rpc greet (Person) returns (stream PersonResponse); }

Slide 17

Slide 17 text

© Chatwork ੜ੒ϑΝΠϧ name; } public function setName($var) { /*...*/ } public function getEmail() { return $this->email; } public function setEmail($var) { /*...*/ } }

Slide 18

Slide 18 text

© Chatwork ੜ੒ϑΝΠϧ _serverStreamRequest('/GreetingService/greet', $argument, ['\PersonResponse', 'decode'], $metadata, $options); } }

Slide 19

Slide 19 text

© Chatwork H31$1SPUPDPM#VGGFST ˔1)1Ҏ্ɹͦ΋ͦ΋1)1͸೥಺Ͱ&0-Ͱ͢Αʂ ˔$ Ҏ্ʹରԠͨ͠HDD ˔$FOU04ͩͱHDDͷόʔδϣϯ͕௿͗ͯ͢Ϗϧυ͕େม ˓ηοτΞοϓ͕஍ຯʹΊΜͲ͍͘͞ ˓ίϯύΠϧ͢ΔEPDLFSΠϝʔδΛ࡞ͬͯ͠·͏ͱָ ˔1)1͕ରԠ͍ͯ͠Δͷ͸QSPUP͔ΒͳͷͰɺQSPUPΛ࢖ͬͯ ͍Δ৔߹͸ʹ্͛Δඞཁ͕͋Δ

Slide 20

Slide 20 text

© Chatwork %PDLFSGJMFྫ FROM amazonlinux:2018.03 RUN yum update -y && \ yum install -y \ # grpc dependencies git gcc gcc48-c++ autoconf automake libtool unzip which wget # download protoc RUN mkdir /opt/protoc && \ wget -O /opt/protoc/protoc.zip https://github.com/protocolbuffers/protobuf/ releases/download/v3.5.1/protoc-3.5.1-linux-x86_64.zip \ && unzip -d /opt/protoc /opt/protoc/protoc.zip \ && rm /opt/protoc/protoc.zip # build grpc_php_plugin RUN git clone https://github.com/grpc/grpc /opt/grpc \ && cd /opt/grpc \ && git submodule update --init \ && cd /opt/grpc/third_party/protobuf \ && sh autogen.sh \ && cd /opt/grpc \ && make grpc_php_plugin

Slide 21

Slide 21 text

© Chatwork ࢒೦ͳ͓஌Βͤ ˔1)1ͰͷH31$αʔόʔ͸Ͱ͖ͳ͍ ˔H31$αʔόʔΛ࡞Δͱ͖͸ผݴޠΛ࢖͏ ˔$IBUXPSLͰ͸4DBMBΛ࠾༻͍ͯ͠·͢ ˓4DBMBΛ࠾༻ͨ͠ܦҢ͸ͪ͜Β IUUQDOPUFDIBUXPSLDPNQPTUEFWDBNQ

Slide 22

Slide 22 text

© Chatwork 1)1ͰͷH31$αʔόʔ͸ͳͥ೉͍͔͠ ˔NPE@QIQ΍QIQGQNͳͲΛհ͢ͱHSQD௨৴ͷ؊Ͱ͋ΔίωΫγϣ ϯͷ4USFBN௨৴͕࢖͑ͳ͘ͳΔ ˔"QBDIFOHJOYΛ࢖Θͳ͍ͱ1)1୯ମͰ͸)551ͷϋϯυϦϯά͕Ͱ ͖ͳ͍ ˓1)1͸୯ମͰEBFNPOJ[FͰ͖ͳ͍ ˓NBY@FYFDVUJPO@UJNFͱ͔͋Δ͠ ˓.JDSPTFSWJDFTͰ1)1͕͋·Γ࢖ΘΕͳ͍͜ͱͱࣅͯΔ ˙1)1Λ࢖͓͏ͱ͢Δͱϑϩϯτ8FCαʔό͕ඞਢʹͳΔ

Slide 23

Slide 23 text

© Chatwork 1)1ͰͷH31$αʔόʔ͸ͳͥ೉͍͔͠ ˔3PBE3VOOFSͱ͍͏1)1"QQMJDBUJPO4FSWFS (P੡ Λ࢖ ͏ͱ(P͕)UUQΛϋϯυϦϯά͢ΔͷͰ࢖͑ΔΒ͍͠ ˓IUUQTHJUIVCDPNTQJSBMSPBESVOOFS ˓΋͸΍ී௨ͷ1)1Ͱ͸ͳ͍͕ʜʜ

Slide 24

Slide 24 text

© Chatwork PHPͰͷgRPCΫϥΠΞϯτ࣮૷

Slide 25

Slide 25 text

© Chatwork PHPͰͷgRPCΫϥΠΞϯτ࣮૷ ˔ඞཁʹͳΔίϯϙʔωϯτ ˓H31$௨৴ ˓3FRVFTU3FTQPOTF4FSJBMJ[FS

Slide 26

Slide 26 text

© Chatwork H31$௨৴ ˔H31$௨৴ॲཧͷ࣮ମ ˓H31$FYUFOTJPO$ Ͱ࡞ΒΕ͓ͯΓ1)1֦ுΛΠϯε τʔϧ͢Δ ˓1&$-Ͱ഑෍͞Ε͍ͯΔ HSQD  ˔HSQDϥΠϒϥϦ ˓HSQD֦ுΛૢ࡞͢ΔͨΊͷϥΠϒϥϦ ˓$PNQPTFSͰ഑෍͞Ε͍ͯΔ HSQDHSQD

Slide 27

Slide 27 text

© Chatwork 3FRVFTU3FTQPOTF4FSJBMJ[FS ˔1SPUPDPM#VGGFSTͷ1)1֦ு QSPUPCVG ͕ͦΕ ˓1&$- QSPUPCVG ΋͘͠͸ ˓$PNQPTFS HPPHMFQSPUPCVG Ͱఏڙ͞Ε͍ͯΔ ˓֦ுͷํ͕$PNQPTFSΑΓύϑΥʔϚϯε͕༏Ε͍ͯΔ ˙֦ுΛ࢖͏Α͏ʹ͢Δͱ1IQ4UPSNͰίʔυิ׬͕ ޮ͔ͳ͍ͷͰSFRVJSFEFWͰೖΕ͍ͯΔ

Slide 28

Slide 28 text

© Chatwork QSPUPCVG ˔֦ுͱ$PNQPTFSͷ଎౓ൺֱ 1)1  ˓͋ΔσʔληοτΛQSPUPCVGͷΫϥεʹηοτͯ͠γ ϦΞϥΠζ͢Δ 1&$- $PNQPTFS ॴཁ࣌ؒ NT NT ˔ഒҎ্଎͍

Slide 29

Slide 29 text

© Chatwork ϦϙδτϦઃܭ ˔QSPUP͔Βੜ੒͞ΕΔίʔυΛઐ༻ͷϦϙδτϦͰ؅ཧ ˔$PNQPTFSܦ༝Ͱࢀর ˓QSPUP͔Βͷੜ੒෺͸ΞϓϦέʔγϣϯͷຊ࣭ͱ͸ҟͳ Δ΋ͷ ˓ґଘΛڧͨ͘͘͠ͳ͍ͷͰผϦϙδτϦʹ੾Γ཭͍ͨ͠

Slide 30

Slide 30 text

© Chatwork ϋϚΓͲ͜Ζ ˔1&$-ͰͷΠϯετʔϧ ˔ґଘίϯϙʔωϯτͷόʔδϣϯ

Slide 31

Slide 31 text

© Chatwork 1&$-ͰͷΠϯετʔϧ ˔1&$-ͰͷΠϯετʔϧ࣌ʹ͸ίϯύΠϧ͕࣮ߦ͞ΕΔ ˓$FOU04ͷΑ͏ͳHDDͷόʔδϣϯ͕ݹ͍؀ڥͩͱί ϯύΠϧ͕Ͱ͖ͳ͍ ˓EFWUPPMTFUͱ͔࢖ͬͯແཧ΍ΓೖΕΔ͔͠ͳ͍

Slide 32

Slide 32 text

© Chatwork ґଘίϯϙʔωϯτͷόʔδϣϯ ˔HSQD QSPUPCVG QSPUPDͷόʔδϣϯޓ׵ੑΛอͭඞཁ͕͋Δ ˓ͦΕͧΕͷೖखܦ࿏͕ҧ͏ ˓1&$- $PNQPTFS (JU)VCSFMFBTFQBHF ˓1)1࣮ߦ࣌ͰͷΤϥʔ·Ͱ໰୊ʹؾͮ͘λΠϛϯά͕ແ͍ ˙Τϥʔʹͳͬͯ΋ϥΠϒϥϦͷத·ͰίʔυΛݟʹߦ ͔ͳ͍ͱԿ͕͓͔͍͔͠෼͔Βͳ͍

Slide 33

Slide 33 text

© Chatwork ґଘίϯϙʔωϯτͷόʔδϣϯ ˔ޓ׵ੑ͕෼͔ΓͮΒ͍ ˓ެࣜυΩϡϝϯτ͕ߋ৽͞Εͳ͍ ˔࠷৽൛ ࣌఺ ͸ ˓HSQD ˓QSPUPCVG ˔3FMFBTFT/PUFTΛݟͯؤுΔʜ grpc.io github

Slide 34

Slide 34 text

© Chatwork 1)1H31$DMJFOU·ͱΊ ˔H31$ͷ$ ֦ு$PNQPTFSίʔυ͕ඞཁ ˔QSPUPCVGͷ1&$-൛cc$PNQPTFS൛͕ඞཁ ˓ݹ͍αʔόʔͩͱେม ˔ίϯϙʔωϯτͷόʔδϣϯޓ׵ੑ͕ແ͍৔߹ͷ࣮ߦ࣌Τ ϥʔ͸σόοά͕େม͔ͩΒؾΛ͚ͭΔ

Slide 35

Slide 35 text

© Chatwork ChatworkͰͷgRPCϢʔεέʔε

Slide 36

Slide 36 text

© Chatwork Ϣʔεέʔε ˔$IBUXPSLͷςΩετͷ࢓༷͸ύʔε͕πϥ͍ [info][title]PHPCon2018:)[/title]PHPͰgRPCಈ͔͍ͨ͠Ͱ͢Ͷ(bow)[/info] ˔ΫϥΠΞϯταΠυͰύʔε͍͍ͯ͠ײ͡ͷݟͨ໨ʹ͢Δ ˓πϥ͍

Slide 37

Slide 37 text

© Chatwork Ϣʔεέʔε [info][title]PHPCon2018:)[/title]PHPͰgRPCಈ͔͍ͨ͠Ͱ͢Ͷ (bow)[/info] {“tokens":[ {“info”:{"title":[{"text":"PHPCon2018"},{"emoticonSmile":{}}], “message":[ {“text":"PHPͰgRPCಈ͔͍ͨ͠Ͱ͢Ͷ"},{"emoticonBow":{}} ]}} ]} ASTԽ ˔ৄࡉ͸ϒϩά͕ޙ೔ॻ͔Ε·͢ʂ ˓IUUQTDSFBUPSTOPUFDIBUXPSLDPN

Slide 38

Slide 38 text

© Chatwork Ϣʔεέʔε ˔νϟοτ ˔෦԰֓ཁ ˔λεΫ ộ

Slide 39

Slide 39 text

© Chatwork Ϣʔεέʔε ˔ద༻ൣғ͕޿͍ ˔$IBUXPSLͷϦΫΤετྔͰ͸ͪΐͬͱͨ͠ϨεϙϯελΠ Ϝͷ૿Ճ΋க໋త ˓͔ͳΓͷߴεϧʔϓοτ͕ٻΊΒΕΔ

Slide 40

Slide 40 text

© Chatwork Ϣʔεέʔε

Slide 41

Slide 41 text

© Chatwork ύϑΥʔϚϯε ˔H31$ͷॲཧΛೖΕΔલޙͰͷฏۉϨεϙϯελΠϜͷൺֱ ˓"84ಉҰ71$಺ͷ&$ؒ௨৴ LTܦ༝  ˙ҎԼ͸ࢀߟ஋ͱͯ͠ϩʔΧϧ؀ڥͷൺֱ ಋೖલ H31$͋Γ ฏۉ NT   ˔ϩʔΧϧͰ͸େମNTఔ౓ͷ૿Ճ ˓+40/4USJOHΛฦ͚ͩ͢ͷ"1*͕OHJOYܦ༝ͰNT

Slide 42

Slide 42 text

© Chatwork ύϑΥʔϚϯε ϦϦʔε͕ؒʹ߹Θͣ ϓϩμΫγϣϯ؀ڥͰͷݕূ݁Ռ͕ग़ͤ·ͤΜͰͨ͠ ϦϦʔεޙʹϓϩμΫγϣϯ؀ڥͰൺֱͯ͠ߋ৽͢Δ༧ఆͰ͢

Slide 43

Slide 43 text

© Chatwork ·ͱΊ ˔1)1ͰͷΫϥΠΞϯτ࣮૷͸ϋϚΓͲ͜Ζ΋গͳ͘؆୯ ˓ࣗಈੜ੒͞Εͨίʔυ͕࢖͑ΔͷͰैདྷΑΓ΋ָ͔΋ ˔ߴεϧʔϓοτͷ؀ڥͰ΋࢖͑ͦ͏ ˓αʔϏε͕(SPXUIͨ͠ͱ͖ͷࢪࡦͷͭͱͯ͠༗ྗ ˓ଞݴޠͰH31$αʔόʔΛ࣮૷Ͱ͖Δਓ͕͍Ε͹ɾɾɾ ˔1)1ͰH31$αʔόʔΛ࣮ݱ͢Δະདྷ͕དྷΔͱ͍͍Ͱ͢Ͷ

Slide 44

Slide 44 text

© Chatwork 8F$IBUXPSLBSFIJSJOH IUUQTDPSQDIBUXPSLDPNKBSFDSVJUFOHJOFFS

Slide 45

Slide 45 text

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