データフローダイアグラム(DFD)は、複雑な情報システムの理解、設計、文書化を担当するシステムアナリストにとって基盤となるツールです。データがシステム内でどのように移動するかを視覚的に表現し、プロセス、データ保管所、外部との相互作用を強調します。このガイドでは、特定の独自ツールに依存せずに正確で有用なDFDを構築するために必要な基本原則、記号、手法を概説します。

データフローダイアグラムとは何か? 📊
データフローダイアグラムは、情報システム内を流れているデータの流れを図式化したものです。制御フローと論理に注目するフローチャートとは異なり、DFDは入力から出力へのデータの変換に焦点を当てます。アナリストがシステムの機能要件を、より小さな管理可能な部分に分解することで把握するのを助けます。
DFDはタイミングや決定論理を詳細に示しません。代わりに、次のような重要な問いに答えることを目的としています:
- データはどこから来るのか?
- システム内部でデータはどのように扱われるのか?
- 処理後、データはどこへ行くのか?
- データはどこに保存されるのか?
これらの要素を視覚化することで、アナリストはコーディングを開始する前にボトルネックや重複するプロセス、セキュリティ上の脆弱性を特定できます。DFDで使用される記法は一般的にヨルドンとデマコの標準に従いますが、バリエーションも存在します。
なぜシステムアナリストがDFDを必要とするのか 💡
システムアナリストにとって、明確さは最も重要です。ステークホルダーはしばしば技術用語に苦戦しますが、視覚的な図表はビジネスニーズと技術的実装の間のギャップを埋めます。DFDは分析段階でいくつかの重要な役割を果たします:
- コミュニケーション: ビジネス関係者と技術チームの間の共通言語として機能します。
- 文書化: 将来の保守のためのシステム動作の永続的な記録を提供します。
- 分析: 初期の面談で見落とされたプロセスやデータ保管所を明らかにします。
- 検証: システムが定義された要件を満たしているかどうかを確認するのを助けます。
| 利点 | プロジェクトへの影響 |
|---|---|
| 要件の検証 | 範囲外の内容を確認することで、スコープクリープを軽減します。 |
| システム設計 | データベース設計とAPIアーキテクチャをガイドします。 |
| トレーニング | 新規チームメンバーがシステムの論理を素早く理解するのを支援します。 |
| デバッグ | データエラーの原因をその発生源までたどりやすくします。 |
コアコンポーネントと記号 🛠️
DFDの構成要素を理解することは、正確な図を描くために不可欠です。標準的なDFD表記では、4つの主要な要素が使用されます。
1. 外部エンティティ
外部エンティティは、システム境界外のデータの発生源または到着地を表します。これらはシステムとやり取りするユーザー、他のシステム、または組織を指します。図では、これらは通常、長方形または正方形で表現されます。
- 例:顧客、銀行、在庫システム。
- 注意:モデル化対象のシステムに含まれる内部ユーザーまたは部門は、外部エンティティとして含めないでください。
2. プロセス
プロセスは入力を出力に変換します。これらはシステムが実行する機能や動作を表します。DFDでは、プロセスは通常、円または角丸長方形で描かれます。各プロセスには少なくとも1つの入力と1つの出力が必要です。
- 例:税金計算、ユーザー検証、レポート生成。
- 注意:データ用語(例:「データを保存」)でプロセスの名前を付けないようにしてください。代わりに動作動詞を使用してください。
3. データストア
データストアは、後で使用するためにシステム内でデータが保持される場所を表します。これには特定の技術(例:SQLデータベースやExcelシート)を意味するものではなく、データの論理的な位置を指します。これらは通常、開口部のある長方形または平行線で描かれます。
- 例:顧客データベース、注文履歴、ファイルリポジトリ。
- 注意:データはストアに入り出ししますが、外部エンティティはデータストアに直接接続することはできません。
4. データフロー
データフローは、エンティティ、プロセス、ストア間でのデータの移動を示します。矢印で表現されます。矢印のラベルは、移動されているデータパケットの内容を表し、実行される動作を表すものではありません。
- 例:請求書、支払い詳細、ユーザー認証情報。
- 注意:矢印は単方向でなければなりません。データが双方向に移動する場合は、2つの別々の矢印を使用してください。
| 要素 | 形状 | 機能 |
|---|---|---|
| 外部エンティティ | 長方形 | システム外のデータの発信元または宛先 |
| プロセス | 円 / 角丸長方形 | データを変換する |
| データストア | 開かれた長方形 | 将来の使用のためにデータを保存する |
| データフロー | 矢印 | データの移動方向を示す |
DFDのレベル 📉
DFDは階層的である。高レベルの概要から始め、プロセスを段階的により詳細なサブプロセスに分解していく。この手法は分解と呼ばれる。
レベル0:コンテキスト図
コンテキスト図は、最も高い抽象度のレベルである。システムを単一のプロセス(通常は大きな円)として示し、それと相互作用するすべての外部エンティティを表す。システムの境界を定義する。
- 1つのプロセス: システム全体は1つのバブルで表される。
- 入力/出力: システムに入出力する主要なデータフローを示す。
- データストアなし: コンテキスト図は通常、内部のデータストアを表示しない。
レベル1:機能的分解
レベル1のDFDは、コンテキスト図の単一のプロセスを主要なサブプロセスに分解する。このレベルでは、細部に囚われることなく、システムの主要な機能を明らかにする。
- 主要プロセス: 読みやすさを保つために、通常5〜9つのプロセスである。
- データストア: 内部のリポジトリがここで導入される。
- 一貫性: 入力と出力はコンテキスト図と一致しなければならない。
レベル2:詳細な分解
レベル2のDFDは、レベル1から特定のプロセスを取り出し、さらに分解します。これは、より詳細な粒度を必要とする複雑な関数に使用されます。
- 注目点:特定のプロセスのみが分解され、他のプロセスはレベル1のバブルのままです。
- 詳細:特定のデータ変換および中間的なストアを示します。
DFDの作成:ステップバイステップガイド 📝
DFDを作成するには、正確性と一貫性を確保するための構造的なアプローチが必要です。堅牢な図を作成するには、以下のステップに従ってください。
ステップ1:システム境界を定義する
システムの内部と外部にあるものを特定します。これにより、外部エンティティと内部エンティティがどのようになるかが決まります。境界の外にあるすべてのものは外部エンティティです。
ステップ2:外部エンティティを特定する
あなたのシステムとやり取りするすべての人、部門、またはシステムをリストアップします。各エンティティに一意の名前を付けてください。「ユーザー」のような曖昧な名前は避け、具体的な役割である「管理者」や「ゲスト」を使用してください。
ステップ3:主要なデータフローをマッピングする
エンティティとシステムをつなぐ矢印を描きます。これらのフローに、転送されるデータ(例:「ログインリクエスト」、「売上レポート」)をラベル付けしてください。すべてのエンティティが少なくとも1つの接続を持つことを確認してください。
ステップ4:コアプロセスを定義する
システムを論理的な機能に分解します。各プロセスには動詞+名詞の形式(例:「注文処理」)で名前を付けます。すべてのプロセスが入力と出力を持つことを確認してください。
ステップ5:データストアを追加する
データを保存する必要がある場所を特定します。プロセスとデータストアを接続して、読み取りおよび書き込み操作を示します。データフローはプロセスからストアへ、またはストアからプロセスへ行くことができることを思い出してください。
ステップ6:レビューとバランス調整
親図と子図の間で入力と出力が一致しているか確認してください。これを「バランス調整」といいます。レベル1のプロセスに「顧客データ」という入力がある場合、子図も「顧客データ」を受け取らなければなりません。
検証ルールとベストプラクティス ✅
DFDが技術的に妥当で有用であることを保証するため、以下の検証ルールに従ってください。
- ゴーストフローなし:すべてのデータフローはプロセスまたはストアに接続されている必要があります。矢印を浮遊させないでください。
- ブラックホール:プロセスは入力がなければ出力を持つことはできません。データが入れば、何らかの処理が行われなければなりません。
- ミラクル:プロセスは出力がなければ入力を持つことはできません。すべての変換は結果を生み出さなければなりません。
- データストアの命名:データストアには複数形の名詞を使用してください(例:「注文」)、データフローには単数形の名詞を使用してください(例:「注文」)。
- プロセスの命名: 動詞を積極的に使う。処理の名前をその処理が扱うデータで命名しない(たとえば、「パスワード」ではなく「パスワードを検証する」を使う)。
- 一貫性: 図の異なるレベルにわたって同じデータフローは、同一のラベルで示されるようにする。
- 複雑さの制御: バブルが込みすぎている場合は、分解する。1つの図に5~9の処理を目標とする。
避けるべき一般的な誤り ⚠️
経験豊富なアナリストですらミスをする。一般的な誤りに気づいておくことで、レビュー会議の時間を節約できる。
- 制御とデータの混同: DFDはデータの流れを示すものであり、制御の流れではない。判断のダイアモンドやループを表示してはならない(データストアを表す場合を除く)。
- 外部エンティティとストアの直接接続: 外部エンティティはデータストアに直接書き込むことはできない。すべてのデータはまず処理を経由しなければならない。
- 技術的詳細の過剰: データベースのテーブルやファイル名を表示しない。論理的な構造にとどめる。物理的な構造は示さない。
- フィードバックループの欠落: 処理が前の出力からの入力を必要とする場合、その流れが正しく表現されていることを確認する。
- 命名の不一致: 同じデータに対して同義語を使わない(たとえば、「顧客」と「クライアント」)。1つの用語体系に従う。
論理的DFDと物理的DFD 🔄
アナリストは同じシステムに対して、2種類の図をしばしば作成する。その違いを理解することは、効果的なコミュニケーションに不可欠である。
| 特徴 | 論理的DFD | 物理的DFD |
|---|---|---|
| 焦点 | ビジネス要件とルール。 | 実装の詳細と技術。 |
| 処理名 | 一般的な動作(たとえば、「価格を計算する」)。 | 具体的な動作(たとえば、「税計算アルゴリズムV2を実行する」)。 |
| データストア | 論理的なコンテナ(たとえば、「在庫」)。 | 物理的なファイルやテーブル(例:「SQLテーブル INV」) |
| タイミング | タイミングや頻度を示さない。 | バッチ処理やリアルタイムのトリガーを示すことがある。 |
| ユースケース | 要件の収集と設計。 | システムアーキテクチャと開発。 |
DFDを他の図と区別する方法 📐
DFDを他のモデル化ツールと混同しやすい。ここではそれらの違いを説明する。
- DFD vs フローチャート:フローチャートは論理の流れ(if/else、ループ)を示す。DFDはデータの移動を示す。フローチャートは「次に何が起こるか?」に答える。DFDは「データはどこへ行くか?」に答える。
- DFD vs ERD:エンティティ関係図はデータ構造とエンティティ間の関係に注目する。DFDはそのデータの移動と変換に注目する。
- DFD vs ユースケース図:ユースケース図はユーザーのインタラクションと目的を示す。DFDはその目的を支える内部メカニズムを示す。
DFDの維持と更新 🔄
DFDは一度きりの納品物ではない。システムは進化するため、図もそれに合わせて進化しなければならない。定期的なメンテナンスにより、ドキュメントの正確性が保たれる。
- バージョン管理:変更を追跡する。図にバージョン番号や日付をラベル付けする。
- 変更要求:新しい機能を追加する際は、コーディングを開始する前にDFDを更新する。
- レビューのサイクル:ステークホルダーと定期的なレビューをスケジュールし、図が現在の運用と一致していることを確認する。
- 統合:DFDが要件仕様書やデータベーススキーマなどの他のアーティファクトと整合していることを確認する。
実践例:ECオーダーシステム 🛒
概念を説明するために、オンラインストアを例に挙げる。コンテキスト図では、「顧客」と「決済ゲートウェイ」を外部エンティティとして示す。
レベル1のDFDでは、システムプロセス「注文管理」が以下の部分に分割される:
- プロセス:「注文受付」
- プロセス:「在庫検証」
- プロセス:「支払い処理」
- プロセス:「商品の発送」
データフローには「注文詳細」、「在庫確認」、「確認」が含まれます。データストアには「製品カタログ」および「取引ログ」が含まれます。この分解により、カスタマージャーニーのすべてのステップが把握されます。
DFD習得のまとめ 🎯
効果的なデータフローダイアグラムを作成するには、忍耐力と細部への注意が必要です。これは練習を重ねるほど向上するスキルです。論理よりもデータの流れに注目することで、開発者やステークホルダーの両方にとって明確な地図を提供できます。複雑さではなく、明確さが目的であることを思い出してください。図をシンプルで一貫性を持たせ、ビジネスの現実に合わせてください。
システムアナリストとしての業務を進める中で、DFDを活用して隠れた要件を明らかにし、システム設計を簡素化してください。複雑な環境における情報フローを可視化するための信頼性の高いツールの一つとして、DFDは今もなおその役割を果たしています。











