ぎょーぼのぶろぐ

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

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

前置き

表題の通りです。 Ruby を勉強していますが、何か作ってみないとやっぱり感覚が分からないので、とりあえず作ってみることにしました。

何を作るか?

じゃあ、何を作る?ということですが、どうせ作るなら自分で使えるものを作りたい、ということで、今のマシンで便利にしたいことを考えました。ぱっと思いついたのが、外付けハードディスクへのファイルバックアップ。基本的に簡単にバックアップできるように、特定のフォルダーにできるだけ集中して入れているのですが、それでもメールデータだったり、マイドキュメント関連だったり、いくつかの場所に散らばっています。毎回、手動でコピーしていますが、フォルダーを指定しておいて、実行したら自動的にバックアップフォルダーを作ってバックアップを取ってくれると、便利なのかなー、と思ったので。

今の自分のメインマシンは Windows なので、それだったら batファイルで作ったり、Visual Studio系でWindowsアプリケーションにした方が早いのですが、せっかく Ruby を勉強しているので、Ruby で作ってみることにします。

ツールの要件

極端な話、copy コマンドを必要なだけ並べて終わり・・・という作り方もできるわけですが、それでは勉強にならないし、つまらないので、ちゃんと考えてみます。

大げさに言えば、、、要件定義、、、でしょうか。

今回は、使用者:自分、設計者:自分、開発者:自分、テスター:自分 ということになるので、まず、使用者の立場で、「こういうのが欲しい」というのを考えてみます。

【要件】

  1. PC 内に入っているファイルのうち、指定したフォルダーの内容を、外付けHDDにコピーする。
  2. バックアップ元はフォルダー単位で指定とし、複数指定できるようにしたい。
  3. バックアップ元のフォルダーは、実行前に事前に設定できるようにし、フォルダーの追加、変更、削除も自由にできるようにしたい。
  4. バックアップ先は、以前に取得したバックアップが上書きされないように、新しいフォルダーを作成してほしい。また、フォルダー名に「年月日時分秒」を入れて、いつバックアップしたのか分かるようになっていると良い。
  5. 実行開始直前に、処理対象のコピー元フォルダー、コピー先フォルダーが間違っていないか、目視で確認できるようにしたい。
  6. バックアップ処理の進捗状況が分かるようにしたい。
  7. バックアップ処理結果(ファイル数、フォルダー数、合計サイズなど?)を最後に表示したい。
  8. エラーが出たときのために、処理のログを出力したい。
  9. コピー中にエラーが発生した場合は、そのファイル、フォルダーは飛ばして処理を続ける。ただし、エラーの数が 10件以上になった場合は、そこで処理を中止する。エラーの内容はログに出力する。

んー、こんなところでしょうか。

今、ぱっと思いつきで出した要件なので、後になって追加や変更がたぶん出ます。実際のお客様からの要件ヒヤリングだと、色々な人の意見が出てくるので、まるっきり反対の意見が出たり、絶対無理な要件が出てくることは普通に良くあります。お客様の要望を分析し、開発期間やコストも含めて勘案、実際に開発する仕様の「落としどころ」を決めるのが、開発のキモの一つになります。

ここをしくじって、不幸になっていくプロジェクトは本当に多々多々ありました。。。

次回

次回は、出した要件に基づいて、どのような実現方法があるか、分析してみます。