Swiftコードから自動的にUML図を生成する方法
SwiftのコードからUML(クラス図)を生成するスクリプト(palaniraja/swiftuml)を公開している方がいたので紹介します.
肥大化したプロジェクトを理解するためにクラス図などのダイアグラムを用いると便利です.JavaならInteliJ Ideaの機能を用いて生成するなど方法がありますが,XcodeやApp CodeにはSwift用のそのような機能は残念ながら存在しません.swiftumlのスクリプトを使ってPlantUML(テキストベースのUML記述言語)を出力すれば,PlantUMLのソフトを使ってダイアグラムを表示できます.
環境を準備する
- swiftですのでmacOSを対象とします.
swiftuml実行環境
- swiftumlのスクリプトを実行するために以下をbrewでインストールでします.
zsh
brew install sourcekitten
brew install jq
- 必要に応じてNode.jsをインストールしてください.
PlantUML実行環境
- PlantUMLを公式ページからダウンロードします.
- 必要に応じてJDKをインストールしてください.
brew install sourcekitten
brew install jq
また,ダイアグラムの描画に以下のコマンドが必要です.
brew install graphviz
このソフトを使わなくてもweb上で描画するシステムもあります.
swiftumlスクリプトを実行する
GitHub(palaniraja/swiftuml)から必要なプログラムを入手します.沢山のファイルがありますが,必要なのは次の二つです.
- plantuml.js
- plantuml.sh
この二つを適当な場所に配置します.
スクリプトは次のコマンドで実行します.このコマンドは,directory_name以下の階層に存在する全ての.swiftファイルを対象にしてPlantUMLを生成し,uml.txtに書き出します.
find directory_name | grep .swift | xargs -L 1 sh plantuml.sh | grep -v @enduml | grep -v @startuml >> uml.txt
筆者の環境では,Resourcesに入っているswiftgenによって生成されたファイルが上手く扱えなかったため,無視するようにしました.
find directory_name | grep .swift | grep -v Resources | xargs -L 1 sh plantuml.sh | grep -v @enduml | grep -v @startuml >> uml.txt
コマンドの補足説明
PlantUMLで記述されたファイルは@startumlで始まり,@endumlで終わります.上のコマンドでは読み込んだswiftファイル毎にこれらのキーワードが付加されてしまうため,一旦全て削除しています.(| grep -v @enduml | grep -v @startuml の部分)
ダイアグラムを描画する
まず,uml.txtのファイルを開き,ファイルの先頭行に@startuml,最後の行の後に@endumlを追加します.(先ほどのコマンドで全て消してしまったため追加する必要があります.本来は追加するためにsedコマンドを書きたかったのですが,macだとややこしいのでやめました)
公式ページからダウンロードしたjavaアプリを起動しuml.txtを選択します.
ダイアグラムが表示されます.
問題点等
使ってみたところ以下のような問題点がありました.解決策をご存じの方おられましたら教えていただけると幸いです.
- 大規模すぎるとPlantUMLのソフトで一部しか表示できない(途中から切れてしまいます)
- 表示されるのは継承関係のみでそのほかの関係性は表示されません.(どのクラスを利用しているなど)
- 最新のSwiftの記法に対応していない部分があります(下図,PlantUMLの問題で&を使った継承など)
Author And Source
この問題について(Swiftコードから自動的にUML図を生成する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/jyu0414/items/c4d387c31f983dba688e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .