最近、 PlantUML でクラス図を書くのが楽しい。
特におすすめなのが、コードレビュー時にひとつひとつのクラスを読み終わるたびに手元で PlantUML を書いていく読み方で、「PlantUML 写経」と個人的に呼んでいる。
書いたほうがいいのは、
- パッケージ(名前空間)
- クラス
- private なものは書かなくて良い
- public なものも、別に全部書く必要はない
- abstract は書いておくとよい
- 依存関係
- 継承、実装
- ほかの関係
- クラス A はクラス B のインスタンスを保持する
- “1:1”, “1:1..n”, “1:0..n” などラベルをつける
- クラス A はクラス B を利用する( “use” とラベルを付ける)
- クラス A はクラス B を生成する( “create” とラベルを付ける)
- クラス A はクラス B のインスタンスを保持する
ただし、厳密にすべてを書く必要はない。このように実装せよという指示書ではないのだから。
たとえば、依存関係が推移的に予想できるところなんかは省略すると読みやすくて良い。 class A implements AInterface
と class B implements BInterface
があり、 AInterface が BInterface に依存していて A が B に依存しているとき、全部書くとややこしくなってしまう。
PlantUML は incremental に書ける点がよい。
初見のコードを読みながら紙にクラスの依存関係を手書きすると、だいたい最初に読んだクラスを書く場所が悪くて、後で読んだクラスが紙の端に追いやられ、依存関係の線がぐちゃぐちゃになる。
PlantUML では、今読んだところまでとりあえず書いておけば、そのときの最善な配置で図を書き出してくれるので、どのクラスから書き始めればいいだろうという悩みはない。
また、レビューコメントを受けて修正されたりすると、その修正どおりに PlantUML も書き直せば最新のクラス図ができあがる。レビューのお供にとても良い。
また、依存関係が適切に整理されたコードは、 PlantUML でクラス図を作った時にも、依存が上から下に流れるように描画されてとても美しい。コードを視覚的に堪能することが出来る。
エディタは使いやすいので良いと思うが、個人的には Boost Note の Legacy App を使っている。(以前、新しい方を入れたら PlantUML 書けなかったので)
書いてる時にリアルタイムに図が更新される必要はない(むしろ視線を持っていかれるのでやめてほしい)が、図に反映されるのは簡単で速いのがいい、となって Boost Note に落ち着いている。
もともと Markdown エディタなので、 PR コメントの下書きも書けて便利。