フローチャート図の書き方

# はじめに
昨年、社内の希望者で行われたRPAの素養検定を受けた際にフローチャート図の作り方を全く知らず、ボコボコにされました。今後の業務上においても、システムの理解や説明するのに役立つだろうと思い、自分なりに調べました。
実際の問題に類似した下記のような仕様の自販機システムを例にフローチャートを作成してみます。

- システム仕様
    - 硬貨のみ利用可能(10円、50円、100円のみ)
    - 飲み物は110円である
    - 110円以上投入でボタンが光り購入可能
    - 500円を上限とし、それ以上の硬貨は受付けない
    - 購入後、110円以上残金があれば連続して購入できる
    - 購入後、110円未満残金であれば自動的に返却
    - ユーザーの希望するタイミングで硬貨の返却可能 (返却レバー)

#フローチャートの考え方
以下の４つの手順で考えていきます。

- 手順1 フローチャートを作成する目的を決める
- 手順2 フローチャートに関係する人を洗い出す
- 手順3 関係する人のタスクを洗い出す
- 手順4 タスクを時系列で順番に並びかえる

###手順1 フローチャートを作成する目的を決める
フローチャートを作成するときには、最初にどこまで書くかを決めることが重要になります。
なぜなら、最初に作成したいフローチャートの範囲を決めておくと、内容がブレにくくなるからです。
今回は自販機のシステムなので、「購入者がお金を投入して商品を買って取り出す」までという範囲で作成します。

###手順2 フローチャートに関係する人を洗い出す
次に重要なことはフローチャートに関係する人を洗い出すことです。
人を洗い出すと、フローチャートの網羅性が上がります。フローチャートとは、いってしまえば「台本」で、誰がどのタイミングで何をするのかを決めるものです。
このとき、登場人物が分かれば、だいたいの流れが見えてきます。逆に人が足りていない状態でフローチャート作成すると、作成途中で抜け漏れが多くなります。先に誰が必要かを洗い出すと、網羅性の高い内容を書けるようになります。

今回の自販機システムの場合であれば、以下の2人です。
1.購入者
2.自販機（人ではありませんが、登場人物の一つとしています）

###手順3 関係する人のタスクを洗い出す
人の洗い出しが終わったら、次は関係する人のタスクをそれぞれ洗い出します。
このとき順番を意識する必要はありません。とにかく必要だと思われる項目をどんどん出していきます。コツは行動や動作を一つ一つに分解していくことです。

自販機システムでは以下のように考えます。

購入者

- お金を(10円,50円,100円)入れる
- 商品の購入ボタンを押す
- 返却レバーを引く
- 商品を取り出す

自販機

- 購入ボタンのランプを点灯させる
- ランプを消す
- お金を返却する
- 商品を出す


###手順4 タスクを時系列で順番に並びかえる
タスクをリストアップした後は、それらを並び替えます。登場人物ごとに時系列で分けていきます。

以下のように並び替えます。

購入者

- お金を(10円,50円,100円)入れる
- 購入ボタンを押す
- 商品を取り出す
- 返却レバーを引く
- お釣りを受け取る

自販機

- 購入ボタンのランプを点灯させる
- 続けてランプを点灯させる
- ランプを消す
- 商品を出す
- お金を返却する

#フローチャートを書く際の3つのポイント
- ポイント1 誰が何をするのか分ける
- ポイント2 記号を使い分ける
- ポイント3 左上を開始点とし、時系列にフロー並べる
- ポイント4 矢印は本来の処理と逆行する場合につける

###ポイント1 誰が何をするのか分ける
分かりやすいフローチャートでは、誰が何をするかを明確にしておく必要があります。
ポイントは、役割を線で区切っておくことです。
そうすることで、「誰が」、「いつ」、「何を」するのかが分かりやすくなります。
今回は**飲み物を買う人**と**自販機**の２つに分けて考えます。

