プログラム開発の現場では、いきなりコーディングに取り掛かるのではなく、「何を作るか」「どう動くべきか」をまとめた“仕様書”が重要な役割を果たします。
今回は、C#で「ファイルをバックアップし、1か月以上前の不要なファイルを自動で削除する」プログラムを題材に、プログラム前の仕様書作成の流れや、その後の開発までの一連の流れをわかりやすく解説します。これからプログラミングを学ぶ方や、業務での自動処理を考えている方の参考になれば幸いです。
プログラムの目的と背景を明確にする
まず、仕様書において最も大切なのは「目的を明確にすること」です。
今回のプログラムは以下の目的で作成します。
目的:
- 指定したフォルダ内のすべてのファイルをバックアップ先にコピーする
- バックアップ後、1か月以上経過した古いファイルを削除する
このような処理は、ログファイルや一時ファイルを扱うシステムのメンテナンスなどに活用されます。運用効率の向上やディスク容量の確保が主な目的です。
仕様書の構成と書き方
仕様書は、以下のような構成で作成します。
1. 機能概要
- 対象フォルダにあるファイルをバックアップフォルダへコピーする。
- コピー後、対象フォルダ内のうち「1か月以上前のファイル」を削除する。
2. 対象環境
- OS:Windows 10/11
- 開発言語:C#(.NET 6 または .NET Framework 4.8)
- 実行形式:コンソールアプリケーション
3. バックアップ・削除の処理条件
- 処理対象フォルダ:
C:\Data
- バックアップ先:
D:\Backup\Data
- 削除条件:作成日または更新日が「30日以上前」のファイル
4. エラーハンドリング
- フォルダが存在しない場合はログに記録し処理を終了
- コピーまたは削除が失敗した場合もログに出力
実装前に考えるべきポイント
実装に入る前に、以下のような点を確認しておくとスムーズに開発が進みます。
- パスの存在確認
- コピー対象のファイル一覧取得
- 日付によるフィルタリング(1か月以上前)
- エラーハンドリングやログ出力の設計
- テスト方法の検討
仕様書にこれらのポイントを盛り込んでおくことで、あとから機能変更があった場合にも影響範囲を把握しやすくなります。
C#によるサンプルプログラム
以下にC#のコンソールアプリケーションの簡単な実装例を示します。
using System;
using System.IO;
class Program
{
static void Main()
{
string sourcePath = @"C:\Data";
string backupPath = @"D:\Backup\Data";
if (!Directory.Exists(sourcePath))
{
Console.WriteLine("ソースフォルダが存在しません。");
return;
}
if (!Directory.Exists(backupPath))
{
Directory.CreateDirectory(backupPath);
}
string[] files = Directory.GetFiles(sourcePath);
foreach (string file in files)
{
try
{
string fileName = Path.GetFileName(file);
string destFile = Path.Combine(backupPath, fileName);
// バックアップコピー
File.Copy(file, destFile, true);
// 更新日が30日以上前のファイルは削除
DateTime lastWriteTime = File.GetLastWriteTime(file);
if (lastWriteTime < DateTime.Now.AddDays(-30))
{
File.Delete(file);
Console.WriteLine($"{fileName} を削除しました。");
}
else
{
Console.WriteLine($"{fileName} は削除対象外です。");
}
}
catch (Exception ex)
{
Console.WriteLine($"エラー:{ex.Message}");
}
}
Console.WriteLine("処理が完了しました。");
}
}
ログ出力や拡張性の設計
実際の業務用途では、以下のような拡張が求められる場合もあります。
- 処理ログをファイルに出力(例:
log.txt
) - サブフォルダも含めて再帰的に処理
- 設定ファイル(
appsettings.json
など)からパスや日数を読み込む
こうした拡張も、仕様書の段階である程度盛り込んでおくと、あとからの対応が格段に楽になります。
まとめ:仕様書があるとプログラムは迷わず進められる
今回のように、実装前に仕様書を作ることで、「何をするプログラムなのか」「どんな条件で動くのか」を明確にできます。
特に複数人で開発する場合や、後日改修する際には、仕様書の有無が作業効率を大きく左右します。
C#でのファイル操作は基本的な機能でありながらも、実務で使える自動化処理の第一歩になります。
ぜひ、仕様書の重要性とともに、C#でのシンプルなファイル操作をマスターしてください。