【第一回】経費申請のフローで学ぶCamundaの基本(導入編)

Camundaとはオープンソースのワークフロー&ビジネスプロセスマネジメントの総合プラットフォームで、BPMN2.0CMMN1.1DMN1.1に準拠したモデリングや実行環境を構築することができます。

JJUG CCC Fall 2017では世界的な証券会社であるゴールドマン・サックス社においてもCamundaを利用してビジネスプロセスの可視化や自動化を行なっているという講演がありました。

現状Camundaに関する日本語の情報はほとんど見当たらない状況で、アドカレの記事でも書いたように自社での導入検証もしていければとも考えているので、せっかくなのでオープンな形で技術検証をしていきたいと思います。

今回、下記のような連載形式で、「経費申請」という比較的簡単な業務フローをテーマに、Camundaを用いたモデリングとワークフロー実装の基本を学んでいきたいと思います。

実際に業務要件をモデリングするような流れでひとつのアプリケーションを作成していこうと考えているので、網羅的に機能を解説していくというよりは、「Camundaを使うと何ができるのか?」を全体を通してイメージできるようになることを目的としています。

(下の流れはあくまで予定)

本エントリーでは導入編として、モデリングツールであるCamunda Modelerのインストールと、Camundaの実行環境をSpring Boot上に構築してみます。

連載を通して基本的に下記の環境にて動作確認をしていますが、他のOSやJavaバージョンでもほとんど差異はないものと思います(おそらく)。もし何か気付いた点などありましたらブログへのコメントやGitHubへのプルリクをいただけると幸いです。

Mac OS High Sierra: Version 10.13.2
Java 9
Gradle 4.2.1
Spring Boot 1.5.9-RELEASE
Camunda 7.7
Camunda Spring Boot Starter 2.2

Camunda Modelerのインストール

Camunda ModelerはCamundaのワークフローエンジン上で実行することができるBPMN/CMMN/DMNのモデリングツールです。各モデリング記法の目的やモデリング、実行方法は第二回以降の記事で少しずつ学んでいければと思います。

Camunda Modelerのインストールに関しては非常に簡単で、こちらのダウンロードページから対応するOSのバイナリをダウンロードして、実行ファイルを実行するだけです。

https://camunda.com/download/modeler/

f:id:itohiro73:20180115002450p:plain

次のエントリーではBPMNのモデリングをしてみる予定なので、まずは「BPMN diagram」をクリックしてみましょう。

f:id:itohiro73:20180115002516p:plain

BPMNのモデリングの画面が立ち上がりました。Camunda Modelerに関してはこれで準備完了です!

Spring Boot上でCamundaの実行環境を構築

Spring Boot上のCamunda実行環境をGradleで構築します。CamundaのSpring Boot StarterはこちらのGitHubで提供されています。最小構成のbuild.gradleはこんな感じ。

build.gradle

buildscript {
    ext {
        camundaVersion = '7.7.0'
        springBootVersion = '1.5.9.RELEASE'
        camundaSpringBootVersion = '2.2.0'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "io.spring.gradle:dependency-management-plugin:1.0.4.RELEASE"
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: "io.spring.dependency-management"

group = 'sample'
version = '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencyManagement {
    imports {
        mavenBom "org.camunda.bpm:camunda-bom:${camundaVersion}"
        mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
        mavenBom "org.camunda.bpm.extension.springboot:camunda-bpm-spring-boot-starter-bom:${camundaSpringBootVersion}"
    }
}

dependencies {
    compile('org.camunda.bpm.extension.springboot:camunda-bpm-spring-boot-starter-webapp')
    compile('com.h2database:h2')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    if(JavaVersion.current() == JavaVersion.VERSION_1_9) {
        runtime('javax.xml.bind:jaxb-api:2.3.0')
    }
}

最小構成のアプリケーションコードはこんな感じ。 src/main/java/sample/CamundaExpenseProcessApplication.java

package sample;

import org.camunda.bpm.spring.boot.starter.annotation.EnableProcessApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableProcessApplication
public class CamundaExpenseProcessApplication {

    public static void main(String[] args) {
        SpringApplication.run(CamundaExpenseProcessApplication.class, args);
    }
}

Camundaが使うデータベースをin-memoryのh2に設定するために、application.propertiesを作成します。下記の設定ではメモリー上のh2データベースを使用するのでアプリケーションを立ち上げなおすたびに情報はリセットされます。もし情報を永続化しておきたい場合はspring.datasource.url=jdbc:h2:mem:camundaコメントアウトして代わりにspring.datasource.url=jdbc:h2:~/camunda;DB_CLOSE_ON_EXIT=falseを有効にしてください。

src/main/resources/application.properties

spring.datasource.url=jdbc:h2:mem:camunda

#Use this config in case you want to persist camunda data into file system (comment the config above in that case)
#spring.datasource.url=jdbc:h2:~/camunda;DB_CLOSE_ON_EXIT=false

デフォルトの設定として、デモユーザー(id/password = demo/demo)と、すべてのタスクを表示するfilterをapplication.ymlを追加しておきます。

src/main/resources/application.yml

camunda.bpm:
  admin-user:
    id: demo
    password: demo
    firstName: デモ
    lastName: ユーザー
  filter:
    create: All tasks

以上で最小限構成のCamundaアプリケーションが立ち上がる状態になりました。GitHubに動作確認済みのプロジェクトを上げてあるのでこちらからどうぞ。

https://github.com/itohiro73/camunda-expense-example/tree/1-intro

GradleでSpring Bootアプリケーションを立ち上げます。

$ gradle bootRun

立ち上がったら http://localhost:8080/ にアクセスすると、下のような ログイン画面が立ち上がります。

f:id:itohiro73:20180115002610p:plain

上記で設定したデフォルトのデモユーザー(demo/demo)を使用してログインしてみます。

f:id:itohiro73:20180115002647p:plain

これでCamundaが立ち上がりました。トップ画面からはCockpitTaslklistAdminの機能にアクセスすることができます。

この時点ではまだワークフローをデプロイしていないのでCockpit上では何もできませんが、TasklistやAdminの基本的な機能は動くのでポチポチ遊んでみてもいいかもしれません。

以上でCamundaの準備は完了です!

第一回まとめ

今回は導入編として

をしてみました。次回は早速「経費申請」の基本的なフローをBPMNを用いてモデリングしてみたいと思います。お楽しみに。