57
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OPENLOGIAdvent Calendar 2018

Day 4

plantUMLで業務フローを整理する

Last updated at Posted at 2018-12-03

本記事はOPENLOGI AdventCalendar 4日目の記事です。

11月からオープンロジ社に入社したPMの小川です。Qiita初投稿です。
まずは今、自分がちょこちょことやっているplantUMLを利用した業務フローの整理について書きます。

plantUMLの入手

本家はこちら→PlantUML 概要

環境

MacBook Air 13-inch, 2017
macOS Mojave 10.14.1
エディタ:Visual Studio Code 1.29.1
パッケージ管理:Homebrew 1.8.3

インストール

インストールはこの辺の記事を参考にしました。→Visual Studio Code で UML を描こう!

Homebrew でgraphvizをインストール

brew install graphviz

Homebrew で javaのインストール

brew cask install java

参考→Homebrewでjavaをインストールする

Visual Studio Codeの拡張機能でPlantUMLをインストール→有効化。

↓画像参照
Visual Studio CodeのPlantUML拡張

動作確認

  • Visual Studio Codeにて新規ファイルを作成し、拡張子を「.pu」にして保存。
  • ファイルに下記を入力し、"alt+D"でプレビューを表示。

プレビューが表示されれば準備完了です。

test.pu
@startuml
title シーケンス図
アリス -> ボブ: リクエスト
ボブ --> アリス: レスポンス
@enduml

スクリーンショット 2018-12-03 12.43.33.png

業務フローの整理

整理する業務を見つけ、資料を集める

いきなり業務フローを整理しようと思っても、入社したての頃は何も分かりません。
まず最初に整理したい業務に当たりを付け、社内のwiki、Slack、GoogleDriveなどから情報を集めましょう。

今回は例として、弊社サービスのオープンロジを介して、ユーザーが荷物をエンドユーザーに届けるまでの業務フローをシーケンス図にまとめます。

オープンロジの詳しいサービスの説明はこちらです↓
日々の物流業務をもっと効率的に。物流アウトソーシングサービス OPENLOGI

ファイルを用意する

  • Visual Studio Codeにて新規ファイルを作成し、適当な名前をつけ、拡張子を「.pu」にして保存します。
  • 開始行に@startuml、最終行に@endumlを入力。必要ならばタイトルを入力する。
@startuml
title:オープンロジを利用してユーザーが荷物をエンドユーザーに届けるまで

@enduml

登場人物(オブジェクト)を洗い出す

オープンロジでは、ユーザーの荷物を預かり、必要に応じてエンドユーザーに荷物を送る物流業務のアウトソーシングサービスを利用できるプラットフォームを提供しています。

  • ユーザー:荷物を送る人。
  • オープンロジ:物流プラットフォームサービス
  • エンドユーザー:荷物を受け取る人。

tips:オブジェクト名の書き方

test.pu
actor ユーザー as user
participant オープンロジ as opl
actor エンドユーザー as enduser

分類子.png

actor ○○participant ○○で書いた部分がオブジェクトです。
オブジェクトには他にもdatabaseboundaryentityなどが利用できます。
as ☓☓を使って、その後で省略して入力できます。

最初のうちはいろいろ悩まずにparticipant ○○だけでよいと思います。四角いので。

メッセージ(関係)を取り出す。

  • ユーザーはオープンロジを通して荷物を預けます。
  • エンドユーザーはオープンロジを経由して荷物を受け取ります。

tips:メッセージ(関係)

user -> opl : 荷物
opl -> enduser : 荷物

メッセージ.png

☓☓ -> △△ でメッセージ(関係)を記述できます。コメントは:で区切って入力します。改行を使う場合は\nを使います

スクリーンショット 2018-12-03 13.37.52.png

これだけ見れば非常にシンプルな業務フローですが、オープンロジは物流プラットフォームサービスのため、実際に荷物を保管する提携先の倉庫会社や荷物を運ぶ配送会社のオブジェクトが必要です。

  • 倉庫会社:荷物を預かる会社。
  • 配送会社:荷物を運ぶ会社。

一旦、オープンロジを外して荷物の動きに着目すると、次のようになります。

スクリーンショット 2018-12-03 14.13.03.png

業務としては

  • ユーザーの荷物を預かる→入庫
  • ユーザーの荷物をエンドユーザーに届ける→出庫

の大きくふたつに分かれることがわかります。

tips:グループ化

groupendで囲むとグループが作成できます。

group 入庫
    user -> dc : 配送を依頼
    wh -> dc : 荷物を届ける
end

グループ.png

tips:アクティベート(activate:活性化)


dc -> wh : 荷物を預ける
activate wh

wh -> dc : 荷物を渡す
deactivate wh

活性化.png

activate "オブジェクト名"を付けると、オブジェクトから上下に伸びる縦の破線が強調されます(活性化)。deactivate "オブジェクト名"で解除されます。

入庫:荷物を倉庫に預ける

繰り返しになりますが、オープンロジはユーザーと倉庫の間をつなぐプラットフォームサービスです。これまで煩雑だったユーザーと倉庫の間の連絡をシンプルに実現します。

例えば、倉庫会社に荷物を預けるには倉庫に事前に荷物が届くことを連絡しておく必要があります(=入庫依頼)。オープンロジを利用することで倉庫への事前の連絡がスムーズに作成できます。

スクリーンショット 2018-12-03 15.05.15.png

tips:オブジェクトのグループ化

box "グループ名" /box endを使うとオブジェクトのグループを作成できます。

box
boundary "ユーザー側\nオープンロジ" as opl_user
database "サーバ&DB" as DB
boundary "倉庫側\nオープンロジ" as opl_wh
end box

tips:alt/elseによるグループ化

groupendではなくaltelseendを使うことで、条件分岐を表現できます。

出庫:荷物を倉庫からエンドユーザーに届ける

入庫と同様に、出庫もオープンロジを通して簡単に出庫依頼を作成できます。
出庫依頼は1日2回に分けて倉庫に連絡され、順次出庫されます。

スクリーンショット 2018-12-03 23.10.47(2).png

tips:refによるリファレンスの挿入

refを用いて、図中にリファレンスを挿入できます。

ref over "オブジェクト名"
 コメント〜
end ref

tips:skinparamで色を変える

skinparamを設定すると、図の色を変更できます。
参考→Atom+PlantUMLで見た目もいい感じのシーケンス図を作成する

今回はskinparam backgroundColor transparentを設定して、グループの背景色を透過させています。

一旦完成

(オープンロジを利用して)ユーザーが荷物をエンドユーザーに届けるまで.png

PlantUMLはテキストベースでフロー図が作れるため、他の作図ツールに比べて管理コストが低いのがよいところだと思います。色つけなどいろいろできますが変に拘ると作業が進まなくなるので、まずは簡単な範囲でさくっと図解していきましょう。

57
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?