業務用のコンソールアプリ作成時のチェックリスト的なもの
1、ログ処理:log4net
①ログ出力単位を決める
- どこまでログに吐き出すか
- INFO、エラー、SQLクエリー
- SQLクエリーをログに出力する場合、全てのSQLクエリーを出力するか、INSERT/UPDATEだけ出力するか
②メール送信
- エラーログの場合、メール送信をするかどうか
- 処理の中にメール送信が必要かどうか
2、コンソールアプリの実行結果
実行結果区分は基本的に下記3種類+@
- OK:正常終了
- NG:異常終了(エラー発生)
- SKIP:処理スルー(対象データがないため、処理せず終了など)
実行が完了したあとは、上記のいずれかの結果フラグと詳細を現すメッセージを返すようにする(ログ/メール)
NGの場合は例外の詳細(StackTraceや例外のメッセージなど)。SKIPの場合はその理由を必ず返すようにする。
3、DBトランザクション処理
- 全ての処理が正常に終了してない場合はロールバックするようにする
- 複数のクエリーの組み合わせの場合、コミット&ロールバック処理の範囲指定に気をつけて、トランザクション処理漏れが発生しないようにする
- 必要によっては検証実行の場合、必ずロールバックさせるように設定するとか※「4、デバッグ実行」
4、デバッグ実行
この記事での「デバッグ実行」とは、データやファイルの変更&関係者へのメール送信などを行わずに全ての処理を行い、動作検証を行うことを意味する。実際にアプリを実行したとき、デバッグ実行による影響が発生しないことが前提となる。
①デバッグ実行時の動作予測
- DBは必ずロールバックして、データの変更を防ぐ(デバッグ実行でデータ更新は行わない)
- ファイルの出力機能がある場合、出力しないか、吐き出し先を変えるか
- メール送信の場合、送信しないか、宛先を変えて送信するか
②デバッグ実行の判断基準
- *.batファイル内の引数で判断するか
- DBの実行マスターの値で判断するか
- app.configの値で判断するか
5、実行環境の確認
①タスクスケジューラ設定
- 実行頻度は?1日に1回?5分おきで頻繁に実行?
- 実行時に必要な引数は?
- 複数の処理を順に実行したい場合、条件などは必要か?
②外部環境の影響確認
- コンソールアプリがDBや外部サーバーにアクセスを行う場合、タスク実行時に使うユーザーアカウントにアクセス権限があるか確認する。権限がない場合、アクセスエラーになるので気をつける
- SMTPサーバーやAPIなど、外部ドメインにアクセスする場合もタスク実行サーバーからアクセス可能かを確認
既存のシステムの雛形をそのまま使って開発する場合は気にもしなさそうな内容だけど、ゼロからプロジェクトを作成してコンソールアプリを開発する場合、上記内容を実装しているかをチェックするためのメモ。
土台が出来上がってるところにロジックを足したり、パクって作るのは誰でもできるけど、0からアプリを作るのはいつも簡単ではないので…
思い出したその都度追加する。