未分類

BPMエンジンとしてのJIRA #augj

TL;DR

JIRAでBPMとか考えるのはやめましょう。でもちょっとしたシステムと人間系ワークフローとの連携に使うのは良いアイディアです。

今更だけどJIRAって?

JIRAは一般的にバグトラッキング、または課題トラッキングシステムと分類される製品です。

良くあるのがソフトウエア製品の今後追加する機能やバグを課題として登録しておき、担当者を決めて、終わったら完了済課題としてマークしていく使い方ですね。

JIRAが導入されている企業、プロジェクトは非常に多く、そして様々な場面で利用できるようカスタマイズの幅も広いです。

ワークフロー

中でも便利なのが「ワークフロー」です。つまり、課題が登録されてオープン状態なのか、完了してクローズしている状態なのかだけでなく、課題が登録されてから完了するまでワークフローがたどる可能性のある状態をグラフで表せる機能です。例えば注文を頂いたら

・受注内容を確認する
・確認完了したら上長の決裁を待つ
・決裁が完了したら手配して終わり

というワークフローがあれば以下のように定義します

ちなみにこのグラフィカルに定義できる仕組みは元々サードパーティーのプラグインだったのが、出来が良いので買収の上取り込まれたという経緯があります。ステキ。

ワークフロー上で状態を遷移するタイミングで決まった人に担当を変えるとか、特定の条件が揃っていないと状態を遷移できないとか、遷移のタイミングでWebhookを呼び出すといったこともできます。

ビジネスプロセスマネジメントとワークフロー

エンタープライズ系のベンダに勤めていた私はワークフローと聞けばBPM(ビジネスプロセスマネジメント)を思い浮かべます。BPMはビジネスプロセスを分析/解析して、可視化・システム化して、監視、改善していくことです。

なんとなく口頭伝承されてきたプロセスは人によってブレがあったり、間違いがあったりします。必ずしも人間の作業をシステムで全部置き換えるところまでいかなくても、まずは作業の流れを統一してブレをなくすことが大事です。

その後は運用状態を監視して、どこにボトルネックがあるのか、手戻りが発生しやすいのはどこなのか、ここは自動化すべきなのでは、といったことを分析して改善していきます。

BPM用の製品として(自分的に)有名なのがAlfrescoや、jBPMです。

BPM製品では人間系がからむ承認といった手順とシステムで自動化させたフローを管理できます。

JIRAでBPM・・・に向かない

結論から言うと、JIRAでBPMを行うには制約が大きすぎます。理由はさくっと2つ思い付きます。(細かいこと考えるといくらでもあります)

1. フローの平行パスを定義出来ない
ビジネスプロセスを分析すれば、例えば
「課長と部長の承認がいるけれども順番は問わない」
「システムが集計しているのと平行して人間は請求書を投函する」
みたいな平行パスが現れてきます。JIRAのワークフローは2つ以上の状態を持つことができないので、フラグ用のフィールドを持たせるとか、サブタスクを定義するといった設計上の工夫が必要になります。「工夫」で回避できますが、ビジネスプロセスを俯瞰して監視、管理したいという点からするとちょっと辛いですね。

2. トランザクション管理ができない
エンタープライズシステムでは1にも2にもトランザクションです。特定の処理が失敗したら関連する処理はまとめてロールバックしたいところ。JIRAで、状態遷移するタイミングでWebhookで何らかの一連の処理を呼び出すことはできますが、処理が失敗したからといってまとめてロールバックしてくれるわけではありません。まぁHTTPを超えてトランザクションを管理しようとする試みは間違いだということは歴史が証明しているのでJIRAのワークフローとトランザクショナルな処理を絡めようという発想はやめましょう。

というわけでBPMをしたいならBPM製品を使うべきです。

JIRAでBPMができるパターン

本格的なBPMには向きませんが、ちょっとした人間系フローと、システムの連携にJIRAは便利です。ざっと2パターン紹介します。

・おい人間やっとけパターン
弊社=株式会社サムライズムで活用しているパターンです。ソフトウェアの販売をしているサムライズムですが、ご注文頂いたライセンスを手配する作業は*だいたい*システム化しています。*だいたい*というのが肝で、システムで自動化できていない部分があるのです。
具体的には一定の割合で請求書の書面を郵送して欲しいというお客様に対して
・請求書を印刷
・3つ折りにして封筒に入れる
・投函する
という作業が発生します。こちらはMisoca APIとかを使えば自動化できるのですが頻度、分量としては多くないので人間が運用でカバーしています。
人間がやるべき作業は忘れてしまいがちなので、システムから自動的に課題を登録して作業の完遂を促しています。システムから課題の作成するには公式のJavaライブラリを使っていますが、Atlassian独自醸造Apache HttpClientライブラリに依存しており数多くの他製品と競合しますので皆さんがんばってください。REST APIを直接叩くのがいいかも・・・。

郵送が必要な場合、機械が人間に依頼するコード(㍿サムライズムの本物のコード)

・人間も機械も仲良くパターン
ワークフローに平行パスがなく、一部システムで処理をしたい部分があればちょっとしたBPM的にJIRAのワークフローを使えます。そしてシステムが処理するのは遷移中にWebhookを呼び出すのではなく、状態として定義するのが良いです。(たぶん。でも場合による)。
システム用にユーザーを一人割り当て、状態遷移のタイミングで担当者をシステムに割り振るように設定しましょう。するとシステム処理中、人間には「担当している課題」として見えないので安心ですね。システム側で処理がうまくいかない場合、リトライを重ねることもできますし、リトライ試行回数を超えたら「失敗しました」、みたいな状態に遷移させてもokです。
(BPM製品だとビジネスプロセスとしてリトライ回数や例外系へのジャンプの定義が出来たりします。JIRAでやる場合は自前で)

いかがでしたでしょうか。長々と文字だけで書き連ねてしまいました。JIRAは主に人間系の課題の管理に使うのに向いていますが、工夫次第ではシステムと人間の連携にも使えます。
あまりにも工夫が必要な場合はJIRAを適用すべき場面ではないかもしれません。うまいことやってください。