業務フローリファクタリングで見える化を実現業務フローリファクタリング(前編)(2/3 ページ)

» 2009年08月31日 12時00分 公開
[今田忠博, 菅野裕,@IT]

業務フローリファクタリングという考え方

 何となく描いてしまった業務フローの一部をシステム化した結果、業務の流れが非効率なことが分かったり、リソースが競合してしまったり、というケースに出会ったことはありませんか?

 これは、業務フローの段階で十分にウォークスルーをしていないことなどが原因です。作ってしまったシステムを見直すためのコストは、途方もなく大きな金額になります。できることなら、業務フローの段階でそのような問題が出ないような対策を打ちたいものです。とはいえ、何の指針もなく業務フローを精査するのは、経験豊富な専門家でもなければ難しい作業です。

 やりたいことは、「将来の業務フローを描いた段階で精査することで、システム化の前に業務の流れを整理し、リソースの競合や非効率な作業を見直す」という点です。

 ソフトウェア用語に「リファクタリング」という言葉があります。この言葉は、ソフトウェアの外部的な振る舞いを保ったまま、内部的な構造を改善していく作業のことを指します。ここでは、業務としての外部的な振る舞い(入出力)を保ったままで、内部の構造(作業の流れ)を改善していくことを、業務フローリファクタリングと呼び、その手段の1つとしてワークフローパターンを用いることを提案します。

 あるビジネスプロセスを表現する際に何通りかの書き方があった場合には、その中で1番シンプルなものを使って表現するべきです。業務フローを簡潔で的確な表現を保つことによって、いざ業務改善を図る際に大きな差となって表れます。これについては、ビジネスプロセスに現れる特徴的な振る舞いをパターンとしてまとめた「ワークフローパターン」が参考となります。

 ワークフローパターンについてOMGやWPIで公開されている資料は、パターンで例示されているタスクの中身が「A」や「B」や「C」といった記述となっているため、実際の作業をイメージしづらいのです。そこでこの記事では、ワークフローパターンを利用した業務フローリファクタリングに役立つレシピとして、よく使ういくつかのワークフローパターンの説明と、タスクの中身を具体的にした適用例を紹介します。

 2003年の発表以来、多くのワークフローエンジンがこのパターンを実行できるように考慮されました。つまり、ワークフローパターンを使った業務フローは、システム化しやすい業務フローともいえるのです。また、ワークフローパターンの多くはワークフローエンジンで実行できる形式に簡単に変換できるため、ビジネスプロセスの分析が、ビジネスアプリケーションの開発にシームレスにつながっていきます。さらに、ワークフローエンジンを使うことで、フローとロジックとの分離が容易になるというメリットもあります。

業務フローリファクタリングの実際

 それでは、実際にいくつかの業務事例を使って、業務フローリファクタリングを行っていきましょう。

業務フローリファクタリング例その1(旅行予約)

 まずは簡単な例です。よくある旅行の予約業務を題材にします。旅行の予約を行う業務は、航空券の予約、ホテルの予約、レンタカーの予約、クレジットカードの支払い処理からなります。

ALT 図2 旅行予約フロー『リファクタリング前』 (クリックで拡大)

 図2のフローは、業務をシンプルに表現した分かりやすいフローになっています。航空券、ホテル、レンタカーの予約は、それぞれの窓口に予約を依頼し、その予約結果を受け取ります。すべての予約が完了したら、クレジットカードの支払いを処理し、最終的に顧客に予約完了を通知します。


※このフローは、今回の趣旨にフォーカスするため、本来の業務に必要な補償処理(例えば、ホテルの予約ができなかったときに、航空券の予約をキャンセルするといった例外処理)を省略しています。現実では、そのあたりの例外処理が重要なので、決して軽く扱わないこと!


 しかし、航空券、ホテル、レンタカーそれぞれの予約窓口は、結果を返すまでに多少の時間がかかるものです。すぐ返事をもらえるかもしれませんが、キューがたまっていたり、担当が離席していたりして、なかなか返答を受け取れないかもしれません。

 現在のフローでは、航空券、ホテル、レンタカーの各予約は直列に並んでいるため、それぞれのタスクの完了を待たなければ、次に進めません。航空券の予約結果を待っている間に、ホテルの空部屋が埋まってしまっては目も当てられません。

直列のフローを並列化して効率化

 これをリファクタリングしたのが図3のフローです。

ALT 図3 旅行予約フロー『リファクタリング後』 (クリックで拡大)

 実際には航空券、ホテル、レンタカーの各予約は、直列に行う必要はありませんでした。この図のように、それぞれを並列で処理すれば時間のかかる1つのタスクのために、ほかのタスクが滞ることもありません。

 ただし、クレジットカードの支払い処理は、ほかの予約タスクが成功してからでないと実行するわけにはいきません。そのため、3つの予約で並列に分かれたパスは同期した後、後続のクレジットカードの支払いを処理するタスクにつなげています。

 今回はフローの「並列化」の例でした。ワークフローパターンの「並列分岐(Parallel Split)」を使って滞りがちなタスクを並列化し、無駄のないフローにすることができました。

直列パターンと並列化パターン

 この例で登場した直列パターンと並列分岐パターンについて説明します。

直列(Sequence)パターン

 タスクを順に実行します。先行するタスクが完了すると、後続のタスクが開始されます。直列パターンはあらゆるプロセスの基本となるもので、あらゆる状況で見られます。

別名:順列(sequential routing)、連続(serial routing)

ビジネスプロセス図

ALT 図4 直列パターンの表現(BPMN図)

 BPMNでの直列パターンの表現は、シーケンスフローによって接続された一連のアクティビティによって表現されます。シーケンスフローの矢印の向きは、シーケンスの順序を表します。図4では、A、B、Cの順に実行されます。

実例:

 ショッピングサイトにおける注文システムのフローを例にとります。

ALT 図5 直列パターン例『ショッピングサイトの注文システム』 (クリックで拡大)

 ショッピングサイトの注文システムでは、顧客から商品の注文をWebから受け付けると注文に必要な一連の処理を順に実行します。最初にクレジットカードの与信を行い、注文を処理し、顧客に受け付け完了メールを送ります。その後、商品の発送を発送サービスに依頼します。これらのタスクは、前のタスクが完了してから順に行われます。

注意点:特になし。関連するパターン:すべてのパターンに関連します。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