フローチャートの作り方

## はじめに
プログラムを開発するうえで、設計書はとても重要です。特に、処理の流れを整理するために図を作ることは、最初の大事なステップだと思います。ですが、図の作り方を体系的に学ぶ機会は意外と少なく、「どんな種類があって、どんなルールで描けばいいの？」と迷うこともあるのではないでしょうか？そこで、フローチャートを中心に、関連する図の種類や作り方を整理してみました。


## 1 フローチャート（Flowchart）
フローチャートは、プロセスやアルゴリズムの流れを視覚的に表現する図のことです。主に業務プロセスやプログラムの処理手順をわかりやすく説明するために使用されます。複雑な処理も簡潔に表現することができ視覚的に理解しやすいです。そのため、エラーや無駄な処理を見つけやすく、チーム内での情報共有にも役立ちます。

**1.1 プロセスフローチャート**
プロセスフローチャートは、業務プロセスや作業手順を視覚的に表現するためのフローチャートです。企業の業務改善や業務効率化のために活用され、特に 製造業、サービス業、プロジェクト管理 などの分野で使用する。

**1.2 アルゴリズムフローチャート**
アルゴリズムフローチャートは、プログラムの処理手順（アルゴリズム）を図式化したもの。ソフトウェア開発の設計段階で利用され、プログラムのロジックを明確にするときに使用する。

|項目|プロセスフローチャート|アルゴリズムフローチャート|
|------|------|------|
|対象|業務プロセス・手順|プログラムの処理|
|目的|業務の流れを整理・可視化|アルゴリズムの設計|
|使用|製造業、サービス業、企業業務|ソフトウェア開発、プログラミング学習|


## 2. フローチャートの基本記号
フローチャートの作成では、いくつかの標準的な記号があり、それを組み合わせて作成します。

| 記号 | 名称 | 説明 |
|------|------|------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577213/a726a52b-727a-4dbb-8427-341cdb3432f5.png" width="100"> | 端子（開始・終了） | プロセスの開始・終了を示す |
| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577213/6c0d08d2-9bf7-45ee-aaa2-4f3fb54a6d6b.png"width="100"> | 処理 | 計算やデータの処理を示す |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577213/35626458-19bc-4a3b-b928-0f85f2e8478d.png" width="100"> | 条件分岐（判断）| 二つ以上の分岐を示す |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577213/264dbe7d-4044-4bd5-8ea6-6fb94ecce0fc.png" width="100">|入力/出力|入力の指示、出力の表示を示す|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577213/dff33f0d-1d97-4c3a-b8c1-2e86b092b6dd.png" width="100"> | ループ端（Loop limit） | ループ（繰返し）の開始と終了を示す |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577213/1bff635d-1617-487c-ab94-579c0275b219.png" width="100"> | 矢印（フロー） | データや処理の流れを示す |


## 3. フローチャートの書き方
- まず、フローチャートを作成する目的を明確にし、対象となるプロセスを洗い出す
- 次に、フローチャートに含める主要なステップをリストアップし、処理の流れを整理する。標準的な記号を使い、矢印を用いて処理の順番を明確にしながら図を作成。配置は上から下、左から右が基本であり、線が重ならないように気を付けてる。条件分岐（判断）は適切に配置し、どのような条件でどの処理へ進むのかを明確にする
- 最後に、作成したフローチャートを確認し、無駄なステップがないか、記号の間隔が均一で見やすくなっているかをチェックします

#### フローチャートの基本的な処理
フローチャートには「順次」「選択」「繰返し」の3つの基本的な処理がある。

**3.1. 順次（シーケンス）処理**
すべての処理が上から順番に実行される流れのこと。
例：「データを入力する」→「計算する」→「結果を表示する」

**3.2. 選択（条件分岐）処理**
特定の条件によって処理の流れが分岐する流れのこと。
例：「もしAがBより大きければ X を実行する、それ以外は Y を実行する」

**3.3. 繰返し（ループ）処理**
条件を満たす間、同じ処理を繰り返す流れのこと。
例：「変数 i が 10 になるまで処理を繰り返す」


## 4. フローチャート作成ツール
フローチャートを作成するためのツールはいろいろあるので、効率的に図を作成できます。専用のツールだけでなく、パワポやExcelでも作成できるのであまりこだわりすぎないように注意。

- **draw.io**：無料で利用できるオンラインツール。VSCodeの拡張機能もある
- **Visio**（Microsoftの有料ツール）
- **Lucidchart**（クラウドベースの作成ツール）
- **PlantUML**（テキストベースでフローチャートを記述可能）


