PlantUML の使い方
- PlantUML の使い方 (今回)
- シーケンス図
- クラス図
- ユースケース図
- アクティビティ図
- 状態遷移(ステートマシン)図
- コンポーネント図
- skinparam
- PlantUML 実行用のバッチファイル
今回は PlantUML の使い方の説明です。
PlantUML とは
最近、プログラムの設計書などで UML を使うのが浸透してきていますが、 この UML を書くのはわりと面倒です。CASE ツール, Doxygen などでは、クラス図を自動生成してくれますが、 ユースケース図やシーケンス図は自分で書く必要があります。
PlantUML はテキストから UML のダイアログを作成するフリーのツールです。 これを使えば UML をテキストでサクサク書けるようになります。 テキスト派としてはうれしいツールです。
例えば、次のようなテキストからシーケンス図が作成できます。
@startuml plantuml_simple.png Foo -> Bar : メッセージ Foo <-- Bar @enduml

PlantUML には次のような利点があります。
- 素早く書ける
-
UML 図の作成がかなり速くなります。
WYSIWYG のわかりやすさを否定する気はありませんが、 キーボードとマウスの往復はやはり面倒なものです。
また、ツールと組み合わせれば、図を確認しながら書く事もできます。
-
UML 図の作成がかなり速くなります。
- ソースのコメントに書ける
-
ソースに書けるので、 Doxygen
と組み合わせてドキュメントを作成するといったこともできます。
設計書と実際のソースとの乖離というのはよくあることです。 コメントとの乖離もめずらしくないですが、 比較的乖離の危険性は少なくなります。
-
ソースに書けるので、 Doxygen
と組み合わせてドキュメントを作成するといったこともできます。
- マージが可能
-
Git など最近
はやりの分散型バージョン管理システムではファイルをロックすることができません。
そのため、バイナリや XML ファイルの管理には不向きです。
PlantUML はテキストで書くので、分散型バージョン管理システムでも使えます。
-
Git など最近
はやりの分散型バージョン管理システムではファイルをロックすることができません。
そのため、バイナリや XML ファイルの管理には不向きです。
- ツールとの連携
-
コマンドラインプログラムなので、
Doxygen を始め、 Word, Redmine といったいろいろなアプリケーションとの連携もできます。
-
コマンドラインプログラムなので、
Doxygen を始め、 Word, Redmine といったいろいろなアプリケーションとの連携もできます。
いいところばかりではなく、欠点もあります。
- 細かいレイアウトができない
-
レイアウトはある程度、自分で考えて作ってくれるので、
速く書ける分、自由にレイアウトすることができません。
-
レイアウトはある程度、自分で考えて作ってくれるので、
速く書ける分、自由にレイアウトすることができません。
- 記法を覚える必要がある
-
わりと直感的に書けるようになっているため、
覚えるのはそれほど大変ではありませんが、
WYSIWYG のツールに比べると覚えることは多くなります。
記法の説明も行っているので、このブログの記事が参考になればと思います。
-
わりと直感的に書けるようになっているため、
覚えるのはそれほど大変ではありませんが、
WYSIWYG のツールに比べると覚えることは多くなります。
対応している UML 図には以下のようなものがあります。 各 UML 図の書き方に関しては次回以降をご覧ください。
- シーケンス図
- クラス図
- オブジェクト図
- ユースケース
- アクティビティ図
- 状態遷移図
- コンポーネント図
出力は PNG, SVG などに対応しています。
シーケンス図の場合は ASCII アートでの出力もできます。 ただ、日本語を使用すると位置がそろいません。
,---. ,---. |Foo| |Bar| `-+-' `-+-' | message | |------------->| | | | | |<- - - - - - -| ,-+-. ,-+-. |Foo| |Bar| `---' `---'
インストール
PlantUML は Java で書かれたツールで、クロスプラットホームで使えます。Java
OpenOffice や Eclipse などがインストールされていれば、 Java(JRE) も入っているでしょう。 ない場合は以下のサイトからダウンロードしてインストールしてください。PlantUML
PlantUML の jar ファイルは PlantUML のダウンロードページからダウンロードし、 好きなところに置いておきます。Graphviz(dot)
シーケンス図以外の UML を使う場合には Graphviz(dot) が必要になります。 dot はデフォルトでは以下の実行ファイルが呼び出されます。OS | 実行ファイル |
---|---|
Windows | C:\Program Files\Graphviz X.XX\bin\dot.exe |
Unix 系 | /usr/bin/dot |
- 環境変数 GRAPHVIZ_DOT
- 起動時のオプション -graphvizdot
$ java -jar "plantuml.jarのパス" -testdot
日本語
シーケンス図では日本語もそのまま使えます。ただし、テキスト形式(ASCII アート)で出力したい場合には使えません。
シーケンス図以外では dot を使用します。 Windows であればほぼ問題ないと思いますが、 Graphviz(dot) のフォントが日本語を表示できるものに設定されてある必要があります。
ただし、 SVG で出力する場合にはフォントの設定に関係なく日本語も OK です。
コマンドライン
PlantUML はソースコードのコメント内やテキストファイルに書かれた定義を元に画像ファイルを生成します。コマンドは以下の形式です。$ java -jar "plantuml.jarのパス" [option] 入力ファイル [...]
なお、あまり使い勝手がいいとは言えませんが、 GUI もあります。
-gui オプションを指定して起動するか、 Windows で jar ファイルをクリックすると起動します。
追記
plantuml.jar の指定を省略できるように bat ファイルを作成しました。入力ファイル
入力ファイルにはファイルまたはディレクトリー(フォルダー)を指定します。ディレクトリーを指定した場合にはディレクトリー内の以下の拡張子のファイルが対象となります。
- txt
- c, cpp, h
- java
- tex
- html, htm
$ java -jar plantuml.jar "dummy/**.cpp"
dummy のフォルダー、サブフォルダー内の cpp ファイルが対象
出力ファイル
出力ファイルは UML の定義に書かれたファイル名で、 入力ファイルからの相対パス の位置に出力されます。入力ファイル: sample.txt
@startuml images/sample.png Foo -> Bar : メッセージ Foo <-- Bar @endumlコマンド:
$ java -jar plantuml.jar d:\home\foo\src\sample.txt
d:\home\foo\src\images\sample.png ファイルが生成
ソースファイルなどに定義を記述する場合は、 階層構造を持っていると出力先がバラバラになってしまいます。
こういった場合には -o オプションを使って出力先をフルパスで指定します。
コマンド:
$ java -jar plantuml.jar -o d:\home\foo\doc d:\home\foo\src\sample.txt
d:\home\foo\doc\images\sample.png ファイルが生成
出力フォーマット
出力フォーマットはデフォルトでは PNG の画像ファイルです。 これを変更する場合には -tformat のオプションを使用します。オプション | 出力フォーマット |
---|---|
-tsvg | SVG 画像 |
-teps | EPS(Encapsulated PostScript) 画像 (Doxygen の latex 出力などで使用) |
-ttxt | ASCII アート [シーケンス図] |
-tutxt | 罫線などに Unicode を使った文字アート [シーケンス図] |
-txmi | XMI [クラス図] |
-thtml | html ファイル [クラス図] |
例えば、定義で sample.png というファイル名にして、-tsvg を指定すると sample.png という名前の SVG ファイルが出力されます。
その他オプション
その他の役に立ちそうなオプションを紹介しておきます。オプション | 説明 |
---|---|
-h[elp] | ヘルプを表示 |
-v[erbose] | verbose モード。処理中の内容を出力します。 |
-config FILE | 各ダイアグラムで共通して読み込むファイルの指定。 配色、フォントなどを共通して変更したい場合(skinparam)に使用します。 |
-version | バージョンの出力。 |
-checkversion | PlantUML の更新チェック。 新しいバージョンが出ているかサイトにチェックしに行きます。 |
-p[ipe] | 入力を標準入力、出力を標準出力に変更。 他のツールと連携時に役に立ちます。 |
-language | PlantUML のキーワードの一覧を出力。 Emacs などで PlantUML 用のモードを作る場合に使われます。 |
Doxygen との連携
Doxygen と連携して使用するためには、以下の手順となります。- コメント内に UML 定義を記述
- 定義部分は Doxygen 用のコメントとならないようにする
- PlantUML の出力画像を表示するように指定
- PlantUML で画像ファイルを作成
- Doxygen を実行
(プロジェクトルート)/ ├ src/ ソースフォルダー └ doc/ ドキュメントフォルダー ├ images/ 画像フォルダー └ Doxyfile Doxygen の設定ファイル
コードの記述
Doxygen のコメント外で UML 定義をし、 それから作成される画像を @image で指定して、表示させます。/// @image html plantuml_simple.png "UML のサンプル" /// // @startuml plantuml_simple.png // Foo -> Bar : メッセージ // Foo <-- Bar // @enduml
次は Doxygen の条件コマンド(@if, @endif) を使った例です。 DontIgnorePlantUMLCode が定義されていないので、 @if の中身が無視されてるようになっています。
/// @image html plantuml_simple.png "UML のサンプル" /// /// @if DontIgnorePlantUMLCode /// @startuml plantuml_simple.png /// Foo -> Bar : メッセージ /// Foo <-- Bar /// @enduml /// @endif
さらに Doxygen のエイリアス(ALIASES)の機能を使うと、もう少し簡単にコードを書けます。
Doxyfile への追加行 :
ALIASES = "startuml{1}=@image html \1\n@image rtf \1\n@image latex \1\n@if DontIgnorePlantUMLCode" ALIASES += "enduml=@endif"ソースコードでの記述 :
/// @startuml{plantuml_simple.png}
/// Foo -> Bar : メッセージ
/// Foo <-- Bar
/// @enduml
(注) @startuml と { の間にはスペースは入れない。
PlantUML の実行
doxygen の画像用フォルダーは Doxyfile の IMAGE_PATH で指定します。 これを出力先フォルダーとして PlantUML を実行し、画像を作成します。$ java -jar "plantuml.jar のパス" -o "Doxygen の Image フォルダー" 入力ファイル [...]例:
$ java -jar plantuml.jar -o doc\image src\**.h src\**.cpp
Doxygen の実行
画像を準備したあとは通常通り Doxygen を実行します。$ cd doc $ doxygen Doxyfile
Doxygen, PlantUML 連携スクリプト
Doxygen との連携ってややこしいと思った方もいるのではないでしょうか。実際めんどくさいので、 PlantUML 、 Doxygen の実行を一発でできるような Ruby スクリプトを作成しました。 ALIASES の設定などもスクリプト内で自動で行っています。 スクリプトの引数に plantuml.jar と Doxyfile を渡して実行します。
ruby run_umldoxy.rb "plantuml.jar のパス" [Doxyfile]
このスクリプトを使う場合は以下の点に注意してください。
- Doxyfile に書く各パスは絶対パスか Doxyfile からの相対パス
- コードの記述はエイリアスを使った形式
- java, doxygen に PATH を通す(通常インストール時に設定されます)
また、この Ruby スクリプトを Windows でも使いやすくするようにバッチファイル(run_umldoxy.bat) も作成しています。
使用する場合は plantuml.jar, run_umldoxy.rb, run_umldoxy.bat を同じフォルダーに置いてください。
次のような使い方ができます。
- ショートカットをディスクトップに作成し、 Doxyfile をドラッグ &ドロップ
- Doxyfile を .doxy のような拡張子で作成し、関連付け
- Doxyfile のあるフォルダーにコピーして、ダブルクリック
REM Tool settings SET PLANTUML_JAR=c:\jar\plantuml.jar SET RUN_UMLDOXY_RB=c:\jar\run_umldoxy.rb
skinparam の記述などで config ファイルを使いたい場合は config.txt の名前で、 run_umldoxy.rb と同じフォルダーに置いてください。
なお、スクリプト内部で行っている処理を詳しく書くと次のようなものです。
- Doxyfile の解析
- Doxyfile の一時ファイルを作成
- PlantUML 用の AREAS を設定
- IMAGE_PATH が指定されていない場合は Doxyfile のフォルダー直下の images フォルダーを指定
- PlantUML を実行
- Graphviz(dot) のパスが DOT_PATH で指定されていれば、そちらを使用
- IMAGE_PATH を出力フォルダーに指定
- INPUT, FILE_PATTERNS から入力ファイルを指定
- Doxygen を実行
その他のツールとの連携
doxygen 以外にも Word や Redmine など連携できるアプリがあります。- MS Word
- Eclipse
- Emacs
- Redmine
- PlantUML 編集用エディター
- その他
オンラインデモ
ネット上で確認できるオンラインデモサーバーが用意されています。 日本語にも対応していて、 ちょっと UML の記述を試して見るのに便利です。フリーの日本語入力ソフト (IME) 機能比較
IME を選んで使ってますか?
今回は Windows 用のフリーな日本語入力ソフト(IME)の機能比較です。
ただし、機能は変換精度や速度といったものではなく、
私が便利だなと思うプラスアルファ的な機能についてです。
対象 ソフト
対象としたソフトウェアは OS に標準でついている Microsoft IME (MS-IME)、 Microsoft Office IME 2010 (Office IME) と無料で公開されている 2 つの IME です。追記 2013-01-25
Office IME 2010 の比較を追加しました。Google IME
-
Google が作成した IME です。
Google 検索の"もしかして"機能の担当者と PRIME の作者が中心になって開発したそうです。
Baidu IME
-
Baidu IME は中国発の検索サイト Baidu(百度)
が出している IME です 。
フリーソフトをインストールする時、よく一緒にインストールしないか 訊いてくるので、目にしたことがある人は多いのではないかと思います。
Office IME 2010
-
Office IME 2010 では、 Google の IME に対抗してか、かなり機能強化されました。
Office 2010 製品についてきますが、過去の Office 製品のライセンスがあれば、 リンク先の Microsoft のサイトから無料でダウンロードすることができます。
(これをフリーと呼ぶのかというと微妙ですが)
ただ、これは Windows 8 では使えません。 Windows 8 の MS-IME の方がより新しいからということらしいのですが、 こちらは Windows 8 を持っていないので、比較していません。
なお、フリーの IME としては Social IME もあるのですが、 Windows 7 に未対応のようなので、対象外としました。
機能比較
私が便利だと思う機能とその対応の一覧です。 赤字の機能は特に欲しいなというものです。機能 | MS-IME | Office IME | Baidu | |
---|---|---|---|---|
Emacs での入力 | X | ○ | ○ | ○ |
予測変換(サジェスト) | △ | △ | ◎ | ○ |
同音異義語の説明 | ○ | ○ | ◎ | X |
専門辞書の追加 | ○ | ◎ | △ | ◎ |
自動更新 | X | ○ | ○ | △ |
カタカナ英語変換 | ◎ | ○ | ○ | △ |
変換精度や速度といったものは、 大事なところだとは思いますが、比較はなかなか難しく、やっていません。 使ってみた感覚ではどれもそれほどかわらない気がします。
ただ、"わたしはなまえはなかのです(私の名前は中野です)" を変換したところ、 MS-IME 、 Google は一発で変換できますが、 Baidu は 2 番目の変換候補でちょっと変換精度が落ちるかもしれません。
MS-IME と Office IME 間でいうと Microsoft いわく、かなりのパフォーマンス改善が行われています。
変換速度に関しては 2 倍らしいです。
Emacs での入力
もともと他の IME を試してみたきっかけは Windows 7 では MS-IME と Emacs 24 の組み合わせで、 うまく動かなかったためです。 Goole , Baidu IME では問題なく動きます。ただし、 Windows 7 でも Office 2010 にすると入力できるようになりました。
予測変換(サジェスト)
予測変換は携帯やスマホでは大抵ついている機能で、 書いている途中で、予測して候補を出してくれます。入力しづらい携帯と違って、それほど必要性は感じないのですが、 予測がうまくいったときには入力が速くなります。
MS-IME にも予測変換機能はついているのですが、 他のと違い、過去に入力したものの中からしか予測しません。 それだとあまり役に立たないので、 △ にしています。
Office IME ではずいぶん予測がよくなったのですが、 予測対象はやはり過去に入力したものに限るようです。
Google と Baidu では Google の方が候補数が多く、 表示する候補数の指定もできるので、 若干上かなと思います。
![]() |
![]() |
Google IME | Baidu IME |
同音異義語の説明
例えば、 "あげる" を変換するときに、 どの漢字にすればいいのだろうと迷う時があります。こんな時に説明を表示を表示してくれる機能です。 これがあるとかなり助かります。
MS-IME は簡単な説明だけですが、 Google は用例も表示してよりわかりやすいです。
![]() |
![]() |
MS-IME | Google IME |
専門辞書の追加
MS-IME で最初から幾つかオプション辞書が入っています。Google IME にもほぼ同様の辞書が入ってますが、 Baidu IME はサイトからダウンロードして追加します。
辞書 | MS-IME | Office IME | Baidu | |
---|---|---|---|---|
郵便番号 | ○ | ○ | ○ | ○ |
単漢字 | ○ | ○ | ○ | X |
顔文字 | ○ | ○ | ○ | ○ |
人名地名 | ○ | ○ | X | ○ |
記号 | ○ | ○ | ○ | X |
カタカナ語英語(後述) | ○ | ○ | ○ | △ |
人それぞれで専門分野があるので、 その分野の辞書が入っていると、変換精度が上がります。 私の場合は科学技術用語や IT 用語の辞書が欲しい辞書です。
こういった専門辞書を追加できる機能の比較です。
◎ : Baidu IME は Baidu のサイトから公開されています。 ネットで使うような辞書が中心ですが、いろいろな辞書があり、私が欲しかった IT 用語辞書もあります。
○ : MS-IME も辞書を追加することができます。 広く使われているだけあって、いろんな辞書が公開されています。
ただ、 Baidu と違い、個人が公開しているものなので、 欲しい辞書があまりなかったり、有料だったりします。 ◎ : Office IME では オープン拡張辞書 としてサイトからの追加の体制が整ってきています。
数はまだまだこれからという感じですが、 IT 用語辞書に関しては Microsoft が作成しています。
△ : Google IME には残念ながら、辞書の追加機能はありません。
ユーザー辞書として、追加することはできなくはないですが、 使いにくいです。
自動更新
言葉は日々増えていきます。特に有名人の名前などは頻繁に増えてくるので、 辞書や IME の自動更新があったほうがいいでしょう。
Google IME では自動更新はできるようです。 Baidu は辞書の更新はよくわかりませんが、 クラウド上のサーバーと連携する クラウド入力 という機能があります。
Office IME では Windows Update を利用して辞書の更新がされるようになりました。
また、最新語辞書というのも用意されています。
追記 2013-12-19
辞書、 IME の自動更新はいいと思うのですが、 ユーザー辞書の同期やクラウド変換にはセキュリティー上の注意が必要です。カタカナ英語変換
カタカナ英語を入力すると英語のアルファベットに変換してくれる機能です。 例えばこまんどと入力すると
Commandと変換してくれます。
私の場合は英語のスペルがうろ覚えのものが多く、 英語の文章を書いている時やコーディング中に役に立っています。
とくにコードを書くときには CommandClass のように単語を繋げて書くことが多く、 スペルチェックを使えないため、非常に助かります。
MS-IME と Google IME は変換の候補として、 小文字、 大文字、 先頭だけ大文字 の 3 つが出てきます。 Baidu IME だけ、 小文字しか選べません。
コーディングでは、 先頭大文字やすべて大文字の単語も使うので、 小文字だけだと使いづらく、 △としています。
また、 MS-IME では変換候補が複数ある場合には単語の説明も表示してくれます。
![]() |
![]() |
![]() |
MS-IME | Google IME | Baidu IME |
Office IME ではなぜか単語の説明がなくなり、この点に関しては機能ダウンしています。
追加した IT 用語辞書でも、 説明の部分をマウスでクリックすることにより英語への変換ができるようになっています。
ただ、英語にできるのは嬉しいのですが、キー入力中にマウスを触らせるというのは ありえない操作性かなと思います。
公開されている Google のカタカナ英語辞書
Google IME 用のカタカナ英語辞書を作成しているプロジェクトがあります。 Google IME も標準でカタカナ英語辞書がつくのですが、 かなり多くの単語が登録されているので、 カタカナ英語変換をよく使う私としてはかなり嬉しい辞書です。ただし、 2 点ほど問題があります。
- ユーザー辞書としてしか追加できない
-
Google IME では辞書の追加機能が無いため、ユーザー辞書として追加します。
ユーザー辞書ですので、変換候補としてカタカナよりも先に英単語がきてしまいます。 サイトのページにも書いてありますが、 IME に覚えさせるまで、普通にカタカナを書くのが、結構めんどうになります。
また、インストールも少し大変です。 - 英単語に説明が入っている
-
辞書の登録がうまくいっていないだけかもしれませんが、
変換後の英単語に () 書きで説明が入っています。
このため、変換候補に著しく長い単語が入ってきて、かなり見づらいです。
私の場合は、一回 () の説明を Emacs の置換機能で全部とってから、追加しなおしました。
その他の特徴機能
Google IME, Baidu IME で特有の機能もあげてみます。Google IME
- もしかして機能
-
Google 検索には、スペルミスをした場合などで、
正しそうな単語を推測してくれる機能があります。
この IME 版です。
サイトのものはかなり便利なのですが、日本語入力としてはそれほどでもないです。 ただ、しゅみれーしょん
のようにちょっと紛らわしものを入力した時、 一般的な候補を上げてくれるため、ミスが減ります。
- 日付変換
-
きょう
と入力すると2012/10/29
といった日付に変換できる機能です。
メールを書くときなど、つい明日、明後日など書きたくなります。 しかし、メールのような相手がいつ読むかわからないものは、日付もつけておいた方が親切です。 そういった時、この機能があるとすぐに変換できます。
Baidu IME
- 和英辞書
- 入力中の文字で和英辞書を引き、その説明を表示する機能です。
非常に惜しい機能です。 引いた英語を変換結果として使えるのであれば、使い手があるのですが、 表示するだけなので、使い勝手の悪いただの辞書にしかなっていません。
- スクリーンキャプチャー
- 現在の表示画面をキャプチャーして、
クリップボードまたは画像ファイルに保存する機能です。
あると便利ですが、そういうフリーソフトもいっぱい出てますし、 Baidu IME 使わなくても同じことはできます。
まとめ
3 つの中では Baidu IME が格段に落ちる感じです。Baidu は同音異義語の説明がないのと、カタカナ英語変換が不十分なのが、 致命的です。
ただ、ネット系の辞書には強いので、 ネット上でよく文章を書く人にはいいかも知れません。
Emacs を使うのであれば、 もう Google IME で決まりです。
ただ、使わないにしても、 MS-IME と Google IME を比べると Google の方がやや便利かなといった感じです。
というように以前、結論を書いていたのですが、 Office IME 2010 の登場で若干抜き返した気がします。
Office を購入しているのであれば、 Office IME がいいのではないかなと思います。
結局、 デフォルトのままで、別の IME をインストールしなくてもいい という状況なってきました。
しかし、今までほぼ独占だったソフトに競合ができ、 お互いにいいものになっていくのは非常に喜ばしいことだと思います。 次は Google IME の巻き返しを期待したいところです。
追記 2013-12-26
紹介した Baidu ですが、 IME で入力したデータを勝手に送信するひどいアプリでした。 主に問題なのは、次の 2 点です。- 入力データと一緒にパソコンの ID を送信する
- 送らないように設定しているのに、実は送っている
すでにインストールされた方は削除してください。