「このタスク、誰がどの順番でやるんだっけ?」
チームが大きくなるにつれ、こういう疑問が増えてくる。オンボーディングのたびに口頭で説明し、属人化したフローがブラックボックスになり、バグ報告で初めて手順の抜け漏れに気づく——そんな経験があるエンジニアは多いのではないだろうか。
この記事では、業務フローを整理するドキュメントの構成・書き方・運用方法について、実際のプロジェクトでの経験をもとに解説する。
業務フロー整理ドキュメントとは
業務フロー整理ドキュメントとは、誰が・何を・どの順番で・どの条件で行うかを記述した文書だ。コードで言えば README に近い位置づけで、実装の「なぜ」と「どうやって」をつなぐ役割を持つ。
対象は社内業務に限らない。たとえば:
- ユーザー登録〜本人確認までの処理フロー
- 障害発生時のエスカレーションフロー
- リリース前のチェック・承認フロー
- データ取り込みのバッチ処理フロー
これらすべてがドキュメント化の対象になりうる。
なぜ業務フロードキュメントを整備しなければならないか
このセクションは「何を定義するか」と「なぜそれが必要か」を、定義を怠ったときに起きる具体的な失敗シナリオとともに説明する。
フロー概要(全体像)
❌ 定義しないと…
初めてそのフローに関わる人が「どこから読めばいいか」わからなくなる。コードを全部読まないと処理の目的が掴めないため、障害対応・オンボーディング・レビューのたびに無駄な調査コストが発生する。
アクター・担当者の整理
❌ 定義しないと…
「このステップって誰の責任範囲?」という確認が毎回発生する。特にシステムをまたぐフローでは、担当チームが別々に動いた結果、同じ処理が二重実装される・逆に誰もやらない、というミスが起きやすい。
条件分岐・例外処理
❌ 定義しないと…
実装者が「なんとなく」エラーハンドリングを書くことになる。あるエラーはリトライされ、別のエラーは握りつぶされ、本番障害が起きて初めて「このケースは誰が対応するの?」が明確になる。
入力・出力(インプット/アウトプット)
❌ 定義しないと…
フローを呼び出す側と呼ばれる側で、暗黙の前提がズレる。「メールが送られると思っていなかった」「DBが更新されるとは知らなかった」という認識齟齬が、リリース後の予期しない動作として表出する。
更新・メンテナンスルール
❌ 定義しないと…
コードは更新されるがドキュメントは古いままになる。「このフロー図、今の実装と違う気がする」という状態が常態化し、やがて誰もドキュメントを信頼しなくなる。信頼されないドキュメントは存在しないのと同じだ。
関連リソースへのリンク
❌ 定義しないと…
「この処理の実装ってどこ?」という質問がSlackで繰り返される。フロー図を見ながら別のドキュメントを探し回る時間が積み重なり、ドキュメントを「読む気にならないもの」にしてしまう。
なぜエンジニアが書くべきか
「業務フローはビジネスサイドの仕事」と思われがちだが、実際にはエンジニアが書いた方が精度が高くなるケースが多い。理由は3つある。
1. システムの制約を知っている
「ここで非同期処理が入るので、ユーザーへの通知は数分後になる」といった実装上の制約を、ビジネスサイドだけでは正確に記述できない。
2. 例外パターンを把握している
コードレビューやバグ対応を通じて、エラーケースや境界値を最もよく知っているのはエンジニアだ。
3. 更新コストを下げられる
ドキュメントをコードに近い場所(リポジトリ内など)に置くことで、実装変更時に一緒に更新しやすくなる。
ドキュメントの構成要素
1. フロー概要
最初に全体像をつかめる記述を置く。1〜3文で「このフローは何をするものか」を書く。
## 注文キャンセルフロー
ユーザーが注文をキャンセルする際の処理フロー。
注文ステータスが「発送前」の場合のみキャンセル可能。
返金はStripeのrefund APIを通じて自動で行われる。
2. 登場人物(アクター)の整理
誰が関与するかを最初に明示する。
| アクター | 役割 |
|---|---|
| ユーザー | キャンセルをリクエストする |
| バックエンドAPI | リクエストを受け取り、処理を制御する |
| Stripe | 返金処理を実行する |
| 通知サービス | ユーザーとCSチームにメールを送る |
3. フロー図
フロー図は Mermaid で書くのが現在のベストプラクティスのひとつだ。Gitリポジトリに置けるテキスト形式で、レビューも差分確認もできる。
flowchart TD
A[ユーザーがキャンセルリクエスト] --> B{注文ステータス確認}
B -->|発送前| C[ステータスをCANCELLEDに更新]
B -->|発送済み| D[エラー: キャンセル不可]
C --> E[Stripe refund API呼び出し]
E -->|成功| F[通知メール送信]
E -->|失敗| G[Slackアラート + 手動対応キュー追加]
F --> H[完了]
4. 条件分岐・例外処理
フロー図で表現しきれない細かい条件は、テキストで補足する。
## 例外ケース
- **注文から30日以上経過している場合**: 自動返金不可。CSチームが手動対応。
- **部分キャンセル(商品の一部のみ)**: 現在未対応。全件キャンセルのみ受け付ける。
- **Stripe APIタイムアウト**: リトライ最大3回。それでも失敗した場合は手動対応キューに追加。
5. 入力・出力の定義
| 項目 | 内容 |
|---|---|
| 入力 | 注文ID、ユーザーID、キャンセル理由(任意) |
| 出力 | キャンセル完了通知メール、更新された注文ステータス |
| 副作用 | Stripeへの返金リクエスト、Slackへのアラート(失敗時のみ) |
6. 関連リンク・参照
## 関連リソース
- 実装: `src/order/cancel.ts`
- Stripe Refund API: https://stripe.com/docs/api/refunds
- CSチーム手動対応手順: Notion > CS > 返金手動対応
実際の経験談:「ないと困る」を実感した瞬間
オンボーディングの口頭説明が毎回15分かかっていた
あるプロジェクトで、新メンバーが参加するたびに「データ取り込みバッチの流れ」を毎回口頭で説明していた。S3からファイルを取得して、バリデーションして、DBに書き込んで、失敗したらDLQに入って……という10ステップ程度のフローだ。
ドキュメントがないため説明する人によって微妙に内容が違い、「DLQの確認って毎日やるんでしたっけ?」という質問がSlackに繰り返し飛んできた。
✅ 改善後
Mermaidのフロー図と例外ケース一覧をリポジトリに追加したところ、オンボーディング時の説明がほぼ「このファイル読んでおいて」で済むようになった。
障害対応中に手順が曖昧で時間を溶かした
深夜の障害対応中、「決済フローのどのステップでエラーが起きているか」を特定するのに30分以上かかったことがある。コードを読めば分かるが、障害対応中にコードを全部追うのは辛い。
フロー図があれば「ステップ3のStripe呼び出し後でコケている」とすぐ絞り込めた。事後にドキュメントを整備したが、「もっと早く書いておけば」という後悔が残った。
⚠️ 教訓
障害対応中は認知負荷が高い。フロー図があるだけで、問題箇所の特定速度が劇的に上がる。
仕様変更時にドキュメントだけ更新されなかった
逆に失敗した経験もある。コードは更新したがドキュメントを放置した結果、3ヶ月後に自分が「古い手順を正として」バグを仕込んだ。
✅ 改善後
ドキュメントのファイルをコードと同じPRに含めるルールを導入した。レビュアーが「コードとフロー図が一致しているか」を確認する習慣ができてから、このミスはなくなった。
書き方のポイント
粒度の決め方
粒度は「新人が一人で作業できるか」を基準にするとちょうどいい。細かすぎると更新コストが増し、粗すぎると役に立たない。
💡 判断のコツ
迷ったら「このステップで何か失敗したとき、原因を絞り込めるか」を自問する。絞り込めないほど粗い場合は分割する。
図と文章の使い分け
| 向いているケース | 手段 |
|---|---|
| 全体の流れ・分岐を把握させたい | フロー図(Mermaid) |
| 条件の詳細・例外を説明したい | 箇条書きテキスト |
| APIの入出力を示したい | テーブル |
| 特定ステップの実装詳細 | コードスニペット |
更新しやすくする工夫
- コードと同じリポジトリに置く:
docs/flows/ディレクトリを作る - PRテンプレートに「フロー変更の有無」を含める: 実装変更時にドキュメント更新を促す
- 最終更新日を書く: 古さを可視化する。
<!-- last updated: 2026-06 -->でよい
ツール選定
| ツール | 向いているケース |
|---|---|
| Mermaid(リポジトリ内) | コードと一緒に管理したい、GitHubで自動レンダリングしたい |
| draw.io | 複雑な図を視覚的に整えたい、非エンジニアも編集する |
| Notion / Confluence | チーム全体で閲覧・編集する、検索性を重視する |
| PlantUML | シーケンス図など複雑な図が多い |
エンジニアチームだけで完結するなら Mermaid + リポジトリ管理 が最もメンテナンスしやすい。
まとめ
業務フロー整理ドキュメントで押さえるべきポイントをまとめると:
- 構成: 概要・アクター・フロー図・例外ケース・入出力・関連リンク
- 図はMermaid: テキスト形式でリポジトリ管理できる
- 粒度: 「新人が一人で作業できるか」を基準に
- 運用: コードと同じPRで更新するルールを作る
✅ 最初から完璧なドキュメントを目指す必要はない。「このフロー、次に説明するとしたら何が必要か」を想像しながら書くだけで、十分に価値のあるものになる。
※ この記事は実際のプロジェクト経験をもとに構成しています。フロー図のサンプルは説明用に簡略化しています。