VisualStudioCodeでPlantUMLを動かしてみた【初リリース】

プログラミング勉強歴5か月ぐらいの@Re96kn11です。

今回はVisualStudioでPlantUMLを使ってみました。

##なぜUMLを書こうと思ったのか
プログラミングでゲーム開発などをやっていると、コードがどんどん汚くなっていって開発が億劫に感じることがしばしば。そこでコードの全体図を把握するためにURLを書いてみることにチャレンジしました。

##環境構築をしよう
###VSCodeのインストール方法
1. [VisualStudioCode](https://code.visualstudio.com/download)(以下VSCode)からインストーラーをダウンロード
2. インストーラーを起動しドライブ内に保存
3. VSCodeを起動
4. メニューが英語のため日本語に変換する(英語がいい方はスルー)  
[Visual Studio Code[vsCode]日本語化](https://qiita.com/ntkgcj/items/e77331932c7983dea830)[@ntkgcjさんの記事]を参考にさせていただきました！！

###PlantUMLのインストール方法
[Visual Studio Code で UML を描こう！](https://qiita.com/couzie/items/9dedb834c5aff09ea7b2)[@couzieさんの記事]を参考にさせていただきました！！


##では早速書いていこう！！
plantUMLの書き方については、[【新人教育 資料】第4章 UMLまでの道 〜クラス図を書いてみよう編〜](https://qiita.com/devopsCoordinator/items/8d2af381c1c469103459)[@devopsCoordinator]さんの記事を参考にせていただいています。

###作りかけのゲームのUMLを書いてみた結果
```NepuLeagueVR.pu
title NepuLeagueVR

package GameManager{

  class GameManager{
      FixedUpdate();
  }

  enum GameState{
        INIT,
        START,
        MODE,
        READY,
        STAGE1,
        STAGE2, 
        STAGE3,
        BOSS,
        FINISH,
        END
    }
}

class UIManager{
    -qText: Text
    -count: Text
    -ansText: Text
    activeText(f: bool)
    SetSentence(setnence: string)
    SetAnswer(answer: string)
    InitCount()
}

class ObjectManager{
    -qObj: GameObject
    -aObj: GameObject
    -stQpos: Vector3
    -stApos: Vector3
    
    Start()
    SetQuestion(f: bool)
    MoveQuestion(speed: float, dpoint: float)
    SetAnsObj(s: bool)
    MoveAnswer(speed: float)
    IncorrectMove(float shedSlope)
    ResetApos()
    InitPosition()
}

class QuestionManager{
    +ansWords: char[]
    -qNumber: int
    +sentence: string
    +answer: string

    Start()
    ChooseQuestion(qCount:int, qAlChoose: int[])
    InitQuestion()
}

class DataManager{
    +speed: float
    +dpoint: float
    +shedSlope: float
    +nQ: int
    +collectAns: int
    +qCount: int
    +nQUestion: int
    +ansSentence: string
    +qDvide: bool
    +qChoose: bool
    +ansInput: bool
    +ansHit: bool
    +qAlchoose :int[]   
    
    InitDataManager(i:int, b:bool, s:string)
    ResetQuestion(b:bool)
}

class HitJudge{
    OnCollisionEnter(Collision collision)
}

class AnswerManager{
    +inputField: InputField
    InputAnswer()
    InitText()
    JudgeAnswer(ansSentence: string)
}

class EnemyController{
}

class SoundManager{
}

UIManager -right-> DataManager : 参照
QuestionManager -up-> DataManager : 参照 
QuestionManager --> UIManager : 参照
QuestionManager --> ObjectManager : 参照
GameManager --> AnswerManager : 参照
GameManager --> DataManager : 参照
GameManager --> QuestionManager : 参照
GameManager --> ObjectManager : 参照
GameManager --> UIManager : 参照
HitJudge --> DataManager : 参照
AnswerManager --> DataManager : 参照
AnswerManager --> UIManager : 参照
AnswerManager --> QuestionManager : 参照
```


図はこんな感じです。
![NepuLeagueVR.png](https://qiita-image-store.s3.amazonaws.com/0/143527/ac82e176-ff19-4750-39ab-7d82dc706b41.png)


##反省点と学び
オブジェクト指向もくそもないめちゃくちゃな図になってしまいました。
設計もせずに書き連ねるとろくなシステムが出来上がらないことが一目瞭然ですね(笑)
PlantUMLを使えばクラス図で全体の様子を把握しやすくなるのでとても便利だと感じました。
このゲームはまだ作成途中なのでUMLを用いてきれいな設計に直してから開発に取り組んでいきたいと思います。少しずつではありますが、Unityや設計に強くなれるように初心者ながら頑張っていきたいと思います。