workflowって何だろう
最近だいぶメジャーになってきたBPMとかワークフローとかについてちょっと考察してみたりする。
よく目にするのがグループウェアにおまけで付いてくるワークフロー。たとえば稟議書とか、申請書みたいなものを電子化しようというもの。
紙の申請書とか見ると、課長、部長、総務、総務課長なんかが印を押す欄が右上に並んでたりする。たとえばこんなの。
これを電子化することで、ペーパーレス(死語)化して経費削減(無理)しようとか、迅速化したり紛失を減らしたりという事を狙う。
まぁ普通良くあるフロー(文書の人から人への流れ)として定型化されるものであればグループウェアのオマケでOK。ただ、ひどいものだと、
A→B→C→D→E
みたいに一直線のみとか、毎回手入力でAは誰、Bは誰と選ばなければならない。
これがワークフローシステム単体で販売しているものになると、
(自分)→(課長)→(部長)→(総務)→(総務課長)
みたいに設定しておくと、自分が技術一課なら(課長)のところが技術一課課長となったり、(総務)のところは、総務の数人の担当者の誰でも処理できるようになっていたり、はたまた自分が課長なら(課長)のところをスキップできたり、稟議の金額が5万円未満なら(部長)をスキップできたりと、さまざまな便利な機能を持っていたりする。
機能については私が云々言うより専門の記事(これとか)を参考にしてもらうほうがいいだろう。
ワークフローの定義
自分なりの解釈だが、一般的に言われるワークフローとは、
複数の人によって処理されるデータの流れの定義
ということになるだろうか。だから、それは紙ベースや、wordベースである必要はない。WEBのフォームでもいいし、画像であっても良い。その処理の流れを定義するのがワークフローである。
ただこれも狭義のワークフローだと考えていて、広義で考えると「人」でなくても良い。そして上記では決定的に省略されているものとして、「時間を超えて処理される」という点があげられる。
人から人へデータを渡していくのであれば、必ず不定長の時間の経過が必要(ベルトコンベアなんかでない限り)なので、省略されているのである。
つまりワークフローとは、
時間的に不連続に複数回処理されるデータの流れの定義
と言える。
身近なワークフロー
広義のワークフローを考えると、さまざまなものがワークフローを持つことがわかる。あまりにも多くのものが当てはまるので、なるべく「なるほど」と直感できるものだけを挙げてみる。
- 稟議書
- これはさっきも出てきたのでいいだろう。
- 回覧板
- 電子化されると、順不同(というか同時でも)閲覧できたりするが、全員閲覧し終われば終わりというワークフローだ。
- バグトラッキングシステム(BTS)
- バグの報告者、コーディネータ、開発者などをバグレポートが回されていく、正にワークフロー。
- 複数ページを持つアンケートフォーム
- 人は単数だが、画面を遷移しながらアンケートというデータを処理していくし、データは時間を越えて保持されている。
- 電車の改札
- 切符を買う、自動改札を通る、社内で車掌が検札し、乗り換え改札を通り、出口で精算して改札を抜ける。これはワークフローだろう。
- 自動販売機
- 最初に誰かがお金を入れる、購入できる商品のボタンを点灯、ボタンを押されるまで待って、押されたボタンの商品を排出、投入金額と商品価格を確認して、必要ならばお釣りを排出。ほらワークフローだ。あれデータは何だろう。お金?これは違うかな。
極端な例まで出したが、みな広義にはワークフローと言えそうだ。
ワークフローをさらに抽象化する
ワークフローをさらに抽象化するとどうだろうか。
開始があって、あるステータスに落ち着いて、しばらくしたら次のステータスに遷移、そしてあるステータスまで行き着いたら終了。そう、ステートマシンだ。
s2buriで有名な羽生さんもワークフローの一形態はステートマシンだと言っています。
じゃ、ステートマシンと広義のワークフローは何が違うか。
ステートマシンは単なる状態遷移だけを表したもの。ワークフローはそれに付随する永続性のデータの存在が決定的に違う。
そして多少狭義のワークフローに話を持っていけば、永続性データに対する処理のバリデーションがあるのもワークフローの特徴だろうか。
ちなみに羽生さんの言う、コードジェネレータ系とか、ルールエンジン系というのはどんなものだかよく判りません。でも、コードジェネレータ系も、Yacc/Lexみたいに、結局ステートエンジン生成をコンパイルしてから実行するか、インタプリタとして実行するかの違いだけで、結局両者ステートマシンなんじゃないかなと思っていたりします。
で、次は何?
もう夜も更けたので次回また続きを書きたいと思うのですが、さて次はどんな話の展開にしましょうか。永続性データをどうやって保持するか、マイクロなワークフローとマクロなワークフロー、ディレクトリ情報との連携の重要性、そこらあたりになるでしょうか。
あ〜さぶい。