Rust 側のログを出力する (env_logger)

Recipe ID: rust-019

開発中、println! を使ってデバッグするのは手軽ですが、アプリの規模が大きくなると「エラーだけ見たい」「特定の機能のログだけ見たい」といった細かい制御が必要になります。

Rust では log クレートで「ログを取る」という定義だけを行い、実際に出力する役割(ロガー)として env_logger などのクレートを組み合わせるのが一般的です。

1. クレートの追加

ターミナルで src-tauri ディレクトリに移動して、以下のコマンドを実行します。

cargo add log env_logger

2. 初期化とログ出力

lib.rsrun 関数で env_logger::init() を呼ぶことでセットアップ完了です。

// logマクロを使えるようにする
use log::{info, warn, error, debug};

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    // ログシステムの初期化(必ず最初に呼ぶ)
    env_logger::init();

    tauri::Builder::default()
        .setup(|app| {
            // 様々なレベルでログ出力
            info!("アプリケーションが起動しました");
            debug!("詳細なデバッグ情報(通常は見えません)");
            
            if let Err(e) = do_something() {
                error!("エラーが発生しました: {}", e);
            }
            
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

fn do_something() -> Result<(), String> {
    warn!("これは警告メッセージです");
    Ok(())
}

3. ログレベルの制御

env_logger の最大の特徴は、環境変数 RUST_LOG で出力内容を変えられる点です。
コードを書き換えずに、実行時の指定だけでログの詳細度を調整できます。

実行方法

Windows (PowerShell):

# infoレベル以上のログを表示(アプリ名 = debug にすると自分のコードだけ詳細表示も可能)
$env:RUST_LOG="info"
npm run tauri dev

macOS / Linux:

RUST_LOG=info npm run tauri dev

ログレベルの種類(詳細順)

1. error: 致命的なエラー
2. warn: 警告(処理は続くが注意が必要)
3. info: 一般的な情報(起動完了など)
4. debug: デバッグ情報(変数の値など)
5. trace: 非常に詳細な追跡情報

補足: tauri-plugin-log との違い

  • env_logger: コンソール(ターミナル)に出力するだけ。シンプルで軽量。
  • tauri-plugin-log: ログファイルへの保存、ローテーション、フロントエンドのコンソールログとの統合など、高機能なログ管理が必要な場合はこちらを使います。

初心者のうちは env_logger で十分ですが、リリース後にユーザーからログファイルをもらって調査したい場合などは、プラグイン版への移行を検討してください。