de_DEen_USes_ESfa_IRfr_FRjapl_PLzh_CNzh_TW

DFD 完全ガイド:論理モデルと物理モデルの比較と Graphviz の使用例

1. データフロー図の概要

データフロー図(DFD)は、データが情報システム内をどのように移動するかを示す図形的表現です。以下を示します:

  • データの出所と宛先
  • データがどのように処理されるか
  • データがどこに保存されるか
  • システムと相互作用する人物、組織、またはシステム

論理データフロー図と物理データフロー図の違いを示す比較インフォグラフィック。


2. 主要な概念

基本要素

要素 記号 目的
外部エンティティ 長方形 データを送受信する人物、組織、またはシステム
プロセス 円/楕円 入力データを出力データに変換する
データストア 開いた長方形 永続的なデータ保存のためのリポジトリ
データフロー 矢印 データの移動方向を示す

DFD のレベル

  1. コンテキスト図(レベル 0): 最高レベルで、システムの境界と主要な外部エンティティを示す
  2. レベル 1: 主要なサブプロセスにメインプロセスを分解する
  3. レベル 2+: 詳細なプロセスを示すさらなる分解

3. 論理 DFD と物理 DFD

論理 DFD

ハードウェアやソフトウェアの制約に依存しないビジネスロジックとアクティビティを示す論理DFD図。

A 論理 DFD(「基本モデル」とも呼ばれる)は、次の点に焦点を当てます:

  • 何(WHAT)システムが何を行うか
  • 業務活動と情報要件
  • 実装技術に依存しない

特徴:

  • 業務操作とプロセスを示す
  • 技術固有の詳細は含まれない
  • より抽象的でユーザー中心
  • 業務要件の理解を支援する

物理 DFD

物理DFDのコンポーネント(ハードウェア、ソフトウェア、人、技術的制約)を示す図。

A 物理 DFD(「実装モデル」とも呼ばれる)は、次の点に焦点を当てます:

  • どのように(HOW)システムがどのように実装されるか
  • 技術詳細と制約
  • 特定の技術とシステム

特徴:

  • 実際のハードウェア、ソフトウェア、および人員を示す
  • 実装詳細を含む
  • より具体的で開発者中心
  • システム設計と展開を支援する

比較表

側面 論理的 DFD 物理的 DFD
焦点 ビジネス要件 実装
誰 ビジネスアナリスト、ユーザー システム設計者、開発者
レベル 高レベル、抽象的 詳細、具体的
コンポーネント ビジネスプロセス 技術プロセス
データストア 概念的エンティティ 物理ファイル/データベース
エンティティ ビジネスロール 実際のシステム/デバイス

4. DFD コンポーネント
データフロー図(DFD)記号 - EdrawMax

外部エンティティ

  • データのソースと宛先
  • システム境界の外側
  • 名詞で命名

プロセス

  • 入力を出力に変換する
  • 動詞+名詞で命名
  • 識別のために番号付け

データストア

  • 永続的なデータリポジトリ
  • 名詞で命名する
  • D1, D2, D3…という番号付け

データフロー

  • データの移動を示す
  • 説明的なラベルで命名する
  • 矢印の方向がフローを示す

5. Graphviz を用いた実働例

例 1: ホテル管理システム(論理 DFD)

ゲスト、スタッフ、データベース間のデータフローを示すホテル管理システムの論理DFD。

