PlantUML + Emacs
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