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

その不具合、どのWidgetですか? ― アプリ内で“直せるバグ報告”を作る

Avatar for Sugiy Sugiy
October 24, 2026

その不具合、どのWidgetですか? ― アプリ内で“直せるバグ報告”を作る

Avatar for Sugiy

Sugiy

October 24, 2026

More Decks by Sugiy

Other Decks in Technology

Transcript

  1. README すぎー /Sugiy 1. DeNA の iOS/Flutter エンジニア 2. FlutterKaigi

    は 2024 の前夜祭 LT 以来 2 回目 3. 去年末まで Flutter アプリ、 今は iPadOS アプリのプロジェクト 4. 2025 年のベルリンでの Fluttercon ではパフォーマンスについて… 5. iPhone Duo を買ってしまったので、 お金が... 10 / 27
  2. バグ起票の流れ: いま と アプリ内バグ起票 いまの一般的な流れ バグや改善点を検知 動画やスクショの用意 手動で情報を入力して起票 自分で撮る 再現手順や環境情報の記載、

    ファイルの添付 アプリ内バグ起票 (iPadOS アプリで運用中) バグや改善点を検知 動画の用意 起票 Actions で下調べ・振り分け アプリが自動で記録 環境情報などは自動入力 起票後は自動 11 / 27
  3. 今日話すこと 1. 画面上の Widget をタップして、 対象の Widget を選ぶ 2. 静止画リングバッファ

    + デバイスで動画化して、 不具合の 動画を作る 3. Widget 階層・ログ・環境情報を一緒にチケットに添付する 12 / 27
  4. タップした Widget が枠で囲まれる 1. 「要素を選ぶ」 で選択モードへ 2. 報告したい Widget をタップ

    3. 入れ子は一番小さい要素が選ばれる 4. 「この要素にする」 で確定して起票画 面へ反映 Flutter デモ 発表時はここに実際の画面が表示され ます 15 / 27
  5. 仕組みの肝 1. Element ツリーをたどり、 RenderObject の位置を取る 2. RenderBox.localToGlobal で画面座標に変換する 3.

    目印は Semantics(identifier:) / ValueKey。 a11y 対応がデバ ッグ資産に 4. タップ位置を含む候補のうち、 面積が最小の要素を選ぶ 16 / 27
  6. 事象が起きてから動画を撮るのは手間 1. 起きたあとに撮り直すのは手間。 2. 再現が難しいと、 再現させるのに時間がかかる (そもそも再 現しないことも) 3. 現在の

    iPadOS のプロジェクトのアプリ: 裏で静止画を撮り 続けて直近 60 秒をリングバッファに → 起票時に動画化 4. Flutter でも作れる? 3 段階に分けて検証 18 / 27
  7. 3 段階に分けて考える ① フレーム取得 △ Flutter だけだと不十分 toImage では PlatformView

    が黒い → ネイティブで View 階層ごと撮る ② リングバッファ ◎ Flutter だけで可 tmp に PNG を書き続けて、 古い分を削除 ③ 動画エンコード × 標準の Dart 自体にはエンコーダがない ネイティブのエンコーダを MethodChannel で呼ぶ 19 / 27
  8. Issue に載せる情報 報告する人が選ぶ (任意・スキップ可) 選択した UI 要素 報告とコードを結ぶアンカー スクリーンショット 見た目の証拠

    直近の動画 起きるまでの流れ 機械が自動で集める Widget 階層 その瞬間の画面構造 ログ 直前に何が起きていたか スタックトレース どの経路で来たか 環境情報 端末・ OS ・バージョン依存の切り分け 22 / 27
  9. 最大の差分: ログは自分で溜める 1. Flutter には iOS の OSLogStore 相当の API

    がない 2. mein() で debugPrint / print / onError をフックして 流し込む 3. 起動時からアプリ内リングバッファに直近 1000 行を保持 し、 起票時に添付 23 / 27
  10. なぜ作ったのか (課題意識) 1. コミュニケーションコストの削減。 情報不足による確認のや りとりを無くしたい 2. AI で増えるエンジニアのアウトプットに対して、 QA

    の負荷 を減らしたい 3. AI に修正させるための正確なコンテキストとして、 そのま ま渡せるチケットにしたい 24 / 27
  11. 終わり SlidysFlutter を試す PDF スライドを見る TestFlight / Flutter デモ入り Speaker

    Deck testflight.apple.com/join/tKHf1Uq2 speakerdeck.com/u503 27 / 27