TokyuRuby会議13 で、gcpc という Google Cloud Pub/Sub を便利に利用する為の gem について話しました! #tqrk13 #プレモルセミナー https://github.com/south37/gcpc https://github.com/south37/gcpc-interceptors
©2019 Wantedly, Inc.HDQD(PPHMF$MPVE1VC4VC$MJFOUGPS3VCZ29.Jun.2019 - Nao Minami (@south37) Wantedly, Inc.TokyuRubyձٞ13
View Slide
©2018 Wantedly, Inc./BP.JOBNJ*OGSBTUSVDUVSF&OHJOFFS 8BOUFEMZ *OD(JU)VCTPVUI5XJUUFSTPVUI 43&ͱͯ͠ͷׂʢαʔϏεͷ৴པੑʹʣ ։ൃج൫ͱͯ͠ͷׂʢΤϯδχΞͷੜ࢈ੑʹʣ
©2018 Wantedly, Inc.ಥવͰ͕͢ɺ(PPHMF$MPVE1VC4VCʹ͍ͭͯܰ͘հ͍ͤͯͩ͘͞͞ʂ
©2018 Wantedly, Inc.(PPHMF$MPVE1VC4VCͱ($1͕ఏڙ͢Δ.BOBHFE1VC4VC.FTTBHF2VFVF4FSWJDFw UPQJDʹNFTTBHFΛQVCMJTIw UPQJD͔ΒෳͷTVCTDSJQUJPOʹNFTTBHFΛ৴w TVCTDSJQUJPO͝ͱʹNFTTBHF͕ॲཧ͞ΕΔIUUQTDMPVEHPPHMFDPNQVCTVCEPDTPWFSWJFXΑΓҾ༻
©2018 Wantedly, Inc.ͳͥ(PPHMF$MPVE1VC4VCΛར༻͢Δͷ͔.FTTBHF2VFVFͱͯ͠ͷϢʔεέʔεརw DPOTVNFSͷෛՙͷόϥϯεௐʢ4QJLFΛӅ͢ $POTVNFSͷ4DBMFPVUʣw ඇಉظϫʔΫϩʔυͷ࣮ʢ1VCMJTIFS$POTVNFSͷॲཧΛͨͳ͍ʣw ৴པੑͷ্ʢ$POTVNFSʹো͕ى͖ͯ1VCMJTIFSॲཧΛܧଓՄೳʣIUUQTBOXBBSMBCTXPSEQSFTTDPNNFTTBHFRVFVFQBSUKNTEPNBJOTΑΓҾ༻
©2018 Wantedly, Inc.ͳͥ(PPHMF$MPVE1VC4VCΛར༻͢Δͷ͔1VC4VCͱͯ͠ͷϢʔεέʔεརw ಉ͡NFTTBHFΛɺ4VCTDSJCFS͝ͱʹࣗͷϖʔεͰॲཧͰ͖Δw 1VCMJTIFSʹखΛೖΕͣʹɺ4VCTDSJCFSΛ૿͢͜ͱ͕Ͱ͖Δʢؔ৺ࣄΛʣw Ϣʔεέʔεw ࢄΩϟογϡͷߋ৽w Πϕϯτ௨ͷ৴w ෳͷγεςϜͷMPHHJOHw FUDIUUQTNTRVBSFDPNBVXIZNFTTBHJOHRVFVFTNJHIUOPUTVDLΑΓҾ༻
©2018 Wantedly, Inc.(PPHMF$MPVE1VC4VCͱͯศརʂ
©2018 Wantedly, Inc.Ͱɺ3VCZ͔Βར༻͍ͨ͠߹ʁ
©2018 Wantedly, Inc.
©2018 Wantedly, Inc.(PPHMF͕HPPHMFDMPVEQVCTVCHFNΛఏڙͯ͘͠Ε͍ͯΔʂ
©2018 Wantedly, Inc.͔͠͠ɺΑΓศརʹ͏ͱ͍͏؍Ͱ͍͔ͭ͘Γͳ͍ػೳ͕ɻɻɻ
©2018 Wantedly, Inc.HPPHMFDMPVEQVCTVCHFNʹΓͳ͍෦1MVHJOػߏ͕ͳ͍w 1VCMJTIFS4VCTDSJCFSʹɺNFTTBHFͷॏෳഉআͳͲʮڞ௨ͰඞཁʹͳΔػೳʯ͕සग़͢Δw ʮ൚༻తͳػೳ1MVHJOͰఏڙ͞ΕΔʯͱ͍͏ମݧ͕ཉ͍͠1SPDFTTͷϥΠϑαΠΫϧࣗͰཧ͢Δඞཁ͋Γw ʮ4*(5&3.Λड͚औͬͨΒHSBDFGVMTIVUEPXOʯͳͲࣗͰ࣮͢Δඞཁ͕͋Δ
©2018 Wantedly, Inc.ͦ͜ͰɺHDQDʂʂʂ
©2018 Wantedly, Inc.HDQDͷఏڙ͢Δػೳ1MVHJOػߏΛαϙʔτw JOUFSDFQUPSͱ͍͏ܗͰ࣮ͨ͠QMVHJOΛར༻Մೳw සग़ͷJOUFSDFQUPSIUUQTHJUIVCDPNTPVUIHDQDJOUFSDFQUPSTͱ͍͏HFNͰެ։σϑΥϧτͰ4*(5&3.Ͱ(SBDFGVMTIVUEPXOw SVOϝιουʹ͢ΦϓγϣϯͰɺͲͷTJHOBMͰ(SBDFGVMTIVUEPXO͢Δ͔Λ੍ޚ͢Δ͜ͱՄೳ
©2018 Wantedly, Inc.HDQDͷ͍ํ1VCMJTIFSpublisher = Gcpc::Publisher.new(project_id: "”,topic: "”,credentials: “/path/to/credentials",)publisher.publish("")(DQD1VCMJTIFSͰQVCMJTIw DSFEFOUJBMΛͯ͠JOJUJBMJ[FɺQVCMJTINFUIPEͰQVCMJTI
©2018 Wantedly, Inc.HDQDͷ͍ํ1VCMJTIFSclass LogInterceptor < Gcpc::Publisher::BaseInterceptordef publish(data, attributes)MyLogger.info “publish data: \”#{data}\”"yield data, attributesendendpublisher = Gcpc::Publisher.new(…,interceptors: [LogInterceptor],)(DQD1VCMJTIFSJOUFSDFQUPSΛड͚औΕΔw JOUFSDFQUPSͰQVCMJTI࣌ͷػೳΛՃ
©2018 Wantedly, Inc.HDQDͷ͍ํ4VCTDSJCFSclass NopHandler < Gcpc::Subscriber::BaseHandlerdef handle(data, attributes, message)# Do nothing. Consume only.endendsubscriber = Gcpc::Subscriber.new(…,)subscriber.handle(NopHandler)subscriber.run # Start subscribing(DQD4VCTDSJCFSͰTVCTDSJCFw NFTTBHFΛॲཧ͢ΔIBOEMFSΛొ
©2018 Wantedly, Inc.HDQDͷ͍ํ4VCTDSJCFSclass LogInterceptor < Gcpc::Subscriber::BaseInterceptordef handle(data, attributes, message)MyLogger.info "subscribed a message: #{message}”yield data, attributes, messageendendsubscriber = Gcpc::Subscriber.new(…,interceptors: [LogInterceptor],)(DQD4VCTDSJCFSJOUFSDFQUPSΛड͚औΕΔw JOUFSDFQUPSͰTVCTDSJCF࣌ͷػೳΛՃ
©2018 Wantedly, Inc.ͥͻɺͬͯΈͯϑΟʔυόοΫΛΒ͑Δͱخ͍͠Ͱ͢ʂ
©2018 Wantedly, Inc.·ͱΊ(PPHMF$MPVE1VC4VCศརw .FTTBHF2VFVFͱͯ͠ඇಉظϫʔΫϩʔυΛ࣮ݱɺ৴པੑΛ্w 1VC4VCͱ֤ͯ͠ίϯϙʔωϯτͷؔ৺ࣄΛศརʹ(PPHMF$MPVE1VC4VCΛར༻͢ΔͨΊʹHDQDͱ͍͏HFNΛ࡞ͬͨw IUUQTHJUIVCDPNTPVUIHDQDw ެࣜHFNΛXSBQͯ͠1MVHJOػߏ(SBDFGVMTIVUEPXOΛՃw 1MVHJOͷDPMMFDUJPOΛIUUQTHJUIVCDPNTPVUIHDQDJOUFSDFQUPSTͱͯ͠ఏڙ
©2019 Wantedly, Inc.w )BM(BUFXPPEIUUQTVOTQMBTIDPNQIPUPT/[C-#TDUZ21IPUP$SFEJU