Expand description
§backup-suite: エンタープライズ対応Rust製バックアップツール
backup-suiteは、セキュリティ、パフォーマンス、信頼性を重視したエンタープライズレベルの
バックアップソリューションです。型安全性、並列処理、包括的なエラーハンドリングにより、
プロダクション環境での安全な運用を可能にします。
§🚀 主要機能
§セキュリティファースト
- パストラバーサル対策:
safe_joinによるディレクトリトラバーサル攻撃防止 - 権限チェック: ファイルアクセス前の厳密な権限確認
- 入力検証: 全ユーザー入力の検証とサニタイズ
- 機密情報保護: エラーメッセージからの機密情報漏洩防止
§高性能・スケーラブル
- 並列処理:
rayonによるマルチコアCPU活用 - I/O最適化:
CopyEngineによるバッファリング・ストリーミング - メモリ効率: 大容量ファイルの低メモリ処理
- プログレス表示: リアルタイム進捗・統計情報
§エンタープライズ機能
- 優先度管理: High/Medium/Low による重要度別管理
- 設定バリデーション: 厳密な設定検証とエラー報告
- 包括的ログ: 詳細な操作履歴とエラートレース
- 除外パターン: 正規表現による柔軟なファイル除外
§📚 使用例
§基本的なバックアップ
use backup_suite::{Config, BackupRunner, Target, Priority};
use std::path::PathBuf;
// 1. 設定をロード(または新規作成)
let mut config = Config::load().unwrap_or_default();
// 2. バックアップ対象を追加
let target = Target::new(
PathBuf::from("/home/user/documents"),
Priority::High,
"重要ドキュメント".to_string()
);
config.add_target(target);
config.save()?;
// 3. バックアップ実行
let mut runner = BackupRunner::new(config, false); // false = 実際に実行
let result = runner.run(None, None)?; // None = 全優先度対象
// 4. 結果確認
if result.failed > 0 {
eprintln!("警告: {}件のファイルでエラーが発生", result.failed);
for error in &result.errors {
eprintln!(" - {}", error);
}
}
println!("✅ バックアップ完了: {}件成功, 合計{}",
result.successful,
format_bytes(result.total_bytes));§高度な設定例
use backup_suite::*;
use std::path::PathBuf;
let mut config = Config::default();
// プロジェクトファイル(.gitを除外)
let mut project_target = Target::new(
PathBuf::from("/home/user/projects"),
Priority::Medium,
"プロジェクト".to_string()
);
project_target.exclude_patterns = vec![
r"\.git/.*".to_string(),
r"node_modules/.*".to_string(),
r"target/.*".to_string(),
];
config.add_target(project_target);
// 重要ファイルのみ(高優先度)
let mut runner = BackupRunner::new(config, false)
.with_progress(true); // プログレスバー表示
let result = runner.run(Some(&Priority::High), None)?;§エラーハンドリング
use backup_suite::{BackupError, Result};
fn handle_backup_errors() -> Result<()> {
match perform_backup() {
Ok(result) => {
println!("✅ 成功: {}件処理", result.total_files);
Ok(())
}
Err(BackupError::PathTraversalDetected { path }) => {
eprintln!("🚨 セキュリティ警告: 不正なパス検出 {:?}", path);
// セキュリティ関連エラーは処理を中断
std::process::exit(1);
}
Err(BackupError::PermissionDenied { path }) => {
eprintln!("❌ 権限エラー: {:?} にアクセスできません", path);
// 権限エラーは警告として処理継続
Ok(())
}
Err(e) if e.is_recoverable() => {
eprintln!("⚠️ 一時的エラー(リトライ推奨): {}", e);
// リトライ可能なエラー
Err(e)
}
Err(e) => {
eprintln!("💥 重大エラー: {}", e.user_friendly_message());
Err(e)
}
}
}§🏗️ アーキテクチャ
§コアモジュール (core)
Config: 設定管理・バリデーション・永続化BackupRunner: バックアップ処理エンジン・並列実行Target: バックアップ対象定義・除外パターンCopyEngine: I/O最適化・ファイルコピーBackupHistory: 履歴管理・統計情報
§セキュリティモジュール (security)
safe_join: パストラバーサル対策パス結合validate_path_safety: パス安全性検証sanitize_path_component: パス文字列サニタイズ- 権限チェック: Unix/Windows対応権限確認
§UIモジュール (ui)
BackupProgress: プログレスバー・統計表示display_dashboard: ダッシュボード・概要表示ColorTheme: アクセシビリティ対応色彩- テーブル表示: 構造化データの美しい表示
§エラーハンドリング (error)
BackupError: 型安全なエラー分類Result: 統一されたResult型- ユーザーフレンドリー: 分かりやすいエラーメッセージ
§🔒 セキュリティ設計
§脅威モデル
- ディレクトリトラバーサル:
../../../etc/passwd等の攻撃 - 権限昇格: 不正なファイルアクセス試行
- シンボリックリンク: リンク経由の意図しないアクセス
- 機密情報漏洩: エラーメッセージ経由の情報漏洩
§対策実装
use backup_suite::security::{safe_join, validate_path_safety};
use std::path::Path;
let base = Path::new("/safe/backup/dir");
let user_input = Path::new("../../../etc/passwd"); // 攻撃試行
// safe_joinは自動的に危険なパスを検出・拒否
match safe_join(base, user_input) {
Ok(safe_path) => {
println!("安全なパス: {:?}", safe_path);
// /safe/backup/dir/etc/passwd として正規化
}
Err(e) => {
eprintln!("🚨 攻撃検出: {}", e);
// ディレクトリトラバーサル攻撃をブロック
}
}§⚡ パフォーマンス特性
§ベンチマーク結果(参考値)
- 小ファイル多数: 10,000ファイル/秒
- 大ファイル: 500MB/秒(SSD環境)
- メモリ使用量: 50MB未満(ファイル数に依存しない)
- CPU使用率: 全コア活用(並列度調整可能)
§最適化設定
use backup_suite::{BackupRunner, Config};
let config = Config::load()?;
let mut runner = BackupRunner::new(config, false)
.with_progress(true); // プログレス表示有効
// CPU集約的環境での実行
std::env::set_var("RAYON_NUM_THREADS", "8");
let result = runner.run(None, None)?;§📋 設定リファレンス
設定ファイル (~/.config/backup-suite/config.toml) の例:
[backup]
destination = "/path/to/backup/storage"
auto_cleanup = true
max_backup_age_days = 30
[schedule]
enabled = true
high_frequency = "daily"
medium_frequency = "weekly"
low_frequency = "monthly"
[[targets]]
path = "/home/user/documents"
priority = "High"
category = "重要ドキュメント"
exclude_patterns = ["*.tmp", "*.log"]Re-exports§
pub use compression::CompressedData;pub use compression::CompressionConfig;pub use compression::CompressionEngine;pub use compression::CompressionType;pub use core::BackupHistory;pub use core::BackupResult;pub use core::BackupRunner;pub use core::CleanupEngine;pub use core::CleanupPolicy;pub use core::CleanupResult;pub use core::Config;pub use core::CopyEngine;pub use core::Frequency;pub use core::PerformanceConfig;pub use core::PipelineConfig;pub use core::Platform;pub use core::Priority;pub use core::ProcessedData;pub use core::ProcessingMetadata;pub use core::ProcessingPipeline;pub use core::RestoreEngine;pub use core::RestoreResult;pub use core::ScheduleStatus;pub use core::Scheduler;pub use core::Target;pub use core::TargetType;pub use core::history::BackupStatus;pub use crypto::EncryptedData;pub use crypto::EncryptionConfig;pub use crypto::EncryptionEngine;pub use crypto::KeyDerivation;pub use crypto::KeyManager;pub use crypto::MasterKey;pub use error::BackupError;pub use error::Result;pub use i18n::get_message;pub use i18n::Language;pub use i18n::MessageKey;pub use security::check_read_permission;pub use security::check_write_permission;pub use security::safe_join;pub use security::AuditEvent;pub use security::AuditLog;pub use security::EventType;pub use ui::display_backup_result;pub use ui::display_dashboard;pub use ui::display_history;pub use ui::display_targets;pub use ui::ColorScheme;pub use ui::ColorTheme;pub use security::check_execute_permission;
Modules§
- compression
- 圧縮モジュール
- core
- コアモジュール
- crypto
- 暗号化モジュール
- error
- i18n
- Internationalization (i18n) Module
- security
- セキュリティモジュール
- smart
- Smart機能モジュール
- typo
- ui