Swift 코드에서 자동으로 UML 다이어그램을 생성하는 방법

3198 단어 Swiftuml
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를 설치하십시오.

  • 또한 다이어그램을 그리려면 다음 명령이 필요합니다.

    zsh
    brew install graphviz
    

    이 소프트웨어를 사용하지 않고 웹에서 그리는 시스템도 있습니다.

    swiftuml 스크립트 실행



    GitHub(palaniraja/swiftuml)에서 필요한 프로그램을 얻습니다. 많은 파일이 있지만 필요한 것은 다음 두 가지입니다.
  • plantuml.js
  • plantuml.sh

  • 이 두 가지를 적절한 위치에 놓습니다.

    스크립트는 다음 명령으로 실행됩니다. 이 명령은 directory_name 이하의 계층 구조에있는 모든 .swift 파일을 대상으로 PlantUML을 생성하고 uml.txt에 내 보냅니다.

    zsh
    find directory_name | grep .swift |  xargs -L 1 sh plantuml.sh | grep -v @enduml | grep -v @startuml >> uml.txt
    

    필자의 환경에서는 Resources에 들어있는 swiftgen에 의해 생성 된 파일을 잘 처리 할 수 ​​없었기 때문에 무시하도록했습니다.

    zsh
    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 문제로 &를 사용한 상속 등)

  • 좋은 웹페이지 즐겨찾기