DFD(データフロー図)は、「データがどこから来て、どこへ流れ、どの処理で形を変え、どこに保存されるのか」を、図で整理するための設計ツールです。とくに、依頼側(業務側)と開発側(設計・実装側)の認識合わせに強く、システムの全体像を共有しながら、機能の漏れ・重複・前提のズレを早い段階であぶり出すのに役立ちます。
DFDが扱うのは、画面レイアウトやクラス設計といった「作り込みの詳細」ではなく、処理の単位(プロセス)とデータの流れ(データフロー)、データの保管(データストア)、外部とのやり取り(外部エンティティ)です。つまり、仕様の骨格を「データ中心」に捉え直すことで、システムを理解しやすくします。
この記事では、DFDの基本概念、記号の読み方、作成の手順とルール、レイヤリング(階層化)の考え方、データディクショナリやプロセス詳細化ドキュメントとの関係まで、実務で迷いやすいポイントを補強しながら解説します。
DFD(Data Flow Diagram)は、システム内のデータの移動と、移動の途中で行われる処理、処理結果の保存、および外部との入出力を表す図です。
主要な要素は次の4つです。
DFDは、構造化分析の代表的な成果物として広く知られ、記法としてはデマルコ(DeMarco)式やゲイン・サーソン(Gane-Sarson)式などが用いられます。どちらを選ぶ場合でも、目的は共通で、「関係者が同じ理解を持てること」が最優先です。
DFDの目的は、システムのデータの流れを明確にし、設計者・利用者・開発者が“何が起きるか”を同じ地図で語れる状態を作ることです。仕様検討の初期ほど効果が大きく、以下のような場面で活用されます。
事前にDFDで合意を取っておくと、「そのデータはどこで作られる?」「その更新は誰が責任を持つ?」といった論点が前倒しで整理でき、後工程の手戻りを減らせます。
DFDは1970年代に、情報システムの複雑化に対応するための手法として発展しました。構造化分析・構造化設計の文脈で、トム・デマルコやエドワード・ヨードンらによって整理され、実務で使いやすい記法として広まりました。
現在では、UMLなど別のモデリング手法が主流の現場もありますが、DFDは「データ中心で全体像を短時間で共有できる」という強みから、要件の初期整理や現状分析の場面で今も有効です。
DFDはデータの流れを主役に据えた図です。似た図としてUMLやER図がありますが、焦点が異なります。
実務では、DFDで全体の流れを合意 → ER図でデータ構造を確定 → UMLで実装設計を詰めるのように、目的に応じて組み合わせると迷いが減ります。
DFDには「データフロー」「プロセス」「データストア」「外部エンティティ(外部実体)」という4要素があります。ここを押さえるだけで、DFDの読み書きはかなり安定します。
データフローは、システム内で移動するデータの流れを表します。一般に矢印で描き、矢印の向きがデータの移動方向です。
実務上のコツ:データフローには、できるだけ名詞(例:注文情報、認証要求、更新結果)で名前を付けます。曖昧な「データ」「情報」だけだと、後で読み返したときに意思疎通が崩れがちです。
プロセスは、入力データを受け取り、何らかの処理を行って出力データへ変換する箱です。丸や角丸などで表現されます。
プロセスの命名:「〜する」「〜を更新する」「〜を照合する」などの動詞句で書くと、役割が明確になります(例:注文を登録する、ユーザーを認証する)。
注意点:プロセスには原則として入力と出力の両方が必要です。入力だけのプロセスは「ブラックホール」、出力だけのプロセスは「ミラクル(魔法)」と呼ばれ、仕様の欠落を疑うサインになります。
データストアは、データが保存される場所(DB、ファイル、台帳、ログ、メッセージキューなど)を表します。一般には二本線などで描きます。
ポイント:データストアは「保管庫」なので、原則としてプロセスを介して読み書きします。つまり、データストア→データストアや外部エンティティ→データストアの直結は避け、間にプロセスを置いて「誰が何の目的で更新するのか」を明確にします。
外部エンティティは、システム外部の人・組織・他システムを表します。外部から入力される場合はソース、外部へ出力する場合はシンク(吸収)として扱います。
外部エンティティを置くと、「システムの境界」がはっきりします。どこまでが自システムの責務で、どこからが外部の責務なのかを図の時点で合意できるため、後のトラブル(責任範囲の曖昧さ)を減らせます。
DFDは「描けば終わり」ではなく、ルールに沿って描くほど、レビューで不整合を見つけやすくなるのが強みです。ここでは、作成の流れと、実務で頻出するルール・ミスをまとめます。
最初に押さえるべきは、4要素の役割と、図のスコープ(システム境界)です。加えて、詳細化が進むほど重要になるのがデータディクショナリ(データ定義書)です。
DFDは「線と箱」で流れを示しますが、線に書かれた「注文情報」とは具体的に何か、どの項目が含まれるのか、といった情報は図だけでは足りません。そこでデータディクショナリを併用し、言葉のズレを減らします。
どちらも目的は同じで、記号の形が主な違いです。重要なのは「方式の優劣」ではなく、プロジェクト内で混在させないことと、関係者が読める形にすることです。
迷ったら、まずはトップダウンで進めるのが安定です。
補強ポイント:分解したら必ずバランス(整合)を確認します。上位レベルで出入りしていたデータフローが、下位レベルで突然消えたり増えたりすると、仕様の欠落や過剰設計が起きます。
DFDのミスは「図としての描き間違い」と「設計としての欠落」の両方が起きます。頻出パターンを押さえておくと、レビューが速くなります。
回避策としては、(1) 命名ルール(名詞/動詞)を決める、(2) 上位・下位でバランス確認をする、(3) 第三者レビューを入れる、の3つが効果的です。
DFDの強みは、階層化(レイヤリング)で複雑さを制御できる点です。一枚に詰め込みすぎず、理解の単位に分けることで、関係者が「今どの粒度の話をしているか」を揃えられます。
コンテキスト図は、システム全体を1つのプロセスとして扱い、外部エンティティとの入出力だけを描く最上位の図です。ここでのゴールは、境界(スコープ)を確定することです。
「どこまでを自システムでやり、どこからが外部か」が曖昧だと、後で要件が膨らみます。まずはコンテキスト図で合意してから詳細に進むと、ブレにくくなります。
大規模なシステムは、全体像だけでは理解しきれません。レイヤリングにより、一度に見る範囲を限定し、プロセス・データフロー・データストアを「説明可能な単位」に分けます。
レイヤリングは、理解だけでなく、設計・改修の効率にも効きます。たとえば改修案件では、該当プロセスがどのレベルにあり、どのデータストアに影響するかが追いやすくなります。
レイヤリングの基本は「分解(decomposition)」です。分解の粒度はプロジェクトにより異なりますが、目安としては次のように考えると安定します。
分解したら、上位レベルと下位レベルの入出力の整合(バランス)を必ず確認します。
DFDは「流れ」、データディクショナリは「中身」を担当します。両者をセットで運用すると、“同じ単語を使っているのに指しているものが違う”という典型的な事故を減らせます。
データディクショナリは、システム内のデータに関する情報を集約した定義書(リポジトリ)です。代表的には次のような情報を持ちます。
データディクショナリは、DFDのデータフロー名・データストア名と対応づけて使うと効果的です。たとえば「顧客情報」というフローが出てきたら、その構成(顧客ID、氏名、契約状態など)を定義書で参照できるようにします。
また、改修案件では「どの項目がどのプロセスに影響するか」を追跡するのに役立ちます。結果として、テスト観点の漏れや、想定外の副作用を減らせます。
DFDの各要素(フロー/ストア/プロセス)が、データディクショナリやミニ仕様書に参照される状態が理想です。図だけ・文書だけに偏ると、どちらかが更新されずにズレが生まれます。
DFDは抽象度が高い分、プロセスの中身は別ドキュメントで補うのが定石です。ここでは代表的な2つのツール、ミニ仕様書とデシジョンテーブルを紹介します。
ミニ仕様書は、DFD上の「1プロセス」に対して、処理内容を文章で補足する文書です。最低限、次の観点があると“実装に落ちる仕様”に近づきます。
デシジョンテーブルは、条件が多い判断ロジックを整理する表です。とくに「条件の組み合わせ」で結果が変わる処理(割引、権限、状態遷移など)で効果を発揮します。
条件を列、アクション(結果)を行として整理することで、抜け(未定義の組み合わせ)や矛盾(同じ条件で結果が複数)が見つけやすくなります。
ミニ仕様書が「処理の説明書」だとすると、デシジョンテーブルは「判断のルール表」です。両方を組み合わせると、文章の曖昧さを減らし、レビューも実装も進めやすくなります。
詳細化では、情報を盛りすぎないことも重要です。目安としては、プロセスを読んだ人が“入出力と判断基準”を再現できるくらいまで書けば十分です。細部(UI、例外の全パターン)は、必要に応じて別資料へ切り出します。
フローチャートは「処理手順(制御の流れ)」を中心に描きます。一方DFDは「データの流れと変換」を中心に描くため、入力・出力・保存・外部連携の全体像を短時間で共有しやすいのが特徴です。
不要とは限りません。ER図はデータ構造、UMLは振る舞いや実装寄りの設計に強みがあります。DFDは要件初期の「データの入出力・責務・境界」を合意するのに向き、併用すると手戻りが減るケースが多いです。
コンテキスト図(最上位)→レベル0→レベル1…のトップダウンが安定です。分解したら、上位と下位で入出力が一致しているか(バランス)を必ず確認してください。
1プロセスが1〜2文で説明できない、入出力が多すぎて線が交差する、責務や担当が異なる処理が同居している、といった場合は分解の目安です。分解後は必ずバランス確認を行いましょう。
入力だけで出力がない(ブラックホール)、出力だけで入力がない(ミラクル)、外部エンティティとデータストアを直結する、命名が「データ」「情報」だらけで曖昧、などが頻出です。命名ルールとレビューで防ぎやすくなります。
専用ツールでなくても、図形が描けるツール(一般的な作図ツールやホワイトボードツール)で作成できます。重要なのはツールよりも、記法を混在させず、命名とバランス確認を徹底できる運用です。