Slide 1

Slide 1 text

©2019 Wantedly, Inc. Ruby gRPC Λ࢖ͬͯ ʮͪΌΜͱʯαʔϏεΛ࡞Δ Scramble Tech ৽ଔLT Dec 18, 2019 - Teppei Shintani

Slide 2

Slide 2 text

©2019 Wantedly, Inc. About me Teppei Shintani @euglena1215 • ’19 Wantedly new grads • Server side engineer • Wantedly Visit ืूػೳͷϚΠΫϩαʔϏεԽ • Ruby ❤ • ϚΠΫϩαʔϏεԽ΍͍͖ͬͯ

Slide 3

Slide 3 text

©2019 Wantedly, Inc. gRPCͱ͸ʁ ͱ͸ʁ

Slide 4

Slide 4 text

©2019 Wantedly, Inc. Google ͕࡞ͬͨ ݴޠඇґଘͷ௨৴ϓϩτίϧ gRPCͱ͸ʁ

Slide 5

Slide 5 text

©2019 Wantedly, Inc.

Slide 6

Slide 6 text

©2019 Wantedly, Inc. gRPC library ͸ Google ͕ ϝΠϯͰ։ൃΛߦ͍ͬͯΔ

Slide 7

Slide 7 text

©2019 Wantedly, Inc. ֤ݴޠͷ੒ख़౓͸ GoogleͷϞνϕʔγϣϯ࣍ୈ

Slide 8

Slide 8 text

©2019 Wantedly, Inc. Ruby gRPC ͷ੒ख़౓্͕͕Βͳ͍ Ruby gRPC ͷपลϥΠϒϥϦ͕ू·Βͳ͍

Slide 9

Slide 9 text

©2019 Wantedly, Inc. ݫ͍͠؀ڥͷ Ruby gRPC Λ࢖ͬͯ αʔϏεΛ࡞͍ͬͯͨ͘Ίʹ

Slide 10

Slide 10 text

©2019 Wantedly, Inc. •൚༻తͳ grpc interceptor •։ൃੜ࢈ੑ্͛ΔϥΠϒϥϦ •Ruby gRPC best practice ͷ໛ࡧ ΍͍ͬͯΔ͜ͱ

Slide 11

Slide 11 text

©2019 Wantedly, Inc. grpc interceptorͱ͸ʁ ൚༻తͳgrpc interceptor grpc interceptor ͱ͸௨৴(rpcݺͼ ग़͠)ͷલޙͰಛఆͷॲཧΛ૊ΈࠐΊ Δػߏɻ express, rack middleware ͱ͍ͩ ͍ͨಉ͡ͱ͍͑͹఻ΘΔਓ͸఻ΘΔ ͔΋

Slide 12

Slide 12 text

©2019 Wantedly, Inc. ࡞ͬͨ grpc interceptor ൚༻తͳgrpc interceptor • ΤϥʔΛ؂ࢹαʔϏεʹૹͬͯ͘ΕΔ͘Μ • Ruby/Rails ґଘͷΤϥʔΛ gRPC Τϥʔʹม׵͢Δ͘Μ • activerecord ͷ connection Λྑ͍ײ͡ʹ࢖͍ճ͘͢Μ •ΞΫηεϩάΛͱͬͯ೚ҙͷprovider΁ૹ৴͢Δ͘Μ by @south37 • newrelic ʹ metrics Λૹ৴ͯ͘͠ΕΔ͘Μ by @south37

Slide 13

Slide 13 text

©2019 Wantedly, Inc. Protocol Buffersͷੑ࣭ ։ൃੜ࢈ੑ্͛ΔϥΠϒϥϦ • field ͸શͯ optional • proto2 Ͱ͸ required field ͕ଘࡏ͕ͨ͠ɺproto3Ͱ͸શͯ optional ʹͳͬͨ • required ͳ field Λഇࢭͨ͘͠ͳͬͨͱ͖ʹޙํޓ׵Λҡ࣋͢Δͷ͕೉͍͠ ΞϓϦέʔγϣϯଆͷϩδοΫͰ null ͔Ͳ͏͔ΛνΣοΫ͢Δඞཁ͕͋Δ ΊͪΌͪ͘Ό໘౗

Slide 14

Slide 14 text

©2019 Wantedly, Inc. grpc_required_annotator ։ൃੜ࢈ੑ্͛ΔϥΠϒϥϦ https://github.com/euglena1215/grpc_required_annotator

Slide 15

Slide 15 text

©2019 Wantedly, Inc. Ruby gRPC best practice ͷ໛ࡧ • Rails ͷ஌ݟΛ Ruby gRPC ʹͲ͏ྲྀ༻͢Δ͔ • Rails controller ʹґଘ͍ͯ͠Δ gem ͸Ұ௨Γ࢖͑ͳ͍ • ͲΜͳઃܭʹ͢Δͱ͍͍ͷ͔ʁ • Rails Έ͍ͨʹ DB table ͱ API interface Λີ݁߹ͤͨ͘͞ͳ͍ • MVVM? Ͳ͜·Ͱ΍Δʁ

Slide 16

Slide 16 text

©2019 Wantedly, Inc. Ruby gRPC best practice ͷ໛ࡧ • Rails ͷ஌ݟΛ Ruby gRPC ʹͲ͏ྲྀ༻͢Δ͔ • Rails controller ʹґଘ͍ͯ͠Δ gem ͸Ұ௨Γ࢖͑ͳ͍ • ͲΜͳઃܭʹ͢Δͱ͍͍ͷ͔ʁ • Rails Έ͍ͨʹ DB table ͱ API interface Λີ݁߹ͤͨ͘͞ͳ͍ • MVVM? Ͳ͜·Ͱ΍Δʁ ͜͜ͷ݁࿦͸·ͩग़͍ͯͳ͍ɺɺɺ

Slide 17

Slide 17 text

©2019 Wantedly, Inc. Ruby gRPC ͕ී௨ʹ࢖͑Δ ঢ়ଶʹͳΔ·Ͱ΍͍͖ͬͯ