Flutterでメモリリークを検知する「leak_tracker」の使い方

Flutter アプリを長時間使っていると、
「メモリ使用量が増え続ける」「画面遷移でインスタンスが解放されない」
といった メモリリーク問題 に直面することがあります。

そんなときに役立つのが leak_tracker
開発中に リークしているオブジェクトを検知 できる便利なパッケージです。


インストール

pubspec.yaml に追加します。

dev_dependencies:
  leak_tracker: ^10.0.0  # 最新バージョンを確認してください

dev_dependencies に入れるのは、本番コードではなく 開発・テスト用ツール だからです。


基本的な使い方

leak_tracker は「特定のオブジェクトが解放されているか」を監視できます。

import 'package:flutter/material.dart';
import 'package:leak_tracker/leak_tracker.dart';

void main() {
  // LeakTracker を有効化
  LeakTracking.start();

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: LeakExamplePage(),
    );
  }
}

class LeakExamplePage extends StatefulWidget {
  const LeakExamplePage({super.key});

  @override
  State<LeakExamplePage> createState() => _LeakExamplePageState();
}

class _LeakExamplePageState extends State<LeakExamplePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("leak_tracker サンプル")),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 監視対象のオブジェクトを作成
            final obj = Object();
            LeakTracking.track(obj, debugName: "TestObject");
            debugPrint("オブジェクトを作成してトラッキングしました");
          },
          child: const Text("オブジェクトを作成"),
        ),
      ),
    );
  }
}

主なポイント

  • LeakTracking.start() → リーク検知を有効化
  • LeakTracking.track(obj, debugName: "名前") → 特定オブジェクトを監視対象に
  • 解放されていないオブジェクトがあると警告ログが出力される
  • 開発・テスト専用 なので、本番アプリには含めない

まとめ

leak_tracker を使うと、
「画面遷移後にウィジェットやコントローラが残っていないか?」
といったチェックが簡単にできます。

Flutter アプリの 品質向上リソースリーク防止 に役立つツールです。

詳細: pub.dev/packages/leak_tracker

タイトルとURLをコピーしました