digraph HotelMIS_DFD_Logical {
    // --- GRAPH STYLE ---
    graph [
        rankdir = LR
        splines = true
        overlap = false
        nodesep = 0.6
        ranksep = 1.0
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
    ]

    // --- NODE STYLES ---
    node [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 11
        penwidth = 1.5
    ]

    // External Entities
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"] 
    Guest;
    Staff;

    // --- SYSTEM BOUNDARY ---
    subgraph cluster_SystemBoundary {
        label = "Hotel MIS System Boundary";
        fontname = "Helvetica,Arial,sans-serif";
        fontcolor = "#757575";
        fontsize = 14;
        color = "#757575";
        style = "dashed,rounded";
        bgcolor = "#FAFAFA";
        margin = 20;

        // Processes
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", fixedsize = true, width = 1.3]
        P1 [label="1.0nManagenReservations"];
        P2 [label="2.0nCheck-In/nOut"];
        P3 [label="3.0nManagenInventory"];

        // Data Stores
        node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D", fixedsize = false]
        ReservationsDS [label="{ <id> D1 | ReservationsnDatabase }"];
        RoomsDS        [label="{ <id> D2 | Room StatusnDatabase }"];
        InventoryDS    [label="{ <id> D3 | InventorynDatabase }"];
    }

    // --- EDGE STYLES ---
    edge [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 9
        color = "#555555"
        arrowsize = 0.8
    ]

    // --- DATA FLOWS ---
    
    // Guest Interactions
    Guest -> P1 [label="Booking Request"];
    P1 -> Guest [label="Confirmation"];

    Guest -> P2 [label="Arrival"];
    P2 -> Guest [label="Room Key/Receipt"];

    // Staff Interactions
    Staff -> P3 [label="Update Inventory"];
    P3 -> Staff [label="Alerts/Reports"];

    // Process to Data Store
    P1 -> ReservationsDS [label="New Reservation"];
    ReservationsDS -> P1 [label="Check Availability"];
    
    P1 -> RoomsDS [label="Room Details Request"];
    RoomsDS -> P1 [label="Available Rooms"];
    
    P2 -> RoomsDS [label="Room Status Update"];
    RoomsDS -> P2 [label="Room Information"];
    
    P2 -> P3 [label="Stay Details"];
    P3 -> InventoryDS [label="Stock Update"];
    InventoryDS -> P3 [label="Stock Levels"];
}

例 2: 論理 DFD – 図書館管理システム

プロセス、データストア、フローを示す図書館管理システムの論理DFD。

digraph LibrarySystem_Logical {
    // --- GRAPH STYLE ---
    graph [
        rankdir = TB
        splines = true
        nodesep = 0.5
        ranksep = 0.8
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
    ]

    // --- NODE STYLES ---
    node [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 11
        penwidth = 1.5
    ]

    // External Entities
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Member;
    Librarian;

    // --- SYSTEM BOUNDARY ---
    subgraph cluster_LibrarySystem {
        label = "Library System (Logical)";
        style = "dashed,rounded";
        color = "#757575";
        bgcolor = "#FAFAFA";
        margin = 20;

        // Processes
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", width = 1.4]
        P1 [label="1.0nManagenCatalog"];
        P2 [label="2.0nProcessnBorrowing"];
        P3 [label="3.0nHandlenReturns"];

        // Data Stores
        node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D"]
        CatalogDS [label="{ <id> D1 | BooknCatalog }"];
        TransactionsDS [label="{ <id> D2 | BorrowingnRecords }"];
        MemberDS [label="{ <id> D3 | MembernDatabase }"];
    }

    // --- EDGE STYLES ---
    edge [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 9
        color = "#555555"
        arrowsize = 0.8
    ]

    // --- DATA FLOWS ---
    
    // Member Interactions
    Member -> P1 [label="Search Books"];
    P1 -> Member [label="Search Results"];
    
    Member -> P2 [label="Borrow Request"];
    P2 -> Member [label="Borrow Confirmation"];
    
    Member -> P3 [label="Return Books"];
    P3 -> Member [label="Return Receipt"];

    // Librarian Interactions
    Librarian -> P1 [label="Add/Update Books"];
    P1 -> Librarian [label="Catalog Update Confirmation"];
    
    Librarian -> P3 [label="Process Overdue"];
    P3 -> Librarian [label="Overdue Report"];

    // Data Flows
    P1 -> CatalogDS [label="Book Updates"];
    CatalogDS -> P1 [label="Catalog Data"];
    
    P2 -> CatalogDS [label="Check Availability"];
    CatalogDS -> P2 [label="Book Status"];
    
    P2 -> MemberDS [label="Check Member Status"];
    MemberDS -> P2 [label="Member Info"];
    
    P2 -> TransactionsDS [label="Create Borrow Record"];
    TransactionsDS -> P2 [label="Borrowing History"];
    
    P3 -> TransactionsDS [label="Update Return"];
    TransactionsDS -> P3 [label="Borrow Records"];
    
    P3 -> MemberDS [label="Update Member Status"];
    MemberDS -> P3 [label="Member Info"];
}

