情報がシステム内をどのように移動するかを明確な視覚的表現で示すことは、システム分析と設計の基盤です。データフローダイアグラム(DFD)はまさにこの目的を果たします。外部の情報源からシステム内へ、そして目的地へとデータが流れることをマッピングし、その過程で起こる変換を詳細に示します。
このガイドでは、DFDの構築メカニズムについて詳しく解説します。歴史的背景、基本的な記号、階層構造、そして特定の専用ツールに依存せずに機能する図を描くための実践的なステップを検討します。このチュートリアルの終了時には、線の背後にある論理を理解し、複雑なシステムを効果的に文書化できるようになります。

🧠 DFDの目的を理解する
1本の線を描く前に、DFDが実際に何を表しているかを理解することが不可欠です。フローチャートがプログラムの制御フローや論理を記述するのに対し、DFDはまったくデータに注目しています。データ.
- データに注目する: データの出所(ソース)と到着先(シンク)を示します。
- プロセスに注目する: データがどのように異なる形に変換されるかを示します。
- 保存に注目する: データが後で取り出すために保持される場所を示します。
DFDは、要件収集段階で特に有用です。ステークホルダーがシステムの境界を視覚的に把握し、すべての必要な入力と出力をカバーしているか確認するのに役立ちます。この視覚的コミュニケーションは、技術チームとビジネスユーザーの間のギャップを埋めます。
🛠️ コアとなる構成要素と表記法
すべてのデータフローダイアグラムは、特定の形状と線で構成されます。歴史的に使われてきた2つの主要な表記法(Yourdon & DeMarco と Gane & Sarson)がありますが、概念は一貫しています。以下に、あらゆるDFDに必要な4つの基本要素を説明します。
1. 外部エンティティ(終端)
これらはシステム境界外にあるデータの出所または到着先を表します。あなたのプロセスとやり取りする人、部門、または他のシステムです。
- 例:顧客、仕入先、銀行、政府機関。
- 視覚的表現:通常は長方形または人型のアイコンです。
- ルール: データストアやプロセスをシステム境界の外に配置しないでください。
2. プロセス
プロセスは、入力データフローを出力データフローに変換します。システム内で行われる作業、計算、または決定を表します。
- 例: 「税金を計算する」、「注文を検証する」、「レポートを生成する」。
- 視覚的表現: 円または角が丸い長方形。
- ルール:すべてのプロセスには、少なくとも1つの入力と1つの出力が必要である。
3. データストア
これらは、将来の使用のためにデータを保存するリポジトリである。データベース、ファイル、物理的なファイルボックス、または一時的なバッファである可能性がある。
- 例:顧客データベース、在庫ログ、注文履歴。
- 視覚的表現:開かれた長方形、または二本の平行線。
- ルール:プロセスはデータストアから読み取るか、書き込む必要がある。一つのストアから別のストアへ直接データを渡すことはできない。
4. データフロー
これらはデータが通る経路である。エンティティ、プロセス、ストア間のデータの移動を表す。
- 例:「注文詳細」、「支払い確認」、「在庫更新」。
- 視覚的表現:データ内容を説明するラベルが付いた矢印。
- ルール:矢印はすべてラベルを付ける必要がある。ラベルのない矢印は無効である。
| コンポーネント | 記号の形状(Yourdon & DeMarco) | 記号の形状(Gane & Sarson) | 機能 |
|---|---|---|---|
| 外部エンティティ | 長方形 | 角が丸い四角形 | 発信元または受信先 |
| プロセス | 円 | 角が丸い長方形 | データを変換する |
| データストア | 開かれた長方形 | 開かれた長方形(端が開いている) | データを格納する |
| データフロー | 矢印 | 矢印 | データを移動する |
📉 DFDにおける抽象度のレベル
複雑なシステムは1つの図で表現することはできません。複雑さを管理するために、DFDは地図をズームインするように、異なる詳細度で描かれます。この階層構造は分解と呼ばれます。
レベル0:コンテキスト図
これは最も高いレベルの視点です。システム全体を1つのプロセスとして、外部エンティティとの相互作用を示します。システムの境界を明確に定義します。
- プロセス数: 1(システム全体)
- 詳細度: 最小限。内部プロセスは表示されません。
- 用途: 範囲の定義と高レベルの合意形成。
レベル1:主要なサブプロセス
ここでは、コンテキスト図の単一のプロセスが主要なサブプロセスに分解されます。これがシステムの内部構造が現れ始める場所です。
- プロセス数: 読みやすさの観点から、3~7が理想的です。
- 詳細度: 主要な機能領域。
- 用途: 主要な機能モジュールの理解。
レベル2:詳細なサブプロセス
このレベルでは、特定のレベル1プロセスに詳細に焦点を当てます。さらに分解が必要な複雑な機能に使用されます。
- プロセス数: 親プロセスごとに異なります。
- 詳細レベル:関数内の具体的な手順。
- 使用法:実装のガイドラインと詳細な論理。
レベル3:原始図
システムが非常に複雑でない限り、ほとんど描かれない。これらは詳細度の最も低いレベルを表しており、特定のコードモジュールや手動手順に対応することが多い。
🚀 DFDの描き方のステップバイステップガイド
この構造的なアプローチに従って、プロジェクト用の信頼性の高いデータフローダイアグラムを作成してください。
ステップ1:システム境界を特定する
システムの内部と外部にあるものを定義する。外部のエンティティと内部のプロセスを判断するために重要である。システムプロセスを囲むボックスを描く。
ステップ2:外部エンティティを特定する
あなたのシステムとやり取りするすべての人、組織、または外部システムをリストアップする。境界ボックスの外に配置し、明確にラベルを付ける。
ステップ3:コンテキスト図(レベル0)を描く
中心に1つの円を描き、システム全体を表す。外部エンティティを矢印でこの円に接続する。交換されるデータ(例:「注文リクエスト」、「請求書送信」)を矢印にラベル付ける。
ステップ4:レベル1に分解する
1つの円を複数のプロセスに展開する。問う:「このシステムの主な機能は何ですか?」。
- 入力データを特定する。
- 出力データを特定する。
- 必要なデータストアを特定する。
- エンティティ、プロセス、ストアをつなぐ矢印を描く。
ステップ5:バランスルールを適用する
これは最も重要な技術的ルールである。親プロセスの入力と出力は、その子図の入力と出力と一致しなければならない。
- レベル0のプロセスに「顧客ID」の入力がある場合、レベル1の子プロセスも「顧客ID」が流入または流出する必要がある。
- レベル1のプロセスが「レポートデータ」を出力する場合、レベル0の親プロセスも外部エンティティに「レポートデータ」を出力しなければならない。
ステップ6:レビューと検証
要件に基づいて図を確認する。
- すべての矢印にラベルが付いているか?
- すべてのプロセスに入力と出力があるか?
- すべてのエンティティからストアまたはプロセスへの経路があるか?
- 「スパゲッティ線」(不必要な交差)は存在しないか?
🏪 例題シナリオ:オンラインストアシステム
概念を説明するために、簡略化されたオンラインストアのシナリオを順を追って説明します。
コンテキスト図(レベル0)
- エンティティ: カスタマー。
- エンティティ: 支払いゲートウェイ。
- エンティティ: 仓库。
- プロセス: オンラインストアシステム。
- フロー:
- カスタマー ➔ システム:注文詳細
- システム ➔ カスタマー:注文確認
- システム ➔ 支払いゲートウェイ:支払い情報
- 支払いゲートウェイ ➔ システム:支払い状況
- システム ➔ 仓库:出荷依頼
レベル1の分解
「オンラインストアシステム」を3つの主要プロセスに分解します:
- 注文管理: 注文詳細を受け取り、在庫を確認する。
- 支払い処理: クレジットカード情報を取り扱い、資金の有効性を検証する。
- 商品の発送: 仓库と連携する。
データストア
2つのデータストアを導入します:
- 注文データベース: 注文履歴と状態を格納する。
- 在庫データベース: 現在の在庫レベルを保存します。
このレベル1の図では、「注文の管理」は注文データベースに書き込みます。「支払いの処理」はカードの請求を行う前に注文が存在するかを確認するために注文データベースから読み取ります。「商品の発送」は配送リクエストを送信する前に在庫データベースから商品の在庫状況を確認するために読み取ります。
⚠️ 一般的な誤りと落とし穴
経験豊富なアナリストですらDFDを作成する際に誤りを犯すことがあります。図が有効かつ有用なまま保つために、これらの一般的な落とし穴を避けてください。
- 制御フロー:データを含んでいない限り、制御信号(例:「ボタンをクリック」、「エラーメッセージ」)を表す矢印を描かないでください。DFDは制御論理ではなくデータの流れを追跡します。
- ストア間直接フロー:データは1つのデータストアから別のデータストアへ直接移動することはできません。まずプロセスを経由しなければなりません。これにより変換または検証が行われることを保証します。
- ラベルのない矢印:ラベルのない矢印は情報を持ちません。常に矢印を通るデータの名前を付けるようにしてください。
- 幽霊プロセス:入力も出力も持たないプロセスは無意味です。すべてのバブルは何かを変換しなければなりません。
- 過剰な複雑化:レベル1の図に7~9個以上のプロセスがある場合は、詳細が多すぎる可能性があります。論理的な機能領域に分割してください。
- ブラックホールを無視する:入力のみで出力がないプロセスは「ブラックホール」と呼ばれます。データを消費するが、何の出力も生成しません。
- 奇跡を無視する:出力のみで入力がないプロセスは「奇跡」と呼ばれます。何もないところからデータを生成します。
📝 ドキュメント作成のベストプラクティス
図を作成することは作業の半分にすぎません。ドキュメント化と保守作業により、DFDが長期間にわたり価値を持続させることができます。
一貫した命名規則
プロセスとフローの命名には標準的なフォーマットを使用してください。
- プロセス:動詞+名詞の形式を使用してください(例:「ユーザーの検証」、「レポートの生成」)。
- フロー:名詞形式を使用してください(例:「ユーザー認証情報」、「売上レポート」)。
- ストア:複数形の名詞を使用してください(例:「顧客記録」、「製品リスト」)。
色分け
色を使用して、異なる種類のコンポーネントや異なる抽象度のレベルを区別してください。
- 青は外部エンティティを表します。
- 緑はプロセスを表します。
- オレンジはデータストアを表します。
- 赤は重要なデータフローを表します。
バージョン管理
システム要件が変更されます。あなたのDFDはこれらの変更を反映しなければなりません。
- 図にバージョン番号を割り当ててください(v1.0、v1.1など)。
- 何が追加、削除、または変更されたかを記録する変更ログを維持してください。
- 古いバージョンをアーカイブして監査証跡を維持してください。
🔗 他の手法との統合
DFDは孤立して存在するものではありません。多くの場合、より大きな構造化分析フレームワークの一部です。
エンティティ関係図(ERD)
DFDはデータの流れを示す一方で、ERDはデータの構造を示します。DFDでデータストアを特定すると、それらのテーブルをERDを使って設計する必要があります。DFDはどのデータが必要かを教えてくれます。ERDはそのデータがどのように構造化されているかを教えてくれます。
構造化英語
DFD内の複雑なプロセスに対しては、単純な図だけでは不十分な場合があります。構造化英語は、自然言語とプログラミング論理を組み合わせたもので、プロセスバブル内の論理を記述するために使用されます。
データ辞書
すべてのデータフロー、ストア、エンティティはデータ辞書で定義されるべきです。この文書は、データ型、サイズ、フォーマット(例:「顧客ID:整数、10桁」)などを含む図のメタデータを提供します。
🛠️ ツールとソフトウェアの選定
DFDを作成するには高価なソフトウェアは必要ありません。重要なのは論理であり、見た目ではありません。
- ホワイトボードとマーカー:ステークホルダーとのブレインストーミングや初期ドラフトに最適です。
- 紙と鉛筆:ソフトウェアの制約なしに、コンセプトを素早く反復する最速の方法です。
- 一般的な図面作成ツール:任意のベクターグラフィックツールを使用して、クリーンなデジタル図を描くことができます。
- 専用分析ツール:システム分析用に専用のツールは多数あります。標準的なDFD表記をサポートし、バージョン管理が可能なものを選んでください。
どのツールを使用しても、図を標準フォーマットでエクスポートでき、チームと共有できるようにしてください。
🔄 メンテナンスとライフサイクル
DFDは動的な文書です。システムが進化するとき、図も進化しなければなりません。
- 変更要求:新しい機能が要求された場合、影響を把握するためにレベル1の図を更新する。
- 影響分析:プロセスが変更された場合、その出力に依存している他のプロセスを確認する。それらの図も更新する。
- コードレビュー:開発者は実装中にDFDを参照し、コードがデータフローの論理と一致していることを確認するべきである。
- テスト:テストケースはデータフローから導き出すことができる。フローが存在する場合、その経路におけるデータ整合性を検証するテストが必須である。
📚 主な原則の要約
効果的なデータフロー図を作成するための重要なポイントをまとめると:
- シンプルから始める:スコープを定義するために、コンテキスト図(レベル0)から始める。
- 段階的に分解する:必要がある場合にのみ、レベル0からレベル1、レベル2へと段階的に進む。
- 厳密にバランスを取る:親レベルと子レベルの入力と出力が一致していることを確認する。
- すべてにラベルを付ける:ラベルのない矢印やプロセスは許されない。
- データに注目する:制御論理は無視し、データの移動のみを追跡する。
- ステークホルダーと検証する:ビジネスユーザーと図をレビューし、正確性を確認する。
これらの原則に従うことで、開発者、テスト担当者、ビジネスアナリストにとって信頼できるマップとなる文書資産を作成できます。図の明確さは、システム開発ライフサイクルの効率性と直接的に関連します。
🏁 最後に
データフロー図の技術を習得するには、練習とシステム思考に対する厳格なアプローチが必要です。単に図を描くことではなく、組織内の情報のライフサイクルを理解することです。データの出所から最終的な到着地点までを追跡できるようになったとき、初めてシステムを真正に理解したと言えるでしょう。
このチュートリアルを基盤としてください。現実のシナリオで練習し、自分の図に共通するミスがないか検証し、常に複雑さよりも明確さを優先してください。丁寧に描かれたDFDは、堅牢で信頼性の高いソフトウェアシステムを構築するための静かなパートナーです。











