Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Visual Studio 2008で標準搭載されたWindows Workflow Foundation

Visual Studio 2008 徹底入門 (8)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/05/09 00:00

Visual Studio 2008では、ついに.NET Framework 3.5がサポートされ、WPF/WCF/WFについても、統合開発環境を活かしたサポートが行われるようになりました。今回は、ワークフロー フレームワークであるWF(Windows Workflow Foundation)を紹介します。.NET Framework 3.5から、WFとWCFの統合が図られ、ワークフローをWCFの通信モデルを使って提供することが容易になりました。

目次

はじめに

 第5回第7回に続き、.NET Framework 3.0から導入されたコンポーネントとVisual Studio 2008でのサポートについて解説していきます。

 今回扱うのはワークフロー フレームワークであるWF(Windows Workflow Foundation)です。.NET Framework 3.5から、WFとWCFの統合が図られ、ワークフローをWCFの通信モデルを使って提供することが容易になりました。

対象読者

  • Visual Studio 2008に興味がある方
  • WFに興味がある方

必要な環境

 シリーズ第1回を参考に、Visual Studio 2008のインストールを行ってください。

WFについて

 .NET Framework 3.0から導入されたコンポーネント群について、Visual Studio 2008からどのように利用できるかを解説していますが、最後に残ったのがWF(Windows Workflow Foundation)です。

ワークフローとは何か

 ワークフローとは、主に業務アプリケーションなどで使われることの多い言葉で、特定の業務を小さな処理(ワーク)の集合体でなる一つの流れ(フロー)とみなす概念のことです。

 ワークフローの重要性について考える際に、ワークフロー自体をビジネスモデルと呼べる場合もある、というのは興味深いことです。例えば多くのオンラインショップで利用されている「買い物かご」あるいは「カート」モデルは、1つのワークフローと呼ぶことができます。

 「商品を1つ注文したら精算する(都度精算モデル)」というワークフローから「商品を任意の数だけ注文し、最後に一括で精算する(買い物かごモデル)」というワークフローに移行することで、ユーザーエクスペリエンスの向上・さらなる購入機会の増大(「ついで買い」の可能性は都度精算モデルよりも買い物かごモデルの方が高いでしょう)など、多くのメリットが生み出されてきました。ワークフローが業務の単なる手順書にとどまらず、ビジネス全体に影響を及ぼす一例ではないでしょうか。

 このように、どのような処理の組み合わせで流れていくかという観点で業務をモデル化したものがワークフローです。ワークフローの中の処理のことをアクティビティと呼びます。

ワークフローを専門に扱うフレームワークが必要なのはなぜか

 「ワークフローとは、細かな処理であるアクティビティの組み合わせである」という概念が分かったならば、それをコンピュータ上に実装することは簡単でしょう。

 しかし、シンプルなモデルであれば、プログラム実装およびワークフロー変更に伴う書き換えもそれほど煩雑ではないかもしれませんが、複雑な条件や多くの処理を含むワークフローの場合、モデルをプログラムに落とし込む中でバグが入り込むかもしれません。

 ここでワークフロー フレームワークの登場です。ワークフロー フレームワークはワークフローをプログラムに落とし込まず、そのままのモデルで扱います。このことには多くのメリットがあります。

  • 可視化:
  • 処理の流れが明確にモデル化されているため、理解が容易です。
  • ドメイン固有言語(Domain-Specific Language:DSL)である:
  • ワークフローはルールに基づいて処理が流れていく、という特定の分野(ドメイン)に特化した言語です。定型的なプログラムを手で書いていくよりもシンプルに記述可能です。
  • 再利用性:
  • ワークフローの各ステップの処理(アクティビティ)は再利用可能なコンポーネントの組み合わせです。

 今回扱うWFは、ワークフローを.NET Framework上で扱うために設計された、汎用的に使用可能なフレームワークです。

WFの扱うワークフロー

 WFでは、大きく分けて2種類のワークフローを扱うことができます。

シーケンシャル ワークフローとステートマシン ワークフロー
シーケンシャル ワークフローとステートマシン ワークフロー

シーケンシャル ワークフロー

 シーケンシャル ワークフローは、ワークフロー開始からアクティビティを実行していき、最後のアクティビティが完了するまで順に処理が流れていくワークフローです。

 ただし、シーケンシャル ワークフローは厳密な逐次処理ではなく、複数のアクティビティを同時に実行することもできますので、処理の順番が厳密に定められているわけではありません。

ステートマシン ワークフロー

 ステートマシン ワークフローは、さまざまな状態(ステート)を含んでおり、イベントに応じてステート間を遷移しながら処理を行い、最終状態に遷移していくワークフローです。

 ステートマシン ワークフローはイベントをトリガにしてアクションを実行し、ステートを遷移しながら処理を行います。

 こうした状態遷移を持つモデルを実装する場合、ステート管理が煩雑になりがちです。しかしWFにおいては、ステート管理やワークフローに伴うさまざまな処理をフレームワークに任せることができます。

2種類のワークフローの特徴

 シーケンシャル ワークフローは、処理シーケンスをモデル化したもので、基本的に止まることなく処理が続いて流れていきます(もちろん、アクション内でブロックが発生して処理が止まることはあります)。

 それに対し、ステートマシン ワークフローはステートを中心に、ステート間を繋ぐイベントとアクションをモデル化したもので、イベントがない限り処理は止まっており、イベントが発生した時点でアクションが実行されてステートが変化していきます。

 実は、シーケンシャル ワークフローはステートマシン ワークフローの特殊なパターン(初期状態と終了状態以外のステートを持たないステートマシン ワークフロー)と言えます。従って、すべてのシーケンシャル ワークフローはステートマシン ワークフローとして表現することができます。

 実装においては、扱う対象が特にステートを持たず、シーケンシャル ワークフローで表現できるものか、ステート・イベント・アクションの組み合わせで構成されるステートマシン ワークフローで表現する必要があるものか、を検討したうえで、よりモデル化しやすい方を選んでいきましょう。

 

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト 土井 毅(ドイ ツヨシ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

バックナンバー

連載:Visual Studio 2008徹底入門

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5