例 3: 物理 DFD – 図書館管理システム

ウェブカタログ、貸出API、返却プロセッサのデータフローを示す図書館管理システムの物理DFD。

digraph LibrarySystem_Physical {
    // --- GRAPH STYLE ---
    graph [
        rankdir = TB
        splines = true
        nodesep = 0.5
        ranksep = 0.8
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
    ]

    // --- NODE STYLES ---
    node [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 11
        penwidth = 1.5
    ]

    // External Entities (Physical)
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    "Library Member" [label="LibrarynMember"];
    "Librarian" [label="LibrariannStaff"];
    "Email System" [label="EmailnSystem"];
    "Payment Gateway" [label="PaymentnGateway"];

    // --- SYSTEM BOUNDARY ---
    subgraph cluster_LibrarySystem_Physical {
        label = "Library Management System (Physical Implementation)";
        style = "dashed,rounded";
        color = "#757575";
        bgcolor = "#FAFAFA";
        margin = 20;

        // Physical Processes (with technology details)
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", width = 1.4]
        P1 [label="1.0nWeb Catalogn(HTML, JS)"];
        P2 [label="2.0nBorrowingnAPIn(Python/REST)"];
        P3 [label="3.0nReturnnProcessorn(Java)"];

        // Physical Data Stores (with technology details)
        node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D"]
        CatalogDS [label="{ <id> D1 | PostgreSQLnBook Catalog }"];
        TransactionsDS [label="{ <id> D2 | MongoDBnBorrow Records }"];
        MemberDS [label="{ <id> D3 | OraclenMember DB }"];
        
        // Additional physical components
        node [shape = box, style = "filled", fillcolor = "#F3E5F5", color = "#8E24AA"]
        "Cache Server" [label="RedisnCache"];
        "Message Queue" [label="RabbitMQnQueue"];
    }

    // --- EDGE STYLES ---
    edge [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 9
        color = "#555555"
        arrowsize = 0.8
    ]

    // --- DATA FLOWS (Physical) ---
    
    // Physical Member Interactions
    "Library Member" -> P1 [label="HTTP GETnBook Search"];
    P1 -> "Library Member" [label="HTML/JSONnResults"];
    
    "Library Member" -> P2 [label="REST APInBorrow Request"];
    P2 -> "Library Member" [label="JSONnConfirmation"];
    
    "Library Member" -> P3 [label="REST APInReturn"];
    P3 -> "Library Member" [label="JSONnReceipt"];

    // Physical Librarian Interactions
    "Librarian" -> P1 [label="HTTPSnCatalog Mgmt"];
    P1 -> "Librarian" [label="HTMLnConfirmation"];
    
    "Librarian" -> P3 [label="REST APInOverdue Process"];
    P3 -> "Librarian" [label="PDF Report"];

    // External System Interactions
    P2 -> "Email System" [label="SMTPnNotification"];
    P3 -> "Payment Gateway" [label="HTTPSnFine Payment"];

    // Data Flows (Physical)
    P1 -> CatalogDS [label="SQL UPDATE"];
    CatalogDS -> P1 [label="SQL SELECT"];
    
    P1 -> "Cache Server" [label="Cache Update"];
    "Cache Server" -> P1 [label="Cache Hit"];
    
    P2 -> CatalogDS [label="SQL SELECT"];
    CatalogDS -> P2 [label="SQL RESULT"];
    
    P2 -> MemberDS [label="SQL SELECT"];
    MemberDS -> P2 [label="SQL RESULT"];
    
    P2 -> TransactionsDS [label="INSERT"];
    TransactionsDS -> P2 [label="SELECT"];
    
    P2 -> "Message Queue" [label="PublishnBorrow Event"];
    
    P3 -> TransactionsDS [label="UPDATE"];
    TransactionsDS -> P3 [label="SELECT"];
    
    P3 -> MemberDS [label="UPDATE"];
    MemberDS -> P3 [label="SELECT"];
    
    P3 -> "Message Queue" [label="PublishnReturn Event"];
}