###ポイント2 図形(記号)を使い分ける
フローチャートには処理の際の図形(記号)が不可欠です。
図形にはルールを決めて使います。
####基本的な図形
- 開始（終了）図形
<img width="196" alt="スクリーンショット 2020-05-22 1.55.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/18f38c51-10e1-9b50-17b5-64623a4fea22.png">

- プロセス・処理図形
<img width="199" alt="スクリーンショット 2020-05-22 1.55.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/abe361ba-2b70-f3a2-a13c-cb9f91d90bee.png">

- 判断図形
<img width="187" alt="スクリーンショット 2020-05-22 1.55.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/d1eeb631-f5dd-429a-6e6d-e7416d32409d.png">

- サブプロセス・共通処理図形
<img width="182" alt="スクリーンショット 2020-05-22 2.05.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/56007e4f-ad09-3417-8efe-22d37f7a3f80.png">


上記の図形は一般的に使用されている例です。
これ以外にも必要に応じて図形を追加したりします。

###ポイント3 左上を開始点とし、時系列にフローを並べる
フローチャートは時系列に並べるのがコツです。
なぜなら、人は左上から右下に向かって順番で並んでいるという前提で資料を読むからです。
多くの人はフローの左上を最初に見ます。
それは、始まりが左上にあると思い込んでいるからです。そのため、フローが右から始まっていると、それだけで混乱しています。
そのため、左上を開始点とし、時系列にフローを並べるのが重要です。
それにより直観的に分かりやすく頭に入ってきやすいフローにできます。

###ポイント4 矢印は本来の処理と逆行する場合につける
フローチャートは上から下へ左から右へ線を結ぶものですが、それに逆行する場合は矢印をつけるようにします。

##実際に書いてみる
それでは実際に書いてみます。

まずはポイント1にあるとおり、登場人物である購入者と自販機で分けます。
<img width="1115" alt="スクリーンショット 2020-05-24 18.32.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/607aedb6-138d-d521-00ff-f9d23794e015.png">


今回のように処理が複雑の場合、共通処理を使用してみます。
以下の処理を自販機側の共通処理としてまとめてみます。

- 入金処理
- 返却レバーの処理
- 購入ボタンの処理


###入金処理
入金処理に関わる仕様を洗い出してみます。

- 500円玉以外の硬貨が使用可能
- 110円以上投入されると購入ボタンが光る。
- 500円を上限としてそれ以上の金額は受付けない

となるため、時系列に以下のように作成できます。

<img width="444" alt="入金処理.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/d3dc597b-0ec0-1559-5217-584dd0814eb5.png">


###返却レバーの処理
関わる仕様は使用できるタイミングだけのため、以下のように作成します。
<img width="246" alt="返却レバーの処理.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/d0340d5c-8648-cf16-70c4-9265913c3b63.png">

###購入ボタンの処理
仕様は以下の一点です。そこに気をつけて以下のように作成します。

- 購入後、110円未満残金であれば自動的に返却

<img width="270" alt="購入ボタン処理.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/bf08761b-53c4-e4ac-02c6-2a013459c649.png">

###メイン処理
ということで、共通処理の作成が完了しました。
最後に次に時系列に並べた作業をつかって、メインの処理を共通処理、分岐処理を含め作成してみます。

購入者の作業
- 入金する
- 商品ボタンを押す
- 商品を取り出す
- お釣りを取る

<img width="859" alt="完成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594242/9460fc4f-912e-a411-3933-9c55a039e143.png">

上記のように完成しました。
だいぶわかりやすく自販機のシステムを描けたのではないかと思います。

##終わりに
しかし、こうみると身近な自販機でもだいぶシステムは複雑だなと感じました。
実際に自分で書くことが重要で、自分の頭にわかりやすく落とし込むことは大切だと思います。
勉強したてで書き始めるのは随分大変に感じましたが、今後の業務でも自分でどんどん作成して、フローチャートのスキル向上を目指していきたいと思います。