Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20210730_出張!Railsウォッチ in 銀座Rails#35

20210730_出張!Railsウォッチ in 銀座Rails#35

Masato Mori

July 30, 2021
Tweet

More Decks by Masato Mori

Other Decks in Programming

Transcript

  1. About Me
 • 森 雅智: @morimorihoge
 • BPS株式会社でRailsの受託開発チームをやってたり、週1大学非常勤で Web開発を教えてたりします
 •

    Ruby/Rails歴は11年くらい。Web開発は17年くらい
 • 銀座Ralis #10でActiveRecordでVIEWを使おうという話をしました
 • 銀座Rails #27でアプリケーションコンフィグの話をしました
 About BPS & TechRacho
 • Web受託開発や電子書籍製品開発をやっている会社です
 • TechRachoという自社技術Blogを運営しています
 ◦ 5年ほど前から平日毎日更新してます
 ◦ https://techracho.bpsinc.jp/ • お仕事相談、転職相談、TechRachoへのご意見など気軽にどうぞ
 ◦ https://www.bpsinc.jp/ 2

  2. これまでの出張Railsウォッチのピックアップテーマ
 • 銀座Rails#12: 複数DB対応
 • 銀座Rails#13: ActionText、Trix
 • 銀座Rails#14: ActionMailbox


    • 銀座Rails#15: production、development、staging環境について
 • 銀座Rails#16: 機能開発の設計レビューについて
 • 銀座Rails#17: リソース管理スコープについて
 • 銀座Rails#19: 開発チームの冗長化について
 • 銀座Rails#20: Excelと仲良くしよう
 • 銀座Rails#21: 標準仕様を読むためのABNF
 • 銀座Rails#22: CLIプログラムにOptionParserを使う
 • 銀座Rails#23: ActiveRecordのSELECTベンチマーク
 • 銀座Rails#24: 令和Devise事情
 • 銀座Rails#28: 2020年の銀座Railsを振り返る
 • 銀座Rails#29: Serverless Railsを試す
 • 銀座Rails#30: Railsインフラ環境Overview
 • 銀座Rails#31: Railsプロジェクトあるある
 • 銀座Rails#32: MimeMagic騒動を振り返る
 • 銀座Rails#33: Rails 7.0で入る予定の新機能(暫定版)
 • 銀座Rails#34: もっとDBコメントを書こう
 4
 各回資料に興味がある方はこちらからどうぞ:https://speakerdeck.com/morimorihoge 

  3. PubSubとは?
 • 基本の役割
 ◦ Publisher: Event配信する人
 ◦ Subscriber: Eventを受信したい人 


    ◦ Event: やり取りしたい情報。メッセージと呼ぶこともある 
 • PublisherはいつでもEventを配信できる
 ◦ 購読しているSubscriberはいないかもしれないし、複数いるかもしれないが気にしない 
 • SubscriberはいつでもEventを受信開始・解除できる
 ◦ 流れてくるEventはないかもしれないが、気にしない 
 7
 Redis、AWS SNS、Google Cloud Pub/Subなど色々な所で使われている設計モデル 

  4. ここから本編
 Railsにはあちこちにinstrumentが仕込んである
 • [Edge Guide] https://edgeguides.rubyonrails.org/active_support_instrumentation.html#rails-framework-hooks 
 • [日本語Guide] https://railsguides.jp/active_support_instrumentation.html

    
 13
 眺めてみるとRailsのログに出ているような情報が取れることがわかる
 ※実際にはAS::LogSubscriberを使ってEventをログ出力用に整形している。詳しくは Railsのソースコードを読もう

  5. 自分でinstrumentを定義して使う
 • 今すぐは使わないけど、後々このイベントは取得できるようにしたくなりそう
 • デバッグの時だけ簡単に情報を拾えるようにしたいけど、普段はOFFにしておきたい
 • Loggerに出すと他の大量のログと混じってしまうので、個別にイベントとして取得したい
 • Datadog他のAPMツールで扱うアプリケーションイベントを定義・出力したい
 17


    それAS::Instrumentationでできるよ(ドヤァ
 ロジックコードの中にprintデバッグコードを入れると入れたり消したりが大変だが、 AS::Instrumentationならsubscriberを付け外しするだけで良い
 ※環境変数によってON/OFFするようなコードもsubscribeするところだけでOK