例4:Eコマース注文処理(論理的DFD)

顧客、サプライヤー、決済プロセッサ、および内部プロセス間のデータフローを示すEC注文処理の論理DFD。

digraph ECommerce_Logical {
    // --- グラフスタイル ---
    graph [
        rankdir = LR
        splines = true
        nodesep = 0.5
        ranksep = 0.8
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
    ]

    // --- ノードスタイル ---
    node [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 11
        penwidth = 1.5
    ]

    // 外部エンティティ
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Customer;
    Supplier;
    "Payment Processor" [label="PaymentnProcessor"];

    // --- システム境界 ---
    subgraph cluster_ECommerce {
        label = "Eコマースシステム(論理的)";
        style = "dashed,rounded";
        color = "#757575";
        bgcolor = "#FAFAFA";
        margin = 20;

        // プロセス
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", width = 1.4]
        P1 [label="1.0n注文n処理"];
        P2 [label="2.0n在庫n管理"];
        P3 [label="3.0n出荷n処理"];

        // データストア
        node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D"]
        OrderDS [label="{ <id> D1 | 注文 }"];
        InventoryDS [label="{ <id> D2 | 在庫 }"];
        ShipmentDS [label="{ <id> D3 | 出荷 }"];
    }

    // --- エッジスタイル ---
    edge [
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 9
        color = "#555555"
        arrowsize = 0.8
    ]

    // --- データフロー ---
    
    // 顧客とのやり取り
    Customer -> P1 [label="注文詳細"];
    P1 -> Customer [label="注文確認"];
    
    Customer -> P3 [label="注文追跡"];
    P3 -> Customer [label="追跡情報"];

    // 決済プロセッサ
    "Payment Processor" -> P1 [label="決済応答"];
    P1 -> "Payment Processor" [label="決済リクエスト"];

    // サプライヤー
    Supplier -> P2 [label="在庫更新"];
    P2 -> Supplier [label="再注文リクエスト"];

    // プロセスデータフロー
    P1 -> OrderDS [label="注文保存"];
    OrderDS -> P1 [label="注文履歴"];
    
    P1 -> InventoryDS [label="在庫確認"];
    InventoryDS -> P1 [label="在庫状況"];
    
    P1 -> P3 [label="出荷詳細"];
    
    P2 -> InventoryDS [label="在庫更新"];
    InventoryDS -> P2 [label="現在の在庫"];
    
    P3 -> OrderDS [label="ステータス更新"];
    OrderDS -> P3 [label="注文情報"];
    
    P3 -> ShipmentDS [label="出荷作成"];
    ShipmentDS -> P3 [label="出荷詳細"];
}


6. ベストプラクティス

論理的DFDの場合

  1. ビジネスプロセスに焦点を当てる技術ではなく
  2. ビジネス用語を使用するステークホルダーが理解できるもの
  3. プロセスを一定の抽象化レベルに保つ
  4. ビジネスユーザーで検証する正確性を確保するために
  5. 主要なデータフローをすべて示すコンポーネント間

物理的DFDの場合

  1. 技術固有の詳細を含める
  2. パフォーマンスとスケーラビリティを考慮する
  3. システムインターフェースを文書化する明確に
  4. エラー処理を含めるおよび復旧プロセス
  5. 実際のシステムアーキテクチャに合わせる

一般的なベストプラクティス

  1. コンテキスト図から始める
  2. プロセスを階層的に番号付けする
  3. 意味のある名前を使用するすべてのコンポーネントに対して
  4. データフローの交差を避ける
  5. 関係者と定期的に検証を行う

7. 一般的な落とし穴

