ぎょーぼのぶろぐ

IT系の話を書いていくブログです。今はRubyの勉強中。

【Ruby】Ruby でファイルバックアップツールを作ってみる その2

動作環境の要件

その1で、動作環境の要件について触れていなかったので、ここで書きます。

  • 自分のPCで動作すること(Windows 10 環境)
  • Ruby で作ること
  • gem 等、必要があればインストールするが、あまり多くならないようにする。

これくらいでしょうか。この要件は外さないようにします。

要件を分析する

その1で書き出した要件について、どうやって実現するかを分析してみます。

1.PC 内に入っているファイルのうち、指定したフォルダーの内容を、外付けHDDにコピーする。
2.バックアップ元はフォルダー単位で指定とし、複数指定できるようにしたい。
3. バックアップ元のフォルダーは、実行前に事前に設定できるようにし、フォルダーの追加、変更、削除も自由にできるようにしたい。

1~3 については、バックアップの情報を「事前に設定しておきたい」ということなので、どこかに設定を保管しておく必要があります。 設定の保管方法としては、いくつか考えられますが、

  • コードの中に直書きする。
  • テキストファイルに設定を書く
  • データベースを作って、設定を保管する。

今回は、使用者=開発者なので、コードの中に全部直書きしてしまっても使うことはできますが、普通は使いにくいです。データベースを作って、、、でもできますが、今回のツールくらいの規模では、やり過ぎな感じです。

素直に、テキストの設定ファイルを作って、ツールで読み込ませる方法が良さそうです。

Windows で設定ファイル、というと、iniファイルが真っ先に思いつきます。Ruby でも、gem に inifile というパッケージがありますので、これが使えそうです。

4.バックアップ先は、以前に取得したバックアップが上書きされないように、新しいフォルダーを作成してほしい。また、フォルダー名に「年月日時分秒」を入れて、いつバックアップしたのか分かるようになっていると良い。

ここについては、バックアップ先のフォルダー名の加工が必要です。「年月日時分秒」だけのフォルダー名だと、何のフォルダーか分からなくなるので、固定の接頭辞(prefix)を決めておいて、そこに「年月日時分秒」をつけるのが良いでしょう。設定ファイルを作ることにしたので、prefix も設定できるようにしておくと便利、かもしれません。

5.実行開始直前に、処理対象のコピー元フォルダー、コピー先フォルダーが間違っていないか、目視で確認できるようにしたい。

設定ファイルを読み込んだ後、コピー実行前に情報表示をする、ということですが、設定ファイルに書き込んだパスが間違っていたり、重複したりしているかもしれません。ですので、フォルダーパスのエラーチェック、重複チェックを行い、エラーがあればここで確認できるとうれしいです。

6.バックアップ処理の進捗状況が分かるようにしたい。

ここは少し悩ましいです。

進捗状況が分かるようにするには、事前にバックアップするファイル全体の情報を調べる必要があります。また、進捗をリアルタイムに表示したいとすると、フォルダー丸ごとコピーではなく、中のファイルを一つずつコピーするようにしないと難しいかもしれません。ただ、それをすると、レスポンスは悪くなるのは間違いなさそう・・・

どっちにするかは、一つずつコピー、丸ごとコピーでレスポンスを試してみながら、決めていこうと思います。

7.バックアップ処理結果(ファイル数、フォルダー数、合計サイズなど?)を最後に表示したい。

結果表示は必要だと思うので。エラーが発生した時のエラー情報も出した方がいいのかも。

8.エラーが出たときのために、処理のログを出力したい。
9.コピー中にエラーが発生した場合は、そのファイル、フォルダーは飛ばして処理を続ける。ただし、エラーの数が 10件以上になった場合は、そこで処理を中止する。エラーの内容はログに出力する。

デバッグのためにも、実行結果の詳細をみるためにもログは出るようにしておきたいです。ログ出力用の機能を作ります。エラーの数のカウントも必要ですね。エラー10以上としていますが、設定ファイルでエラー上限数を決められると便利かもしれません。

今日のまとめ

細かいところはまだまだ詰める必要はありますが、今のところの方針は以下のような感じです。

  • ini ファイルに設定をまとめる。設定内容は以下の通り。
    • バックアップ元:絶対パスで指定。10個くらい指定できるようにする。
    • バックアップ先:絶対パスで指定。1個だけ。
    • バックアップフォルダーにつける prefix名
    • ログ出力先:相対パスで指定。デフォルトは実行ファイルと同じ場所で。
    • ログファイルにつける prefix名:バックアップフォルダーと同じように「年月日時分秒」を付けることにします。
    • エラー上限数
  • コピー実行前、実行後に情報確認用メッセージを表示する。
  • コピー方法は、進捗状態を表示するために、「フォルダー、ファイルを一つずつ」コピーする方針で作ってみる。レスポンスに問題が出る場合は、フォルダーごとにコピーする方法に変更する可能性あり。
  • エラーの発生回数により、処理を中断する機能をつける。
  • ログ出力機能をつける。