写真ファイルの自動振り分けソフトを作成します。
プロジェクトの種類はサービスを使用します。サービスについては「サービスプロジェクト(前半・後半)」の記事をご確認ください。
記事ですが、4ステップに分けて作成します。
ステップ①ではソフトの概要と仕様について考えていきます。
概要
最初に写真振り分けソフトの概要について考えてみます。
とはいえ、作成後に「使い勝手がよくない」といった感想がどの道出てきますので簡単に考えてみます。
私自身「作り直しというレベルにならなければ良い、それよりも早く作成して使ってみる」というやり方のため、じっくり時間をかけて仕様を練るという方はここで考えてみてください。
個人の工作と割り切り、モチベーション下がるようであればプログラムに進むことをお勧めします。
要件について
必要な要件を箇条書きで記載してみます。
細かく考えるとまだまだ出てきますが、先に進みます。
詳細については「仕様について」で記載します。
動作条件
動作条件について記載してみます。
当たり前の内容が多いですが、こちらも情報として必要です。
「日本語」以外の対応は難しいため、条件とします。
OSはWindows10とWindows11のみ保証します。
32bitのWindows10も少ないため動作条件から外します。
Windows Updateがされていない古いWindows10の場合、「.NET Framework 4.7.2」がインストールされていない可能性も考慮して動作条件に追加します。
Windows10 IoTの場合もインストールされていない場合があります。
仕様について
仕様について考えていきます。
要件の1つ1つについて、詳細な動作を決めていきます。
図解
振り分けのイメージ図を作ってみました。(雑なのはご勘弁・・)
1.スマホ、デジカメで撮影した画像を「振り分け元フォルダ」にコピーします。
2.振り分け元フォルダにコピーしたファイルは自動で振り分け先にコピーします。
このとき、振り分け先フォルダはファイルの「更新日時」から日時(年月日)フォルダを作成し、さらにファイル名は「時分秒」として作成します。
3.振り分けの後、必要なくなった振り分け元フォルダの画像は残す、または削除します。
この流れで処理を行います。
登録について
設定により処理を分岐するため、設定値を作成します。
設定変更は画面を持たないサービスプロジェクトで行えませんので、登録用アプリケーションを作成します。
- 登録用アプリケーションは設定変更する場合に起動・変更を行います。
- 登録用アプリケーションで設定ファイル(.json)を作成します。
ファイルの形式は何でもよいのですが、JSONファイルを用いると拡張性やクラスへの置き換えが容易に行えます。 - サービスプロジェクトは設定ファイルの更新日時から更新を検知し、ファイルを読み込みします。
注意点として、登録用のアプリケーションと書き込み衝突させないよう、読み込み専用とします。
またファイルの変更検知やソフト間通信を行なうのが筋ですが、通知の即時性はそこまで重要でないためタイマーによる更新チェックを行います。 - 設定ファイルは「setting.json」とし、サービスプロジェクトの実態と同フォルダにあるものとします。
- サービスプロジェクトは起動時の初期化処理にて設定ファイルを読み込みします。
次に設定ファイルに保持する内容を考えます。
今までの要件および仕様を再確認して、設定値を作成してみます。
設定値 | データ型 | 説明 | 初期値 |
---|---|---|---|
used | bool | 振り分け動作のON/OFF 一時的に振り分けを行わない場合、falseにする | true |
sourceDirectory | 文字列 | 振り分けの元のフォルダパス | (未登録) |
destinationDirectory | 文字列 | 振り分け先のフォルダパス | (未登録) |
extension | 文字列 | 振り分けする画像の拡張子 複数の場合はセミコロン「;」で区切る | .jpeg |
backup | bool | 振り分け元のファイルバックアップ true:コピーして残す false:移動して削除 | true |
performance | 数値 | パフォーマンス設定 1(高)、2(中)、3(低) | 1 |
capacity | 数値 | 振り分けを行なうことできる保存先の容量 設定を下回る場合は振り分けを停止する 範囲は1GB〜とする | 1000000000 |
これをJSONファイルにしてみます。
{
"used": true,
"sourceDirectory": "",
"destinationDirectory": "",
"extension": ".jpeg;",
"backup": true,
"performance": 1,
"capacity": 1000000000
}
ログの出力
振り分けした情報はログに出力しておきます。
次のような利点があります。
- 後から振り分けが行われたか確認したい場合に活用できる
- 振り分けしたファイル数などの集計に使用できる
- プログラムバグなどの確認に使用できる
個人で作成するソフトでは必須機能ではないため疎かになりがちですが、先々のことを考えると入れておくことをお勧めします。
ライブラリが用意されていて、古いログを削除する機能などを備えているため簡単に実装できます。
ライブラリは調べるといくつかありますが、今回はNLogを使用します。
出力する予定のログを仕様として決めておきますが、想定外動作で出力するログ(エラーログ)ついてはプログラム実装時に増えることもあります。
ログ | 種類 | 説明 |
---|---|---|
ソフト起動 | 情報 | サービスを開始した場合 |
ソフト終了 | 情報 | サービスを停止した場合 |
設定更新 | 情報 | アプリケーションより設定更新が行われ、設定を取得した場合 |
ファイル振り分け | 情報 | ファイル振り分けに成功した場合 ファイル名を添付する |
ファイル振り分けスキップ | 情報 | ファイルが既に存在しスキップした場合 ファイル名を添付する |
ファイル振り分け開始 | 情報 | 振り分けを開始した場合 |
ファイル振り分け停止 | 情報 | 振り分けを停止した場合 |
設定取得失敗 | エラー | 設定ファイルが破損してデータを取得できない場合 |
ファイル振り分け失敗 | エラー | ファイル振り分けに失敗した場合 ファイル名を添付する |
次に作成の動作仕様を決めます。
- サービスプロジェクトにてログを出力する
- サービスの実態(.exeファイル)と同フォルダに「log」というフォルダを作成し、その中に作成
- 1日単位でローテーションし、1週間(7日間)保持する
- ファイル形式は「yyyyMMdd」とする
- 情報とエラーを同じファイルに出力する
- 現在日時をログに付与する
配布について
作成したソフトウェアはインストーラを使用して配布することが一般的です。
組織(会社など)で作成・配布するインストーラでは「InstallShield」が有名ですが、お値段的に個人で購入するのは厳しいです。
昔はVisual Studioに「Visual Studio Installer」がありましたが今は削除されていました。
代わりに「Setup Project」なるもので作成できそうなため、こちらを使用することにしてみます。
まとめ
アプリケーション作成前には概要・仕様について細かく考えておくことが大事です。
ただし、個人で作成するアプリケーションの場合はこの段階で長引くとモチベーションが低下することにもなりますので、冒頭の通りある程度イメージがあれば進めてしまってもよいというのが持論です。