DFDの7つの一般的な落とし穴

落とし穴1:論理と物理を混同する

❌ 誤り:論理 DFD にデータベース技術の名前を追加する
✅ 正解:論理 DFD は技術に依存しないままにする

落とし穴2:データフローの欠落

❌ 誤り:エンティティ間の一方方向のみを示す
✅ 正解:適切であれば双方向フローを含める

落とし穴3:複雑すぎる

❌ 誤り:1 つの図に20以上のプロセスを配置する
✅ 正解:複数の焦点を絞った図に分解する

落とし穴4:データフローの誤ったラベル付け

❌ 誤り:「データ」というラベル
✅ 正しい:「顧客注文の詳細」のような説明的なラベル

落とし穴5:プロセス境界の誤り

❌ 誤り:1つのプロセスが複数の無関係な機能を担当している
✅ 正しい:異なる機能ごとに分離されたプロセス


結論

データフロー図(DFD)は、システム分析と設計における不可欠なツールです。論理的DFDと物理的DFDの違いを理解することで、ソフトウェア開発ライフサイクルの異なる段階において、さまざまな関係者と効果的にコミュニケーションを取ることができます。

  • 論理的DFDビジネス要件と技術的解決策を橋渡しする
  • 物理的DFD実装と展開の決定を導く

提供された例を自身のDFDのテンプレートとして活用し、上記のベストプラクティスに従いつつ、特定のシステム要件に合わせて適応させてください。


追加リソース

  1. Visual ParadigmによるAI Gane-Sarson DFDジェネレーター: Visual ParadigmのAIツールが、テキスト記述からGane-Sarson DFDを生成する方法について説明します。
  2. Visual Paradigmを使用したデータフロー図の作成ステップバイステップガイド: Visual Paradigmのオンラインツールを使用してDFDを作成するためのチュートリアルを提供します。登録から共有までを網羅しています。
  3. データフロー図(DFD)の作成方法とは?: DFDとは何か、その目的、および主な種類(物理的および論理的)について解説するガイド。
  4. Visual Paradigm Onlineを使用したSSADM DFD図の初心者向けガイド: Visual Paradigm Onlineを使用してSSADMスタイルのデータフロー図を作成するための入門ガイド。
  5. データフロー図(DFD)の包括的ガイド:情報フローの解明: DFDの概要、その要素の詳細、およびVisual Paradigmがそれらの作成に適したツールである理由について。
  6. ビジュアルパラダイムを使ったデータフロー図の習得:ステップバイステップガイド: 例やテンプレートを使用してDFDの作成を教える実践的なガイドで、オンラインショッピングシステムなどのケーススタディを掲載しています。
  7. 論理DFDと物理DFDの違いを理解する:それらが必要となる時期と理由: 論理および物理データフロー図の違い、目的、および適切な使用例について説明します。
  8. ビジュアルパラダイムオンラインを使ったデータフロー図(DFD)初心者ガイド: ビジュアルパラダイムオンラインでDFDを作成する手順を詳しく解説する初心者向けチュートリアルです。
  9. DFDアーカイブ – ビジュアルパラダイムガイド: AIジェネレーター、検証、バランス調整、およびレベルなど、DFDに関するトピックの記事集です。
  10. ビジュアルパラダイムオンラインを使ったデータフロー図(DFD)入門ガイド: DFD作成のステップバイステッププロセス、主要なコンポーネント、およびテンプレートの使用方法について詳しく説明します。
  11. 最高のDFDツールでDFDを描く: データフローのグラフィック表現について議論し、論理DFDと物理DFDの詳細を解説し、各タイプの利点を探ります。
  12. ビジュアルパラダイムオンラインを使ったデータフロー図(DFD)初心者ガイド: インドネシア語で書かれたDFDの初心者ガイドで、コンポーネントとビジュアルパラダイムオンラインでの作成手順を概説しています。


このガイドは、効果的なDFDを作成するための基礎を提供します。優れた図は、反復と利害関係者からのフィードバックを通じて進化することを忘れないでください。