SAP Ruum ではじめるノーコードなワークフロー開発

## はじめに

この記事は [SAP Advent Calendar 2020](https://adventar.org/calendars/5047) の12月18日分の記事として執筆しています。 

コロナ禍で多くのイベントがオンライン開催となっていますが、SAP のテクニカルカンファレンスである「SAP TechEd」もそのひとつです。参加無料で多くの最新情報に触れる絶好の機会ですので、ご興味ある方は、以下にアクセスしてみてください。

- [SAP TechEd 2020 Online](https://pages.sapteched.com/sap/sapteched2020/index)（2020年12月8日〜10日）
- [SAP TechEd Japan 2020 Online](https://saptechedjapan.com/)（2020年12月15日〜16日）

例年、セッションタイプはレクチャー（40分の講義形式）ではなく、ワークショップ（120分のハンズオン形式）を優先的に選択しています。最近では、自身の [SAP Cloud Platform](https://www.sap.com/japan/products/cloud-platform/get-started.html) のトライアルアカウントを利用するハンズオンも増えてきたものの、やはりトライアルでは利用できないサービスに触れることができるワークショップは魅力的です。

今年は、「[SAP Ruum](https://www.ruumapp.com/)」というサービスを利用したノーコードなワークフロー開発に触れる機会を得ました。ワークショップ当日から7日間のみ有効なアカウントを利用していますので、大急ぎで執筆しています。マテリアルは以下の GitHub リポジトリから入手可能です。

- [INT162 - No-Code Academy: Learn to Build Process Extensions Without Code](https://github.com/SAP-samples/teched2020-INT162)

## SAP Ruum とは？

SAP Ruum とは、SAP 社が提供するノーコードなプロセス自動化ツールです。[公式ページ](https://www.ruumapp.com/)では以下のように紹介されています。ワークショップで作成したワークフローは、SAP Ruum が持つ多面的な特徴のひとつに過ぎないようです。

> Ruum empowers your non-technical users to build, integrate, and run departmental processes, without compromising IT security.

### 少しだけ歴史を振り返る

2019年5月に以下の SAP News がありました。
[SAP、社内コラボレーションツールのスタートアップRuumに1,000万ユーロを出資](https://news.sap.com/japan/2019/05/sap%E3%80%81%E7%A4%BE%E5%86%85%E3%82%B3%E3%83%A9%E3%83%9C%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83/)

こちらのニュースの後半に以下のように記載されています。SAP はベンチャーキャピタル、アクセラレータとしてスタートアップを支援していますが、Ruum もその活動の一環で投資先となった有望スタートアップのひとつだったようです。

> Ruumは、SAP.iOビジネスユニットがリードする社内インキュベーションプログラムであるSAP.iO Venture Studioの投資先スタートアップです。

また、ワークショップ資料でも歴史が紹介されています。最初は、プロジェクトマネジメントとコラボレーションのために開発されたそうです。現在もこれらの性格が失われたわけではありませんが、マーケティングのために「ノーコード」や「オートメーション」というキーワードを強調しているように思います。
![Screen Shot 2020-12-13 at 15.13.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/c81fa54a-05e0-f973-b425-09718974d4d7.png)

### SAP Ruum が担う領域

SAP Ruum の[公式ページ](https://www.ruumapp.com/)には、大きな文字で **Automate the long tail of your processes without code** とあります。直訳すると「コードなしであなたのプロセスのロングテールを自動化する」となりますが、この **業務プロセスのロングテール** というのが SAP Ruum のターゲットです。

標準化された業務領域には高度にインテリジェント化された標準ワークフローを適用し、中間的な領域には [SAP Cloud Platform Workflow](https://help.sap.com/viewer/product/WORKFLOW_SERVICE/Cloud/ja-JP) などのプラットフォームを活用した拡張開発を適用し、さらにその先のロングテールには SAP Ruum を適用する。こうしたオファリングのカバレッジの広さも SAP らしいと言えるのではないでしょうか。
![Screen Shot 2020-12-13 at 15.04.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/58bddcb1-3738-38f8-8ce7-90532db1924d.png)

## ワークフローのシナリオ

ワークショップで作成したワークフローは下図の通りです。4つのフォームを持つ典型的なワークフローです。
![Screen Shot 2020-12-13 at 16.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/e528ce3a-19cf-57a8-4f62-7b4d6b907e59.png)

## SAP Ruum にログインする

### ログイン画面

早速、SAP Ruum にログインしてみます。ワークショップ用に割り当てられたユーザでログインしました。
![screenshot-open.ruumapp.com-2020.12.13-15_41_29_masked.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/1dbe8892-b85a-21d9-4a01-0d19c58a25f9.png)

### ホーム画面

ログインするとホーム画面が表示されますので、プロファイルを確認してみましょう。ワークショップ用に割り当てられたユーザは、``Enterprise Plan`` 契約でした。``Enterprise Plan`` では、OData API アクセスやシングルサインオンがサポートされるようです。プランの詳細は[こちら](https://www.sapruum.com/pricing)から確認可能です。
![screenshot-open.ruumapp.com-2020.12.13-16_00_07_masked.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/bc6cf987-4d7e-c0ad-4eb7-863d7a063fb5.png)

## Ruum テンプレートを作成する 

### テンプレートの作成開始

メニューペインを開き、``Templates`` メニューを選択します。テンプレート画面が表示されたら、右上の ``+ New`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-16_29_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/364263c8-cb01-6278-7b6a-c38defe895a4.png)

``Create Template`` ポップアップが表示されたら、必要な情報を入力し、``Next`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-16_28_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/8e23c5c8-6810-d14c-5d20-d22375aa5bb6.png)

### テンプレートのデザイン（レイアウト編）

まっさらなテンプレートが作成されました。初期状態では、以下のようにひとつだけのセクションを持っています（``Give this section a name`` というタイトルが表示されている背景が白いキャンバス部分）。
![screenshot-open.ruumapp.com-2020.12.13-16_37_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/4c76a627-db06-710f-bca8-6e9254b9628d.png)
このキャンバスにワークフローのシナリオに沿ったセクションを描き、フローを定義しています。キャンバスをクリックすると、``Type of Insert`` というプロンプトが表示されて、入力待ち状態となります。``Type`` の部分にテキストを入力すると、それがそのまま反映されます。以下では、"Please full in ..." を入力しました。
![screenshot-open.ruumapp.com-2020.12.13-16_59_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/c6df4bfa-d033-0dc2-db34-3c2cc0e3354c.png)
``Insert`` はボタンになっており、クリックすると以下の選択肢からオブジェクトを配置することができます。ワークショップの中では、``Task``、``Custom Field``、``Role Field`` 等を利用しました。
![screenshot-open.ruumapp.com-2020.12.13-17_01_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/5d4432a6-ff41-7559-98fb-29e5c58ce646.png)
``Custom Field``を選択すると、事前定義されたカスタムフィールドから項目を選択可能です。複数選択 OK なので、表示順を気にしながらカスタムフィールドを複数選択し、``Add Fields`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-17_07_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/e20da341-9ae3-5645-0f52-2a9ce9ad024b.png)
するといい感じにレイアウトしてくれます。この要領でセクションを仕上げていきます。各フィールドには、``Mandatory``（必須）、``Read Only``（読み取り専用）といった属性を定義できますので、申請者や承認者などロールに応じた適切な属性をセットしていきます。
![screenshot-open.ruumapp.com-2020.12.13-17_07_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/85c8209b-3bf8-0752-e45c-033d0e70fa8d.png)

### テンプレートのデザイン（フロー編）

ワークショップで作成したワークフローでは、申請者から ``Financial Controller`` にタスクを渡す必要があります。さきほどの ``Insert`` の ``Role Field`` を選択してから、``Financial Controller`` を指定し、``Add to Canvas`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-17_22_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/f0ba04e6-ab92-f14b-d7b3-893064568f89.png)
続けて ``Financial Controller`` が申請内容を確認するためのフォームを指定します。セクションの右下にある ``Add Transition`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-17_24_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/7b62830c-a3e2-1c28-576d-58dabe0410f4.png)
ボタンのテキスト（ラベル）、遷移先のセクション名、ステップタイプ（``Data Collection Step``、``System Connector``、``Approval``）を設定し、さいごに ``Create`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-17_40_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/a2352b85-d108-b338-2380-132409dc4865.png)
遷移先のフォームすなわち ``Financial Controller`` が申請内容を確認するためのフォームがまっさらなセクションとして作成されました。
![screenshot-open.ruumapp.com-2020.12.13-17_45_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/bf2ede85-c058-268b-c5a6-8cf62e6a56a6.png)

### ステップタイプ

ステップタイプは以下の3種類があります。Data Collection Step は、申請情報そのものや中間レビューで追記されるスタータスやメモなど、要するに最終的な承認（Approval）に至るまでに必要なデータ収集ステップです。

- Data Collection Step
- System Connector
- Approval

``Approval`` の場合、デフォルトで ``Approval 1`` という承認者と、``Send Back``、``Reject``、``Approve`` の3つの遷移先が事前定義されています。承認者は必要に応じて追加できます。
![screenshot-open.ruumapp.com-2020.12.13-18_20_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/1aa36f3c-2d93-cb56-cc51-23cc957df83f.png)
``System Connector`` の場合、作成時に指定したコネクタに項目マッピングした上で OData API が呼び出されます。こちらもデフォルトで ``On Success`` と ``On Error`` という遷移先が事前定義されていますので、呼び出し結果の成否によって適切な後処理をセットします。
![screenshot-open.ruumapp.com-2020.12.13-18_28_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/52684f97-5190-c2bf-28e4-0632f6275836.png)

### 完成形はこちら

複数のセクションから構成される Ruum が完成しました（講師の方が事前に用意してくださっていたお手本のテンプレートをキャプチャしているので、Ruum テンプレートのタイトルが変わっています）。
![screenshot-open.ruumapp.com-2020.12.13-18_44_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/9f88eb94-03d8-3157-cbe6-3870993199d5.png)

## Ruum を実行する 

### ワークフローの起票

Ruum Template 画面右上の ``Create Ruum`` を選択します。Ruum Template をワークフロークラスとすると、Ruum はワークフローインスタンスという関係です。クラスからインスタンスを生成（起票）するようなイメージです。

各項目に適切な値を入力し、``Submit`` ボタンを選択します。なお、``APPLICANT`` にも ``FINANCIAL CONTROLLER`` にも自分自身のユーザを指定しています。自己完結シナリオの悲しいところです。
![screenshot-open.ruumapp.com-2020.12.13-18_53_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/67f96e09-99fa-6646-e6a4-aa0eb967b1dd.png)

### ワークフローのレビュー

自作自演ですが、Financial Controller のつもりで必要事項を入力し、``Submit for Financial Approval`` ボタンを選択します。また、``FINANCIAL APPROVAL`` にも自分自身のユーザを指定しています。
![screenshot-open.ruumapp.com-2020.12.13-18_58_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/5b3110d5-afe2-b138-0c6b-3e53ad0f9623.png)

### ワークフローの承認

いよいよ承認ステップです。申請内容を確認の上、``Approve`` ボタンを選択します。
![screenshot-open.ruumapp.com-2020.12.13-19_02_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/1c01f938-65b5-a2a2-778a-8bd03e21c181.png)
承認されると Purchase Order を起票するための OData API が呼び出されます。画面をリフレッシュし、実行結果を確認してみましょう。``Succcess`` で返されているので、無事にプロセスが完了したようです。
![screenshot-open.ruumapp.com-2020.12.13-19_03_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/99126112-10e6-00b5-23b2-92021d654ac5.png)

## ワークフローの状態確認

### Ruums（Ruum インスタンス一覧）

ワークショップのエクササイズでは、Applicant、Financial Controller、Financial Approval など複数のロールを自作自演してしまったので、どのように新規タスクを検知・確認するのか分かりませんでした。実際には各ロールに応じてタスクが遷移するので、各ユーザからどのように見えるのか確認してみましょう。ホーム画面の Ruums タブから Ruum インスタンスの一覧を確認できます。
![screenshot-open.ruumapp.com-2020.12.13-19_40_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/44dd0b2f-4fa1-1761-236e-0133c19f4891.png)

### Task List（タスクリスト一覧）

一番上にリストアップされている ``SAP TechEd - Investment Request - Session 2 - 7`` を選択し、``Task List`` タブを選択すると、この Ruum のタスク（＝ ``Insert`` で ``Task`` を指定したもの）を確認できます。
![screenshot-open.ruumapp.com-2020.12.13-19_40_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/906946cc-e764-e03a-c9e5-59053e83e0ae.png)
特定の Ruum を指定していない状態だと、すべての Ruum のタスクが表示されます。未処理のものに限定するなど、適切にフィルタリングしないとタスクが特定するのが難しそうです。
![screenshot-open.ruumapp.com-2020.12.13-19_40_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/8a0233b3-f80e-3430-acbb-7d7017f8bccd.png)

### Approvals（承認履歴一覧）

``Approvals`` タブでは、承認履歴を一覧表示で確認できます。
![screenshot-open.ruumapp.com-2020.12.13-19_59_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/8d4a5d0a-35d7-4884-d72f-bc3426113573.png)

## その他の Ruum テンプレート

ワークショップでは、ノーコードなワークフロー開発がテーマでしたが、[少しだけ歴史を振り返る](#少しだけ歴史を振り返る)で触れた通り、「最初は、プロジェクトマネジメントとコラボレーションのために開発された」そうです。その名残りをその他の Ruum テンプレートを通じて垣間見ることができます。

### テンプレート一覧

ワークショップ用のテンプレートカテゴリ以外にも、以下のテンプレートカテゴリが事前定義されています。

- Operations
- SAP Fucused Build
- Management
- Sales & Customers
- Project Management
- Marketing & Content
- HR Process Package
- Nonprofit NPOs

![screenshot-open.ruumapp.com-2020.12.14-11_00_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/3685eb4d-0f13-9c7a-ed02-0ff61c736fd8.png)

### テンプレートの例

以下は、Project Managemment カテゴリの Project Planning テンプレートです。プロジェクトのゴール定義、役割と責任範囲、マイルストンから定義されています。小規模プロジェクトのコラボレーションワークスペースといった感じです。
![screenshot-open.ruumapp.com-2020.12.14-11_01_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/4444a674-7046-10df-f98f-647f793397ed.png)

## さいごに

### ワークショップを終えて

ワークショップで利用したユーザの権限では、カスタムフィールドの追加や、システムコネクタの変更などはできませんでした。ある程度の規模感を超えると、カスタムフィールド定義やロール定義に対して統制をかけることが困難になると思うので、どのような管理ダッシュボードを備えているのか確認できなかったのは残念です。機会があれば、それらの管理者視点での検証もしてみたいと思います。

ワークショップでは比較的シンプルなワークフローを題材としましたが、どうしてもアサイン先の自動提案や、ビジネスルールに応じた複雑な分岐、他アプリとの通知連携などが気になってしまいます。ただ、こちらもある程度の複雑度を超えたら、SAP Ruum での実現を諦めるというのが答えではないかと思います（＝他のオファリングで実現すればよい）。ついつい難しく構えてしまいますが、SAP Ruum のようなサービスは、とりあえず触れてみて、フィードバックし、改善されていくというループを回すことが大切なのではないでしょうか。

### SAP Ruum への想い

社内コラボレーションツールとして誕生した SAP Ruum は、ビジネスユーザからの生のフィードバックを反映して、プロセス自動化ツールへの進化していったのではないかと想像します。それほどビジネスの現場には自動化したいプロセスがあるということです。

SAP のコアビジネスである Intelligent Suite がカバーする領域は、一般的に大規模導入であり、導入期間はどうしても長期化しがちです。また、同時にロングテール領域まではカバーできません（カバーすべきでもありません）。いままさにこのロングテール領域を RPA に代表されるクイックなソリューションが席巻しています。しかしながら、特に RPA は新たなシャドー IT を生み出す危険性と常に隣り合わせです。

こうした中、グローバル・エンタープライズ・ソフトウェアの雄である SAP が、ワークフローという比較的標準化しやすい領域に的を絞って、スタートアップ発のソリューションの進化を支えていることを、大変好ましく感じます。スタートアップならではの「やわらかさ」と、エンタープライズならではの「かたさ」がちょうどよくブレンドされた SAP Ruum の今後を暖かく見守りたいと思います。

### SAP Ruum に触ってみよう

さいごになりましたが、[公式サイト](https://www.sapruum.com/)からサインアップすると、Starter エディションを無償利用できます。残念ながらワークフローは作成できませんが、事前定義テンプレートを利用した社内コラボレーションや、キャンバスにテンプレートをデザインする UX などは体験できますので、実際に触れてみてください！

### 参考リンク

- https://www.sapruum.com/
- https://www.sap.com/japan/products/ruum.html
- https://news.sap.com/2020/12/empower-developers-low-code-no-code-tools-sap-btp-enhancements/
- https://techcrunch.com/2020/12/08/sap-latest-enterprise-software-giant-to-offer-low-code-workflow/