条件分岐設計のベストプラクティス ― 申請フローから広がる汎用的アプローチ

条件分岐は、システムの動きを柔軟かつ明確に制御するための重要な仕組みです。

私は数年間にわたり申請フローの設計に関わってきました。その経験を踏まえ、本記事では条件分岐を含むフロー構成の考え方を解説します。なお、この考え方は申請フローの設計に限らず、多くのシステムやサービスで共有して活用できるものです。

例えば、Microsoft Entra ID におけるアクセス制御やポリシー判定、ワークフローエンジンによる承認ステップ設計、業務システムにおける状態遷移管理など、条件分岐の原則は幅広い場面で役立ちます。

本記事は、条件分岐の設計についての基本を知りたい方を対象としています。

条件分岐とは?

条件分岐とは、入力や状況に応じてシステムの動きや処理内容を切り替えるための仕組みです。

これにより、同じシステムでも状況に応じて柔軟に動作し、利用者に最適な結果を届けることができます。

条件分岐には、ブーリアン型とスイッチ式の2種類があります。

ブーリアン型(Boolean)は「はい/いいえ」「真/偽」の二択で状況を判断します。

例えば申請フローなら、自動承認の条件を満たすか確認を行い、条件を満たす場合は自動承認、条件を満たせない場合は手動承認として振り分けることができます。

シンプルな二択判断は動作を直感的に理解でき、処理が明快になります。

スイッチ式(Switch)は、複数の選択肢の中から条件に一致するものを選び、その選択肢に応じた処理を実行する方法です。

例えば申請フローなら、申請者の部門情報に応じて異なる承認ルートに振り分けることができます。

これにより、多様なケースを一つの流れの中で分かりやすく管理できます。

使い分け

判断基準

使い分けの判断基準は以下のとおりです。

  • ブーリアン型
    • 判定結果が2択に収まる
    • 複数の条件をまとめて判定したい
    • 処理内容がシンプルで短い構造になっている
    • 条件集約によりフロー数を減らしたい
  • スイッチ式
    • 判断基準となる項目に対して3種類以上の明確な値がある
    • 分岐ごとの処理内容が大きく異なる
    • 条件の網羅性を明示したい
    • 例外処理を1箇所に集めたい

それぞれの詳細について解説します。

ブーリアン型

ブーリアン型は、複数の条件をまとめてひとつの判定にしたい場合に選択します。条件同士は AND(すべての条件を満たす) または OR(いずれかの条件を満たす) でつなぎます。

例えば申請フローの場合、「申請者が管理職 かつ 申請金額が10万円以上」なら承認ルートAへ、それ以外は承認ルートBへといった書き方ができます。こうすることで、個別に条件分岐を作るよりもフローの数を減らし簡潔に保てます。

追加の条件にしたい場合は、以下のようにNoの処理で追加のブーリアン型を入れます。

ただし、このような入れ子(ネスト)構造は、条件式を多層に重ねてしまうと、可読性と保守性が大きく低下します。

レビューや引き継ぎを考慮すると、深さは最大でも3までを推奨します。それ以上の深い構造は、どの条件で何が実行されているかを視覚的に追いづらくなります。条件の組み合わせを見落としやすくなり、テストでは未定義ケースや論理ミスが発生するリスクが高まります。

前提条件の変更やスイッチ式の併用をしても、多段構造の深度を下げられない場合は、申請そのものを分離することをご検討ください。

条件の組み合わせで問題が発生したときの原因特定が難しくなるため、構造は浅い方が安全です。

スイッチ式

スイッチ式は、ひとつの項目に対して3種類以上の値や状態が存在し、それぞれに対応する処理が異なる場合に適しています。

例えば申請フローの場合、申請種別が「新規」「更新」「削除」など3つ以上あり、それぞれ異なる承認ルートに振り分けるといったシナリオに適しています。条件値に一致しない場合は「例外」フローにまとめて処理することができます。

ただし値が5つ以上あり処理が重複したり例外が1つに収まらない場合は、可読性の低下や処理が冗長になります。ブーリアン型の組み合わせの検討を推奨します。

例えば以下のように本部Aと本部Bが同じ処理になり、処理内容が2パターンに収まるのであればブーリアン型にしてフローを短くすると見やすくなります。

集約可能な条件がないかチェックしてください。

改善が困難な場合は、申請フローを構成する申請自体を分離し、条件分岐の数を減らすことが有効です。

条件分岐の効果的活用方法まとめ

フローの読みやすさ・保守性・テスト容易性・拡張性・パフォーマンスの観点で、以下のルールを守ることを推奨します。

  • ANDやORでフローを集約できる場合は、ブーリアン型を使う
  • 条件を集約できない場合は、スイッチ式を使う
  • スイッチ式の並列数は5以下にする
  • 入れ子構造の階層は3以下にする
  • 条件が複雑になる場合は、申請フローを構成する申請自体を分離する

おわりに

条件分岐を整理し、階層や並列を最適化することで、保守性と変更対応に強いフローを実現します。シンプルで理解しやすい構成は、レビューやトラブル対応もスムーズにします。

ぜひ今回の内容を、自分のプロジェクトやシステム設計に取り入れてみてください。小さな改善でも、将来の保守コストと品質向上に大きく寄与します。

条件分岐を上手に活用して、「流れの見える設計」を実現しましょう。

執筆担当者プロフィール
宮久保 良彦

宮久保 良彦(日本ビジネスシステムズ株式会社)

モダンワークプレイス部に所属。 Azureに関連する提案、設計、構築を担当しています。 自作PCのカスタマイズが趣味です。

担当記事一覧