Article by: Gino Buenaflor, Steve Zegalia
(本記事は2025/6/16に公開された記事です)
「Null check operator used on a null value(null 値に対して null チェック演算子が使われました)」とだけ書かれたエラーレポートを手がかりに Flutter アプリをデバッグしたことがあるなら、すでにご存じのとおり、コンテキストがすべてです。ですが、ネイティブコードや Dart、非同期スタックトレース、プラットフォームチャネルを同時に扱っていると、そのコンテキストを得るのは簡単ではありません。
そこで Flutter SDK v9 では、何が起きているのかをより可視化し、改善に役立つインサイトを得られる機能を導入しました。
新機能は次のとおりです。
- モバイル向け Session Replay の一般提供(GA)対応:クラッシュ前にユーザーが何を見て(何を操作して)いたかを再現して確認できます。
- Feature Flags(フィーチャーフラグ)対応:バグ発生時にどのフラグが有効だったかを把握できます。
- Logs(現在 Open Beta)対応:ログをクラッシュやパフォーマンス問題と相関付けて確認できます。
- ネイティブ JS エラー対応(Flutter Web):JS 連携(interop)を利用する Flutter Web アプリの可視性が向上します。
- Release Health(Flutter Web)対応:リリースの普及状況、安定性、クラッシュフリーセッションについてより深いインサイトを得られます。
- Traces と Errors の連携強化:アプリケーションコード内の特定の span と問題を相関付けて分析できます。
Flutter のモバイル向け Session Replay
クラッシュレポートは役に立ちますが、何が起きたのか実際に見る必要がある場面もあります。どのボタンがタップされたのか?どの画面にいたのか?視覚的なコンテキストがなければ、推測に頼るしかありません。
モバイル向け Session Replay を使えば、クラッシュ前にユーザーが実際に見て・操作した内容を、動画のように再現して確認できます(デフォルトではプライバシー設定により、すべてのテキストと画像はマスキングされ、機微なユーザー情報が収集されないようになっています)。
たとえば、古い Android 端末でフォーム送信を試みたときだけ、Flutter アプリのカスタムキーボードがたまに消えてしまうとします。ログだけでは解析が難しいケースです。
いまなら、セッションを再生してください!ユーザーが入力欄をタップし、キーボードがちらつき、そのまま送信されなかった、という一連の流れが確認できます。
Logs(現在 Open Beta)
課題を理解するカギがログの中に隠れていることがあります。ですが多くのロギングシステムは、ログをクラッシュやパフォーマンス異常と相関付けてくれません。せいぜい「となり合っているだけ」の切り離されたデータです。
Sentry の Log Support(Open Beta) では、構造化ログを取り込み、エラーやトレースの文脈の中で表示できます。つまり、catchError() ハンドラが例外を「飲み込んだ」としても、ログが経緯を語ってくれるということです。
たとえば、ログイン時にタイムアウトエラーが報告されたとします。ログがあれば、
Auth API リクエスト開始 → リトライ #1 → リトライ #2 → 失敗
という一連の流れを追跡できます。すると根本原因は一目瞭然、UI バグではなく不安定なバックエンドです。

Feature Flags
モダンな Flutter アプリでは、UI のバリエーションをテストしたり、バックエンド依存の機能の段階的リリースを制御したりするために、フィーチャーフラグを使うことがよくあります。ですが、何かが壊れたとき、どのフラグが有効だったのかをどうやって把握しますか?
Sentry では、アクティブなフィーチャーフラグをイベントペイロードの一部として自動的に記録できます。つまり、問題が報告されたときに、その時点で有効だったフラグが問題詳細ページに即座に表示されるということです。推測も、調査も不要です。
たとえば、ユーザーが「設定メニューでテーマを切り替えるとアプリがクラッシュする」と報告してきたとします。Sentry のフィーチャーフラグコンテキストを確認すると、featureFlag.new_theme_engine: enabled と表示されているのが見えます。
これでクラッシュが新しいテーマシステムをテストしている実験グループ内だけに限定されていることがわかり、アプリ全体の問題ではないと判断できます。ログやロールアウト設定を掘り返すことなく、瞬時に影響範囲を特定できるのです。

Flutter Web 向けのネイティブ JS エラー対応
Flutter Web アプリを提供しているなら、すでに Dart と JavaScript の世界の狭間に生きているようなものです。これまでは、JavaScript(特にサードパーティスクリプト)で発生したキャッチされない例外は、Flutter Web ではしばしば見逃されていました。
Sentry は今回、Dart エラーと並行して JS エラーも自動的に捕捉できるようになりました。追加設定は不要です。これにより、Sentry の課題一覧には、Dart VM の視点だけではなく、実際のユーザー体験が反映されるようになります。もしサードパーティの分析スクリプトがチェックアウトページでクラッシュしても、すぐに把握できるようになります。
Flutter Web 向け Release Health
「これは単発のクラッシュなのか?それとも 20% のユーザーに影響しているのか?」「最新デプロイでクラッシュ率は下がったのか?」
Flutter Web でリリースを行うとき、こうした問いに答えられないことはありませんか?
今後は新しいリリースを配信するたびに、Sentry が自動的にクラッシュフリーセッション、導入率、ユーザーリテンションを追跡します。これはモバイルと同様です。これにより、安心してリリースできる(もしくは、問題が広がる前にすぐにロールバックできる)可視性を得られます。

トレースとエラーの連携強化
従来の Sentry Flutter SDK では、エラーとパフォーマンストレースが別々に報告されることが多く、アプリケーション実行内の特定の span と課題を相関付けるのが難しい状況でした。たとえば、UI エラーが、関連するページロードやユーザー操作のトレースから切り離された単独の事象として表示されることがありました。
v9 では、エラーを対応するトレース/span に自動的にリンクするよう SDK を強化しました。これにより、エラー発生時に関連するパフォーマンストレースの文脈の中で確認でき、アプリ挙動への影響を包括的に把握できます。この改善により、アプリの実行フロー内でエラーを発生源まで遡って特定でき、デバッグが容易になります。
この強化は、「トレース内でエラーが span にリンクされない」という既知の問題に対処するもので、Flutter アプリの可観測性とデバッグ容易性を向上させます。
Flutter SDK v9 をはじめよう
Sentry Flutter SDK v9 はすでにご利用いただけます(既に Flutter SDK をお使いの方は移行ドキュメントをご確認ください)。ぜひお試しいただき、Discord または GitHub でご意見をお寄せください。Sentry を初めて利用される方は、無料で始められます。
Original Page: Introducing Sentry’s Flutter SDK 9.0 – Logs, Session Replay, Feature Flags, and more
IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談はこちらのフォームからお気軽にお問い合わせください。


