ディレクトリを削除する

Recipe ID: fs-007

指定したディレクトリ(フォルダ)を削除する方法を紹介します。
中身が空のディレクトリだけでなく、ファイルが含まれているディレクトリを丸ごと削除することも可能です。

前提条件

このレシピを使用するには、@tauri-apps/plugin-fs プラグインが必要です。

1. プラグインのインストール

プロジェクトのルートディレクトリで以下のコマンドを実行してプラグインを追加します。

npm run tauri add fs

2. Permissions (権限) の設定

src-tauri/capabilities/default.json に以下の権限を追加します。

{
  "permissions": [
    ...,
    {
      "identifier": "fs:allow-remove",
      "allow": [{ "path": "$APPLOCALDATA/**" }]
    }
  ]
}

※ 上記の例では $APPLOCALDATABaseDirectory.AppLocalData)配下の削除を許可しています。アクセスするディレクトリに応じて、パス変数を指定してください。スコープが設定されていないディレクトリにはアクセスできません。

1. フロントエンドから作成する (TypeScript)

@tauri-apps/plugin-fsremove 関数を使用します。

ディレクトリを削除する(再帰的削除)

中身が含まれているディレクトリを削除する場合、オプションで recursive: true を指定する必要があります。
これはコマンドラインでの rm -rf に相当します。

import { remove, BaseDirectory } from '@tauri-apps/plugin-fs';

async function deleteLogsDirectory() {
  try {
    // logs ディレクトリとその中身をすべて削除
    await remove('logs', {
      baseDir: BaseDirectory.AppLocalData,
      recursive: true 
    });
    console.log('ディレクトリを削除しました');
  } catch (err) {
    console.error('削除エラー:', err);
  }
}

空のディレクトリを削除する

中身が空であることがわかっている場合、または中身がある場合は削除したくない(エラーにしたい)場合は、recursive オプションを外すか false に設定します。

import { remove, BaseDirectory } from '@tauri-apps/plugin-fs';

async function deleteEmptyDir() {
  try {
    // temp_empty ディレクトリを削除(中身があるとエラーになる)
    await remove('temp_empty', {
      baseDir: BaseDirectory.AppLocalData,
      // recursive: false // デフォルトは false です
    });
    console.log('空のディレクトリを削除しました');
  } catch (err) {
    console.error('削除失敗(ディレクトリが空でない可能性があります):', err);
  }
}

2. バックエンドから作成する (Rust)

Rust の std::fs を使用します。

空のディレクトリを削除

use std::fs;

#[tauri::command]
fn remove_empty_directory(path: String) -> Result<(), String> {
    // 中身がある場合はエラーになります
    fs::remove_dir(path).map_err(|e| e.to_string())
}

ディレクトリを再帰的に削除

use std::fs;

#[tauri::command]
fn remove_directory_recursive(path: String) -> Result<(), String> {
    // 中身ごと削除します (rm -rf 相当)
    fs::remove_dir_all(path).map_err(|e| e.to_string())
}

補足

  • recursive: true: Rust では remove_dir_all がこれに相当します。
  • ロックとエラー: Windows では、ファイルエクスプローラーで開いているだけでも削除に失敗することがあります。
  • ゴミ箱: 完全に削除されます。ゴミ箱には移動しません。