📝

Flutterのデバッグ:print() と log() の違いと使い分け

2025/03/14に公開

Flutterのデバッグ:print() と log() の違いと使い分け

Flutterアプリを開発する際、ログを出力してデバッグすることは避けられません。その際に一般的に使われるのが print() ですが、Dart には log() という便利な関数もあります。

この記事では、print()log() の違いを解説し、どちらをどのように使い分けるべきかを紹介します。


print()log() の違い

特徴 print() log()
ログのフィルタリング ❌ 不可 ✅ カテゴリ (name) で可能
ログレベル管理 ❌ なし level で管理可能
スタックトレース表示 ❌ なし stackTrace 追加可能
Flutter DevTools で確認 ❌ できない ✅ "Logging" タブで確認可能

log()print() の上位互換のような存在で、ログ管理をしやすくするための機能が備わっています。


🟢 print() の使いどころ

print() はシンプルなデバッグに向いています。

使うべきケース

  • 一時的なデバッグ
  • 簡単な変数の値の確認
  • コンソールに軽く出力してチェックしたいとき

使用例

int counter = 5;
print("現在のカウンター値: $counter");

💡 注意点

  • print() はすべてのログがコンソールに表示されるため、ログが増えると見づらくなる。
  • ログの種類を分けて管理することができない。

🔵 log() の使いどころ

log() はログ管理をしやすくするための上位互換的な関数です。

使うべきケース

  • APIリクエスト・レスポンスのログ
  • エラーハンドリング(スタックトレース付き)
  • ログをカテゴリごとに整理したいとき
  • Flutter DevTools でログを管理したいとき

使用例

import 'dart:developer';

log("APIリクエスト: $url", name: "API");
log("APIレスポンスコード: ${response.statusCode}", name: "API");
log("APIレスポンス: ${response.body}", name: "API");

log() を使うメリット

カテゴリ(name)をつけられる → IDEやFlutter DevToolsでフィルタリング可能
エラーハンドリングがしやすいstackTrace を追加できる
ログレベルを設定できる → 重要なログを強調可能

エラーハンドリングの例

try {
  throw Exception("サーバーエラー");
} catch (e, stackTrace) {
  log("エラー発生: $e", name: "ERROR", level: 1000, stackTrace: stackTrace);
}

📌 print() vs log() の使い分け

状況 推奨する関数
ちょっとしたデバッグ print()
APIリクエスト・レスポンスのログ log(name: "API")
エラーハンドリング log(name: "ERROR", level: 1000, stackTrace: stackTrace)
Flutter DevTools でログを管理 log(name: "DEBUG")

💡 開発初期は print()、ログを整理したくなったら log() に移行するのがベスト!


🚀 まとめ

  • print() はシンプルなデバッグ向け。
  • log() はカテゴリ分け・エラーハンドリング・DevTools対応で管理しやすい。
  • 開発の初期は print()、本格的なログ管理には log() を使おう!

Flutter開発でのデバッグを効率化するために、ぜひ log() を活用してみてください!

Discussion