コンテンツにスキップ

アーキテクチャ

rfbはモジュラー設計のPythonパッケージです。このページではコア設計と仕組みを説明します。

全体構造

rfbは以下の主要コンポーネントで構成されています:

rfb/
├── __init__.py      # パッケージ初期化
├── backuper.py      # バックアップ実行ロジック
├── cli.py           # コマンドラインインターフェース
├── config.py        # 設定モデルと読み込み機能
├── fetcher.py       # フェッチ実行ロジック
├── gear.py          # rsync実行ユーティリティ
├── generator.py     # 設定ファイル生成
└── reader.py        # 設定ファイル読み込み

コンポーネント概要

CLI (cli.py)

Typerを使用したコマンドラインインターフェース。主要コマンド(fetch, backup, sync, init, status)を定義し、適切なモジュールに処理を委譲します。

設定モデル (config.py)

Pydanticを使用した設定データモデル:

  • RsyncTaskConfig - 単一のrsyncタスク設定
  • RfbConfig - 全体の設定モデル(fetchとbackupセクションを含む)

設定ローダー (reader.py)

設定ファイルの検索と読み込みを担当:

  • ConfigReader - 複数の候補パスから設定を検索
  • 環境変数の展開機能
  • 設定ステータスの出力

rsync実行エンジン (gear.py)

rsyncコマンドの実行を担当:

  • run_rsync() - シンプルなrsync実行
  • _run_rsync_with_password() - パスワード入力の自動化

フェッチャー (fetcher.py)

リモートからローカルへのデータ取得を担当:

  • SSH接続によるリモートデータ取得
  • 設定からrsyncオプションの適用

バックアッパー (backuper.py)

ローカルから外部ストレージへのバックアップを担当:

  • 主にローカルディスク間の転送
  • OneDriveなどのクラウドストレージへの転送

設定ジェネレーター (generator.py)

新規設定ファイルの生成を担当:

  • テンプレートからの設定生成
  • 開発用と本番用の区別

認証フロー

SSHパスワード認証はpexpectライブラリを使用して自動化されています:

  1. rsyncコマンドがSSH接続を開始
  2. pexpectがパスワードプロンプトを検出
  3. 環境変数または--ssh-passwordオプションからパスワードを取得
  4. パスワードを自動入力

ファイルパス解決

設定ファイルの読み込みは以下の優先順位で試行されます:

  1. コマンドライン引数で明示的に指定されたパス
  2. カレントディレクトリのrfb.toml
  3. XDG規格に沿ったユーザー設定ディレクトリ
  4. Windowsの場合はAppDataディレクトリ
  5. 開発用のexamples/config.toml

主な処理フロー

syncコマンドの処理フロー

graph TD
    A[sync コマンド実行] --> B[設定ファイル読み込み]
    B --> C{タスクが見つかった?}
    C -->|Yes| D[fetchタスク実行]
    C -->|No| Z[エラー: タスクが見つからない]
    D --> E{fetchが成功?}
    E -->|Yes| F[backupタスク実行]
    E -->|No| Z
    F --> G{backupが成功?}
    G -->|Yes| H[完了]
    G -->|No| Z

エラーハンドリング

各コンポーネントは適切な例外を発生させ、上位レベルのコンポーネントでキャッチして処理します:

  • FileNotFoundError - 設定ファイルが見つからない
  • ValueError - 設定内容が無効
  • subprocess.CalledProcessError - rsyncコマンドの実行エラー
  • pexpect.TIMEOUT - SSHパスワードプロンプトのタイムアウト

将来の拡張性

コード設計は以下の将来の拡張を考慮しています:

  1. クラウドストレージAPIの直接サポート
  2. スナップショット機能(日付付きバックアップ)
  3. バックアップ検証機能
  4. 通知システム(エラー発生時のメール/Slack通知)
  5. バックアップスケジューリング