Remix × Cloudflare Pages × Sentry 奮闘記 / remix-pages-sentry
by
Yukiya Nakagawa
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Remix × Cloudflare Pages × Sentry 奮闘記 2024.9.25 Remix Tokyo Meetup / Nkzn
Slide 2
Slide 2 text
1. Cloudflare PagesにSentry入れたかった 2. Cloudflare的なアプローチ 3. 暫定の解決策 4. 本筋の解決策が生まれたかも?
Slide 3
Slide 3 text
Who? 3 ● 中川幸哉 a.k.a Nkzn(なかざん) ● ‘86世代🐰の37歳 新潟生まれ新潟育ち(大学だけ会津) ● Android→Cordova→React Native→Next.js→Rails→Remix ● 技術書典Webのフロントエンド&アプリ担当 ○ 11月2日から技術書典17やるからよろしくね! ○ 弊社も開発合宿まとめ本を出します
Slide 4
Slide 4 text
Remix × Cloudflare Pagesでサイト作った
Slide 5
Slide 5 text
キャラつくAI https://charatsukuai.limo.media/
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
7 https://speakerdeck.com/nkzn/cloudflare-developer-platform-for-ai-avatar-service
Slide 8
Slide 8 text
そうだ、Sentryを入れよう
Slide 9
Slide 9 text
@sentry/remix がCloudflareをサポートしてない 9 https://docs.sentry.io/platforms/javascript/guides/remix/
Slide 10
Slide 10 text
@sentry/wizardは一旦上手くいくけど…… 10 ←localhostでは元気に動いてる (Node.jsにMiniflareを ちょっと被せただけだからね) デプロイで失敗する→
Slide 11
Slide 11 text
Cloudflare × Sentryなアプローチを探す
Slide 12
Slide 12 text
公式Sentry Integration(Workers用) ログ監視用Worker(tail worker)を別途用意して、ログをSentryに送ってくれるやつ 12 Workers Pages そんなものはPagesにはない
Slide 13
Slide 13 text
生のPages Functions用ライブラリはある トップレベルまで届いた例外をキャッチしてSentryに送るやーつ 13 https://developers.cloudflare.com/pages/functions/plugins/sentry/ functions/_middleware.ts(全てのreq,resの前後の処理を制御するやつ) Remixレイヤーで全部キャッチしちゃうからか _middlewareまで例外が届かない……!
Slide 14
Slide 14 text
● 上手くいったとしてもさほど嬉しくない ● トップレベルまで届いちゃった例外のロギングなら確かに前述のアプローチでもいい ● でもサーバーサイドでもSentry.captureMessageとか使いたいじゃん……! しっくりこない 14
Slide 15
Slide 15 text
命令としてSentryを使えるアプローチを探す
Slide 16
Slide 16 text
Cloudflare Workersで使えるSentryクライアント ● @cloudflare/pages-plugin-sentryのドキュメント内にrobertcepa/toucan-jsへの言及があった > Toucan is a Sentry client for Cloudflare Workers written in TypeScript. ● これ欲しかったやつでは……!? ● raven(カラス)との対比でtoucan(オオハシ)になっているらしい 16
Slide 17
Slide 17 text
やったー動いたー 動く……動くぞ……! 17
Slide 18
Slide 18 text
getLoadContextでToucanを初期化して、contextに登録しておけば、loaderやactionで使える RemixのコンテキストにToucan製sentryを追加する 18 load-context.ts いったんこれでしのぐか……? 参考: https://remix.run/docs/en/2.12.1/guides/vite#augmenting-load-context
Slide 19
Slide 19 text
俺たちの戦いはこれからだ!(6月のワイ)
Slide 20
Slide 20 text
9月のワイ 実はnode_compat_v2で @sentry/remixが動くようになった みたいな話はないかなー (なかったです)
Slide 21
Slide 21 text
あれ、動きあるっぽくない? 21 https://github.com/getsentry/sentry-javascript/issues/12620
Slide 22
Slide 22 text
おやおや??? https://www.npmjs.com/package/@sentry/cloudflare 22
Slide 23
Slide 23 text
いっちょやってみっか functions/_middleware.ts app/routes/hoge.tsx 23 Context等を経由せずに いきなりcaptureXxxを呼んでいいらしい
Slide 24
Slide 24 text
動いたーーーーーーーーーー!!!!!!!!!!
Slide 25
Slide 25 text
もちろんhandleErrorにも使っていいよね 25 app/routes/hoge.tsx app/entry.server.tsx
Slide 26
Slide 26 text
やったぜ npx @sentry/wizard@latest -i sourcemaps で事前にソースマップをアップロードする運用にしておくと、なおよさそう
Slide 27
Slide 27 text
@sentry/cloudflareの今後に期待 ● まだアルファ版 ● いつか @sentry/remix/cloudflare みたいなのも出てくるのかなあ ● 脱toucan-jsできそうなのはいい話なので、見守っていきたい 27
Slide 28
Slide 28 text
ご清聴ありがとうございました! We are hiring!