はじめに
現代の企業システムにおいて、ビジネスプロセスの管理は基盤的な役割を果たします。Activiti 7 は、この要件に応える強力なオープンソースの業務処理エンジンです。複雑な承認フローからタスク割り当て、実行状況の監視に至るまで、柔軟な機能を提供しています。ここでは、Activiti 7 の基本概念を概観し、Spring Boot との連携方法、特にプロセスデザインツールとしての実装手順について解説します。
Activiti 7 の基礎概念
ワークフローの概要
ワークフローは、決まったルールに従ってドキュメントやタスクを自動で移動させる仕組みを指します。具体的には、休暇申請、経費精算、契約承認などの業務フローが該当します。これを自動化するシステムワークフローマネジメントソフトウェアが利用されます。
主な適用領域
- 事業部門: 契約承認、注文処理、在庫入出庫チェックなど。
- 総務・人事: 出張申請、社内リクエスト、通勤経路確認など。
- 財務: 支払処理、請求書承認など。
- 顧客対応: クレーム処理、アフターサポート追跡など。
Activiti についての定義
Activiti は、jBPM の創設者 Tom Baeyens が JBoss を去った後にプロジェクト化されたものです。BPMN 2.0 規格を実装しており、API を通じてプロセス定義の発行や実行制御が可能です。Apacheライセンスに基づき配布され、Java アプリケーションサーバー、クラウド、クラスタ環境などどこでも動作します。軽量かつ高パフォーマンスな BPMN 2.0 エンジンであり、Spring フレームワークとの相性が非常に良好です。
BPMN 2.0 規格の役割
ビジネスプロセスモデル記法(BPMN 2.0)は、業務プロセスを可視化するための標準図形言語です。OMG(Object Management Group)によって策定されており、開発者と経営層の間での共通理解を深めるために使用されます。XML 形式でプロセスを記述可能で、互換性の高いすべてのエンジンで実行できます。
開発環境構築と依存関係
推奨技術スタック
- アプリケーションフレームワーク: Spring Boot 2.5+
- ワークフローエンジン: Activiti 7.1+ (Management Edition)
- データアクセス: MybatisPlus / PostgreSQL
pom.xml 設定例
Maven プロジェクトの依存関係設定です。Activiti Starter および画像生成ツールの設定を行います。
<dependencies>
<!-- Activiti コアコンポーネント管理 -->
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>${activiti.version}</version>
<type>pom</type>
</dependency>
<!-- Spring Boot 用_activiti スタートダー -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>${activiti.version}</version>
<exclusions>
<!-- MyBatis の競合を回避するため除外 -->
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- プログラム的に図を描画するライブラリ -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- JSON 変換用のコンバータ -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- SVG から PNG などへの変換用 Batik -->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-all</artifactId>
<version>1.10</version>
</dependency>
<!-- データベース駆動用 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!-- Web サーバー機能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- ORM パッチ適用版スタートダウナー -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!-- テスト・その他共通ライブラリ -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
</dependencies>
デザインツールの統合手順
Activiti 公式の Web ベースエディタ(Activiti Modeler)を自社プロジェクトに直接組み込むことで、管理者がブラウザ上でダイアグラムを描画・デプロイできる環境を整えます。
1. ソースコードの取得と配置
GitHub より、安定版である Activiti 5.22 相当の Web 応用モジュールを取得します。以下のフォルダ構成を自身のリソースディレクトリへコピーしてください。
- 対象パス: `modules/activiti-webapp-explorer2`
- 展開先: 対象プロジェクトの `src/main/resources/static` ディレクトリ直下
また、バックエンド制御に必要な以下のクラスを `activiti` パッケージ配下に配置します。
- StencilsetRestResource
- ResourceController
- ModelRepositoryService
2. 設定ファイル修正
application.yml にコンテキストパスを設定し、外部からのアクセスを制御します。
server:
servlet:
context-path: /workflow
3. 多言語サポート (日本語化)
エディタ画面を日本語表示にするための操作が必要です。
resources/static/stencilset.jsonの追加設定src/main/resources/static/editor-app/i18n/zh-CN.jsonを準備し、メッセージキーを読み込めるように JavaScript を更新。editor-app/app.jsを修正し、ブラウザ言語が Chinese なら日本語設定、それ以外なら English で起動するようにロジックを変更。
4. モデルコントローラーの実装
空のプロセスモデルを作成し、エディタ画面へ遷移させるコントローラークラスを以下のように記述します。
@Controller
@RequestMapping("/design")
public class DesignController {
@Autowired
private RepositoryService repositoryService;
@Autowired
private ObjectMapper jsonMapper;
/**
* 新しいプロセスモデル作成エントリーポイント
*/
@GetMapping("/start-model")
public void initializeModel(HttpServletRequest request, HttpServletResponse response) {
try {
String processName = "給与承認ワークフロー";
String processKey = "salary_approval";
String description = "本モデルは給与支給承認業務を定義します";
// 新規モデルインスタンス化
Model model = repositoryService.createModel();
model.setName(processName);
model.setKey(processKey);
model.setDescription(description);
// メタ情報の JSON 構築
ObjectNode metaInfo = jsonMapper.createObjectNode();
metaInfo.put("name", processName);
metaInfo.put("description", description);
model.setMetaInfo(metaInfo.toString());
repositoryService.saveModel(model);
// Canvas データの初期化
ObjectNode editorJson = jsonMapper.createObjectNode();
ObjectNode stencilSetJson = jsonMapper.createObjectNode();
stencilSetJson.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorJson.replace("stencilset", stencilSetJson);
ObjectNode processProperties = jsonMapper.createObjectNode();
processProperties.put("process_id", processKey);
editorJson.replace("properties", processProperties);
repositoryService.addModelEditorSource(model.getId(), editorJson.toString().getBytes(StandardCharsets.UTF_8));
// エディタ画面へリダイレクト
String redirectPath = request.getContextPath() + "/modeler.html";
String queryParam = "?modelId=" + model.getId();
response.sendRedirect(redirectPath + queryParam);
} catch (Exception e) {
throw new RuntimeException("モデル作成エラー:" + e.getMessage(), e);
}
}
}
上記のセットアップ完了後、以下 URL をブラウザでアクセスすると、ワークフロー設計画面が表示されます。
http://localhost:8080/workflow/design/start-model
データベーステーブル構造
設計したモデル情報は、主に以下の表に格納されます。
- ACT_RE_MODEL: モデルのメタデータ(ID、名前の保持)
- ACT_GE_BYTEARRAY: エディタ用 JSON バージョンおよびイメージバイナリ情報