## 5. フローチャートと他の図の使い分け
フローチャートと似た概念の図はいくつか存在します。それぞれに特徴があり、適切に使い分けることが重要です。参考としてフローチャートとの使い分けも載せています。図によって示す解像度（詳細度）や目的が異なるため、状況に応じた作図を心掛けましょう。

本記事では、5.1から5.6にかけて、全体的なフローから徐々に詳細なフローで使うグラフへと展開する順序で説明します。

### 5.1 スキーム（Scheme）
スキームとは、一般的には計画や仕組み、戦略を指す言葉です。IT分野だけでなく、ビジネスや政治の分野でも広く使われます。具体的な文脈によって意味が異なるが、データベースに関連する時は**スキーマ**と類似した「システムの設計や構成」「データの構造」など全体的な計画や枠組みという意味で使われる。

**使い分け**
- 処理手順やプロセスの詳細な流れを示す → **フローチャート**
- 仕組みや計画、方式に関するもの → **スキーム**

### 5.2 ロードマップ（Roadmap）
ロードマップは、プロジェクトや製品の開発計画を時系列で示したものです。短期・中期・長期の目標を明確にし、進捗を管理するのに役立ちます。

**使い分け**
- 処理手順やプロセスの詳細な流れを示す → **フローチャート**
- 長期的な計画や戦略を示す → **ロードマップ**

### 5.3 データフロー図（Data Flow Diagram: DFD）
データフロー図（DFD）は、システム内でデータがどのように流れ、処理されるかを視覚的に表現する図です。データフロー図は、プロセス（処理）、データストア（保存）、外部エンティティ（外部とのやりとり）、データフロー（データの移動）の4つの要素で構成されます。なお、データの流れとは、データがどこで生成・入力され、どのプロセスを通じて処理され、どこに保存・出力されるのかを示すものです。 

**使い分け**
- 処理手順やプロセスの詳細な流れを示す → **フローチャート**
- データの流れや処理の関係性を示す → **データフロー図**

### 5.4 スキーマ（schema）
スキーマは、データの構造やルールを定義したもの。データベースの構造（テーブル、カラム、データ型、制約、関係性など）を定義するほか、XMLやJSONなどのデータフォーマットでも使用される。ER図のような視覚的な表現ではなく、実際のテーブル定義やデータ構造の記述を含むのが特徴。

**使い分け**
- 処理手順やプロセスの詳細な流れを整理したい → **フローチャート**
- データの構造や関係性を設計したい → **スキーマ**

### 5.5 ER図（Entity-Relationship Diagram）
ER図は、データベースの設計や抽出したいデータを決める際に使用され、データ同士の関連性を明確にすることを目的とした図。エンティティ（データの単位）や、それらのリレーションシップ（関係）を可視化し、データベースの構造を論理的に整理する。主キーや外部キーといった制約も示されるが、具体的なカラムやデータ型の定義はスキーマ設計で行う。

**使い分け**
- 処理手順やプロセスの詳細な流れを示す → **フローチャート**
- データベースの設計を示す → **ER図**

### 5.6 アーキテクチャー（Architecture）
アーキテクチャーは、システムやソフトウェアの設計構造を示す概念であり、システムのコンポーネント（要素）とその相互作用を整理する。単に視覚的に整理するだけでなく、システムの機能性、拡張性、保守性、セキュリティなどの要件を満たすための設計方針を定めることが目的である。ソフトウェア開発では、MVCやマイクロサービス、レイヤードアーキテクチャなど、さまざまな設計に応じたパターンが存在する。

**使い分け**
- 処理手順やプロセスの詳細な流れを示す → **フローチャート**
- システム全体の構造や設計を示す → **アーキテクチャー**


## 6. まとめ
フローチャートは、プロセスを視覚的に表現できるツールです。自分の考えを整理するだけでなく、チーム開発においても共通認識を持つための資料として役立ちます。適切な記号を使い、シンプルで分かりやすいフローを作成することで、タスクの明確化や、次にやるべきことの優先順位を考える際にも有効です。

また、フローチャートと類似する他の図も適切に使い分けることで、より効果的に情報を整理できます。ただし、実際の現場では、厳密に使い分けることにこだわりすぎる必要はありません。状況に応じて柔軟に活用し、自分やチームにとって最も分かりやすい形で作成することが大切です。