Slide 1

Slide 1 text

Rails News ~Rails 8.1の足音を聴く~ ~Structured Event Reporting解説~ ver. RailsTokyo #1 2025/10/16 森 雅智 / @morimorihoge 2025/10/16

Slide 2

Slide 2 text

● Web受託開発や自社サービス開発・運営をやっている会社です 
 ● TechRachoという自社技術Blogを運営しています 
 ○ 10年ほど前から平日毎日更新 してます
 ○ https://techracho.bpsinc.jp/ ● お仕事相談、転職相談、TechRachoへのご意見など気軽にどうぞ 
 ○ https://www.bpsinc.jp/ About Me ● 森 雅智: @morimorihoge 
 ● BPS株式会社でRailsの受託開発チームをやってたり、週1大学非常勤でWeb開発を教えてたり します
 ● Ruby/Rails歴は15年くらい。Web開発は20年くらい 
 ● 主にリモート開催時代に力尽きるまで銀座Railsを運営していました 🙏💦
 ● RailsTokyoではチームの力でやっていけるように強力していきます 💪
 About BPS & TechRacho

Slide 3

Slide 3 text

About TechRacho 毎日更新の技術ブログです。Railsネタ多めなのでぜひBookmark & 購読してください😎

Slide 4

Slide 4 text

Rails 8.1の足音を聴く

Slide 5

Slide 5 text

【NEW】2025/10/15: Rails 8.1.0.rc1 リリース!

Slide 6

Slide 6 text

Rails 8.1の新機能(抜粋) ● Active Job Continuations ○ 大きなJobをstepごとに記述しておく ことで、一時停止・再開可能 に ● Active Record Tenanting: Codeminerの詳しいやってみた記事 ○ テナントごとにDBを分ける 機能。現状SQLite3環境のみサポート ● Action Push Native ○ iOS/Android環境にAPNs / FCMを使ってpush通知する機能 ● Lexxy (early beta): ※ちょっとデモする ○ Action Textで現在のTrixを将来置き換えていく予定のよりリッチな WYSIWYGエディタ。PDFや動画 のプレビュー対応・”/” “@” によるイマドキのprompt / mention入力アシストなどもできるらしい ● Structured Event Reporting ○ -> 本日pickupして解説します ● その他 ○ Local CI、Markdown Rendering、Kamalの改善など 参考: https://rubyonrails.org/2025/9/4/rails-8-1-beta-1 https://blog.codeminer42.com/whats-new-in-rails-8-1-and-its-ecosystem など

Slide 7

Slide 7 text

Structured Event Reporting ● 構造化したアプリケーションイベントをPub / Subする仕組み ● Rails.eventを通じて利用することができる ○ Event Reporterと呼ばれている機能 ● ビジネスロジック的に取りたいイベントや、特定の問題調査などに利用できる ● アプリケーションイベントの例 ○ 商品を購入した ○ 商品を閲覧した ○ ユーザーがN日ぶりにログインした ○ 商品のお気に入り登録数が 100を超えた

Slide 8

Slide 8 text

🤔ActiveSupport::Notificationsと何が違うの? ● 以前からあるAS::NotificationsもPub/Subの仕組みを持っている ● 今までも以下のような形でアプリケーションイベントを取ることはできた

Slide 9

Slide 9 text

Structured Event Reporting版

Slide 10

Slide 10 text

Structured Event Reporting版 Subscriber登録型に contextやtagを柔軟に設定可能に

Slide 11

Slide 11 text

AS::Notificationsに対する機能上の優位点 ● pub / subするchannelの指定が柔軟 ○ AS::Notificationsは文字列でしか指定できない : “sql.active_record” “enqueue_at.active_job” ○ Structured Event Reportingはtags / contextの仕組みがあり、より柔軟な仕様が用意されている ● tags / contextの指定方法が柔軟 ○ AS::Notificationsは #instrument 呼び出し時にpayload内をすべて構築する必要がある ○ Structured Event Reporting は #set_context でglobalな値を設定できたり、 #tagged を使ってブ ロック内でのみ当該tagを効かせるということができる ■ before_actionやmiddlewareでcontextを設定できる

Slide 12

Slide 12 text

おそらくこんな使い方が想定されているのだろう(私見) ● AS::Notifications ○ これまでもログとして出力されているような Railsのシステム的な処理を扱う ○ アプリケーションエラーや Jobの投入・実行状況などを扱う ● Structured Event Reporting ○ よりビジネスレイヤや運用者視点でのイベントを扱う ○ アプリケーションログとは別の LogStreamとしてCloudWatch Logsに流し、JSONログとして解析す るとか ○ OpenTelemetryやDatadogにメトリクスを送信し、いい感じの Dashboardを作って閲覧するとか

Slide 13

Slide 13 text

その他気づいたこと ● Loggingの置き換えではないので、JSON Logを出力したいという場合はJSON Loggerなどと組み合わせる必要がある ○ JSONSubscriberなどを作ってsubscribeさせるイメージ ● Subscriberの呼び出しは同期処理なので、重い処理を書くとレスポンス速度に影 響が出る ○ AS::Notificationsと同じ。どうしても時間のかかる処理がしたければ Subscriber#emit 内で新しい スレッドを立てるなり、 Jobに詰むなりが必要 ● tags / contextは柔軟な実装ができるが、収集・分析する側の問題もあるのでデー タ設計は慎重に ○ contextのデータ構造を変えたら過去のデータと互換性がなくなってしまうので注意

Slide 14

Slide 14 text

まとめ ● Rails 8.1のリリースが秒読みに入ったので、まだの人はそろそろキャッチアップ を! ● 感想・リクエストなどあればXにて #railstokyo_meetup や @morimorihoge までお 声かけください