IT開発の現場では「要件定義書」と「仕様書」という2つの重要なドキュメントが登場します。両者は混同されがちですが、役割も作成タイミングも異なります。この記事では、C#で「ファイルのバックアップと不要ファイルの削除」を行う簡単なツールを題材に、要件定義と仕様書の違いを明確にしながら、それぞれどのように作成するべきかを解説します。実務にも応用できる内容ですので、ドキュメント作成の基礎を学びたい方、あるいは新人エンジニアの教育担当の方におすすめです。
要件定義とは?
要件定義は「何を実現するか」を決める工程です。ユーザーやクライアントの要望、業務上の課題をもとに、システムが持つべき機能や動作条件を言語化します。
今回のC#のツールで言えば、ユーザーは以下のような要望を持っていると仮定できます。
- 定期的に特定フォルダのファイルをバックアップしたい
- 古いファイルは自動で削除したい(1か月以上経過したもの)
- 操作はシンプルで、ダブルクリックで実行できるのが望ましい
このような要望をまとめ、関係者間で認識をすり合わせることが要件定義の目的です。要件定義はプロジェクトの「設計図の設計図」と言えるでしょう。
サンプルプロジェクトの要件定義書(例)
以下は今回のツールにおける簡易的な要件定義書の例です。
プロジェクト名:ファイルバックアップ&クリーンアップツール
目的:指定フォルダ内のファイルをバックアップし、1か月以上前のファイルを自動で削除することで、ディスク容量を節約する
利用者:社内スタッフ(エンジニア以外も想定)
実行方法:ツールをダブルクリックで起動(GUIは不要)
主な機能:
- 指定フォルダのファイルをバックアップフォルダへコピー
- 元のフォルダ内で、1か月以上更新されていないファイルを削除
実行条件:
- Windows 10以降
- .NET 6以降がインストールされていること
仕様書とは?
仕様書は「どうやって実現するか」を記述した技術的なドキュメントです。設計書や詳細設計書とも密接な関係にあり、プログラマがこの仕様書を見て実装できるようになっていることが理想です。
要件定義が「どこに向かうかの地図」なら、仕様書は「そのルートをどう進むかの説明書」と言えます。
サンプルプロジェクトの仕様書(抜粋)
ここでは、前述の要件に基づいて仕様書の一部を例示します。
機能①:バックアップ機能
- 対象:
C:\Users\xxx\Documents\SourceFolder
内のすべてのファイル - 処理内容:ファイルを
C:\Users\xxx\Documents\BackupFolder\YYYYMMDD
にコピー - ログ出力:
log.txt
に処理件数と日時を記録
機能②:古いファイルの削除
- 対象:
SourceFolder
内のファイル - 条件:現在日時から見て最終更新日時が31日以上前のファイル
- 処理内容:対象ファイルを削除し、ログに記録
実装言語:C# (.NET 6 Console Application)
実行方法:コマンドライン実行/タスクスケジューラでの自動実行に対応
実装例(C#コード)
要件定義と仕様書を元に、以下のようなC#コードが実装されます。
using System;
using System.IO;
class Program
{
static void Main()
{
string sourceDir = @"C:\Users\xxx\Documents\SourceFolder";
string backupDir = $@"C:\Users\xxx\Documents\BackupFolder\{DateTime.Now:yyyyMMdd}";
string logFile = @"C:\Users\xxx\Documents\log.txt";
Directory.CreateDirectory(backupDir);
using StreamWriter log = new StreamWriter(logFile, true);
log.WriteLine($"=== {DateTime.Now} ===");
// バックアップ処理
foreach (var filePath in Directory.GetFiles(sourceDir))
{
string fileName = Path.GetFileName(filePath);
string destPath = Path.Combine(backupDir, fileName);
File.Copy(filePath, destPath, true);
log.WriteLine($"Copied: {fileName}");
}
// 不要ファイル削除処理
foreach (var filePath in Directory.GetFiles(sourceDir))
{
var lastWrite = File.GetLastWriteTime(filePath);
if ((DateTime.Now - lastWrite).TotalDays > 30)
{
File.Delete(filePath);
log.WriteLine($"Deleted: {Path.GetFileName(filePath)}");
}
}
}
}
要件定義と仕様書の違いをまとめてみよう
比較項目 | 要件定義書 | 仕様書 |
---|---|---|
目的 | ユーザーの要望を整理・共有 | 実装方法を技術的に明示 |
書き手 | 要件定義者、SE、PM | システム設計者、開発者 |
読み手 | クライアント、ユーザー | 開発者、テスター |
書くタイミング | プロジェクト初期 | 要件定義後、設計段階で |
まとめ
要件定義と仕様書は似て非なるものであり、それぞれの役割を理解することがシステム開発の成功には欠かせません。今回のような小規模なC#ツールの開発でも、ドキュメントを整理することで認識のズレを防ぎ、効率的な開発が可能になります。特に、プログラムを書く前に「何を」「どうやって」実現するかを言語化しておくことは、後のトラブル防止にもつながります。
ぜひ、日々の開発業務でも「要件定義と仕様書」の意識を持って、実務に役立ててください。