俺とお前と大五郎シーケンス

UML図を初めて憶えたころは、勤務先で買っていたRational Roseを使って書いていた。その後はJudeとその後継のastah*を使っていた。最近はUMLを書く頻度がかなり減って、たまに書く時はOmniGraffleを使っていた。しかし専用ツールに比べると、OmniGraffleなどのドローツールはとても書きづらい。UMLの意味を解釈したサポートを全くしてくれないからだ。

最近久しぶりに、ある程度まとめてシーケンス図を書く必要があり、改めてツールを探していた。結果、テキストベースでかけるPlantUMLに落ち着いた。Emacsで生活しているので、Emacsで編集しプレビューできるようにもした。

PlantUML自体の導入

macの場合は、homebrewを使えば簡単に入る。

brew install graphviz
brew install plantuml

Emacs plantuml-mode

package-installを使ってplantuml-modeを入れた上で、以下の設定をinit.elに追加した。

(add-to-list 'auto-mode-alist '("\\.plantuml\\'" . plantuml-mode))
(setq plantuml-executable-path "plantuml")
(setq plantuml-default-exec-mode 'executable)
(setq plantuml-output-type "png")

-charset UTF-8のオプションを追加しないと、日本語の入ったファイルのプレビューに失敗するので、それも追加した。別フレームでのpreviewも使いたいことがある。デフォルトのままで可能だが、C-u C-u C-c C-cと長いので、C-c C-pのショートカットを追加した。

(defun plantuml-preview-frame (prefix)
  (interactive "p")  
  (plantuml-preview 16))
(add-hook 'plantuml-mode-hook
          (lambda ()
            (define-key plantuml-mode-map (kbd "C-c C-p") 'plantuml-preview-frame)
            (setq plantuml-executable-args
                  (append plantuml-executable-args '("-charset" "UTF-8")))))

flycheckのチェッカも追加したが、plantumlのsyntax checkはあまり速くない上にエラーメッセージにはほぼ情報がないので、デフォルトではオンにしていない。

(flycheck-define-checker plantuml
  "plantuml checker"
  :command ("plantuml" "-syntax")
  :standard-input t
  :error-patterns ((error line-start "ERROR" "\n" line "\n" (message) line-end))
  :modes plantuml-mode)  
(with-eval-after-load 'flycheck
  (add-to-list 'flycheck-checkers 'plantuml))

付録:図のソース(PlantUML)

@startuml
skinparam dpi 300
hide footbox
participant "俺" as ore
participant "お前" as omae

ore -> omae: 大五郎
activate ore
        activate omae
                ore <-- omae: 大五郎
        deactivate omae
deactivate ore

@enduml