【Atom】最新のPlantUMLをインストールしてbreak文をループ内に書く方法

前回の記事で、Atomのplantuml-viewerを導入する方法を書きました。

AtomでPlantUML形式のコードをリアルタイムプレビューさせる環境の構築手順をまとめました。テキストのみで書くためgitで管理がしやすいです。パーツの位置は自動調整され、リアルタイムでUMLを確認できるので、UML作成が捗ります。

しかしこの手順だと、最新のplantuml.jarではなく、少し古いバージョンがインストールされるため、以下のページにあるようなアクティビティ図のbreak文などPlantUMLの新しい記法が書けません。

Please provide the ability to break from loops. Today what I have to do is this: @startuml start ... went wrong?) is (yes) ->no; stop @enduml

今回はplantuml-viewerで新しい記法が使えるように、最新のplantuml.jarをインストールします。

私の環境は以下の通りです。

環境 バージョン
MacOS 10.13.2
Atom 1.23.2
plantuml-viewer 0.7.2
アクティビティ図のbreak文は、こちらの公式マニュアルには説明が無いので、まだ非公式(動作保証されていない)の予約語である可能性があります。

PlantUMLのバージョンを確認する

PlantUMLの最新バージョン

PlantUMLのリリースノートによると、現時点の最新バージョンは「V1.2018.0 (4 Jan, 2018)」です。

PlantUMLのリリースノート

「plantuml-viewer」で使われているPlantUMLのバージョン

plantuml-viewerのコードを見ると、内部ではnode-plantumlが使われていました。そして、node-plantumlのplantuml.jarのコミットログから、リリースノートに記載されている「V8047 (28 Sep, 2016)」が使用されていることが分かります。

githubのnode-plantuml/plantuml.jarのコミットログ

最新のPlantUMLをplantuml-viewerにインストールする

方法は2つあります。どちらか一方だけでOKです。

  1. plantuml-viewerが参照している既存のplantuml.jarを最新版に差し替える。
  2. PLANTUML_HOMEという環境変数に最新のplantuml.jarへのパスを設定する。

おそらく作者は2の方法を想定していると思いますが、1の方法の方が直感的で、普段のAtomの起動方法を変えなくて良いので、私はこちらを採用しています。

[方法1] 既存のplantuml.jarを最新版に差し替える

curlで最新のplantuml.jarをダウンロードして、plantuml-viewerが参照しているディレクトリに配置します。

以下を実行したら、あとはいつも通りにAtomをDockなどから起動するだけです。

## plantuml.jarのバックアップを念のため取っておく
$ cd ~/.atom/packages/plantuml-viewer/node_modules/node-plantuml/vendor/
$ cp -p plantuml.jar plantuml.jar_org

## 最新のplantuml.jarをダウンロードする
$ curl -L http://sourceforge.net/projects/plantuml/files/plantuml.jar/download -o ./plantuml.jar
$ ls -l
-rw-r--r--  1 stedplay  staff  7497782  1  9 04:15 plantuml.jar
-rw-r--r--  1 stedplay  staff  5457970  1  7 06:35 plantuml.jar_org
$

## 新旧のplantuml.jarのバージョンを確認する
$ java -jar plantuml.jar -version
PlantUML version 1.2018.00 (Fri Jan 05 04:42:56 JST 2018)
...省略...
$ java -jar plantuml.jar_org -version
PlantUML version 8047 (Fri Aug 26 00:59:30 JST 2016)
...省略...
$
最新のPlantUMLはこちらのページからもダウンロードできます。

[方法2] PLANTUML_HOMEに最新のplantuml.jarへのパスを設定する

PLANTUML_HOMEという環境変数については作者がこのIssueで軽く言及されていて、これを利用してplantuml.jarを切り替えられるようになっているようです。

ターミナルからAtomを起動したい方は、こちらの方法でも良いかもしれません。

コマンドでAtomを起動できるようにする

まず、メニューバーの[Atom] > [Install Shell Commands]を選択します。
こうすることによってターミナルでatomと実行すると、Atomが起動するようになります。

コマンドでatomを起動できるようにする

コマンドでAtomを起動する

そして以下を実行すると、最新のplantuml.jarが読み込まれている状態でAtomが起動します。

## 最新のplantuml.jarをダウンロードする
$ curl -L http://sourceforge.net/projects/plantuml/files/plantuml.jar/download -o /usr/local/bin/plantuml.jar

## 環境変数を設定して、Atomを起動する
$ PLANTUML_HOME=/usr/local/bin/plantuml.jar atom

もしくは以下のように、Atom起動前に~/.bash_profileに環境変数を登録しておく方法もあります。

$ echo 'export PLANTUML_HOME=/usr/local/bin/plantuml.jar' >> ~/.bash_profile
$ source ~/.bash_profile
$ atom

メニューバーの[Atom] > [Init Script]から開けるinit.coffeeに

process.env.PLANTUML_HOME = '/usr/local/bin/plantuml.jar'

と追記すれば、Atom起動時に環境変数に代入されるかなと思ったのですが、これがロードされる前にplantuml.jarがロードされていて、効果がありませんでした。できればこの方法がベストだったのですが、残念。

break文を使ってアクティビティ図を表示してみる

サンプルコード

例えば、ファイル操作でありがちな以下のフローを表現したいとします。

  1. ファイルを開く。
  2. ファイルの中身を読む。
  3. EOF(end of file)まで読んだら、5に飛ぶ。(ループを抜ける)
  4. 「何か」をして、2に戻る。
  5. ファイルを閉じる。

これをPlantUMLで書くと以下のようになります。ループの条件は無限ループするように表現しています。

@startuml
start
:open file;
repeat
  :read file;
  if (end of file) then (true)
    break
  else
  endif
  :do something;
repeat while (true) is (true)
:close file;
stop
@enduml

最新バージョンで表示すると

end of filetrueの場合に、breakでループを抜ける表現ができました。

最新のPlantUMLでbreak文を使ったUMLを表示

古いバージョンで表示すると

ちなみに古いバージョンだと、break文が認識できなくてSyntax Errorとしてエラー表示されます。

古いPlantUMLでbreak文を使ったUMLを表示

まとめ

Atomのplantuml-viewerに最新のPlantUMLをインストールして、新しい記法であるbreak文を使うまでの手順をまとめました。

plantuml-viewerのplantuml.jarのアップデートを待つことなく、自由に新しい記法が使えるようになりました。これでUMLの表現の幅が広がり、設計も捗ります。

今回はPlantUMLをインストールする方法を試行錯誤して調べた結果を並べてみたので、記事が冗長になってしまいましたが、その過程で学ぶことも多かったので良しとします。