■シーケンス図

sequenceDiagram
    participant ブラウザ
    participant MemoController
    participant MemoService
    participant MemoRepository
    participant Memo

    ブラウザ->>+MemoController: HTTPリクエスト (例: GET /memos)
    MemoController->>+MemoService: getAllMemos()
    MemoService->>+MemoRepository: findAll()
    MemoRepository-->>Memo: Memoリストを作成
    MemoRepository-->>-MemoService: List<Memo>
    MemoService-->>-MemoController: List<Memo>
    MemoController-->>-ブラウザ: List<Memo>を含むレスポンス

    ブラウザ->>+MemoController: HTTPリクエスト (例: POST /memos)
    MemoController->>+MemoService: saveMemo(memo)
    MemoService->>Memo: 新しいMemoオブジェクトを作成
    MemoService->>+MemoRepository: save(memo)
    MemoRepository-->>Memo: Memoオブジェクトを保存
    MemoRepository-->>-MemoService: 保存されたMemo
    MemoService-->>-MemoController: 保存されたMemo
    MemoController-->>-ブラウザ: リダイレクトレスポンス

    ブラウザ->>+MemoController: HTTPリクエスト (例: GET /memos/edit/{id})
    MemoController->>+MemoService: getMemoById(id)
    MemoService->>+MemoRepository: findById(id)
    MemoRepository-->>Memo: Memoオブジェクトを取得
    MemoRepository-->>-MemoService: Memo
    MemoService-->>-MemoController: Memo
    MemoController-->>-ブラウザ: Memoを含むレスポンス

    ブラウザ->>+MemoController: HTTPリクエスト (例: POST /memos/{id})
    MemoController->>+MemoService: updateMemo(id, memo)
    MemoService->>+MemoRepository: findById(id)
    MemoRepository-->>Memo: Memoオブジェクトを取得
    MemoRepository-->>-MemoService: Memo
    MemoService->>Memo: 更新処理 (setDescription, setPolicy, setResult)
    MemoService->>+MemoRepository: save(memo)
    MemoRepository-->>Memo: Memoオブジェクトを更新
    MemoRepository-->>-MemoService: 更新されたMemo
    MemoService-->>-MemoController: 更新されたMemo
    MemoController-->>-ブラウザ: リダイレクトレスポンス

    ブラウザ->>+MemoController: HTTPリクエスト (例: POST /memos/delete/{id})
    MemoController->>+MemoService: deleteMemo(id)
    MemoService->>+MemoRepository: deleteById(id)
    MemoRepository-->>Memo: Memoオブジェクトを削除
    MemoRepository-->>-MemoService: 完了
    MemoService-->>-MemoController: 完了
    MemoController-->>-ブラウザ: リダイレクトレスポンス

■クラス図

classDiagram
    class ProjectApplication {
        +main(String[] args)
    }

    class MemoController {
        -MemoService memoService
        +listMemos(Model model)
        +newMemo(Model model)
        +saveMemo(Memo memo)
        +editMemo(Long id, Model model)
        +updateMemo(Long id, Memo memo)
        +deleteMemo(Long id)
    }

    class MemoService {
        -MemoRepository memoRepository
        -Random random
        +getAllMemos(): List<Memo>
        +getMemoById(Long id): Optional<Memo>
        +saveMemo(Memo memo): Memo
        +updateMemo(Long id, Memo memo): Memo
        +deleteMemo(Long id): void
        -getResult(): String
        -roll(): int
    }

    class MemoRepository {
    }

    class Memo {
        -Long id
        -String description
        -String policy
        -String result
        +getId(): Long
        +setId(Long id)
        +getDescription(): String
        +setDescription(String description)
        +getPolicy(): String
        +setPolicy(String policy)
        +getResult(): String
        +setResult(String result)
    }

    ProjectApplication --> MemoController
    MemoController --> MemoService
    MemoService --> MemoRepository
    MemoRepository --> Memo

■遷移図

graph TB
  subgraph パソコン
    browser[ブラウザ]
  end
  
  subgraph SpringBoot["Spring Boot"]
      browser --> |1. HTTPリクエスト| Tomcat[Tomcat]
      Tomcat --> |2. リクエスト転送| DispatcherServlet[DispatcherServlet]
      DispatcherServlet --> |11. ビュー選択| ViewResolver[ビューリゾルバ]
      ViewResolver --> |13. テンプレート処理| Thymeleaf[Thymeleaf(テンプレートエンジン)]
      Thymeleaf --> |14. HTML生成| ViewResolver
      ViewResolver --> |15. HTML返却| DispatcherServlet
  end
  
  subgraph JavaProgram["Javaプログラム"]
    DispatcherServlet --> |3. リクエスト処理| Controller[コントローラ]
    Controller --> |4. ビジネスロジック実行| Service[サービス]
    Service --> |5. データベース操作| Repository[リポジトリ/モデル]
    Repository --> |8. 結果返却| Service
    Service --> |9. 結果返却| Controller
    Controller --> |10. レスポンス返却| DispatcherServlet
  end

  subgraph データベース
    Repository --> |6. クエリ実行| テーブル
    テーブル --> |7. クエリ結果| Repository
  end

  subgraph テンプレート["html"]
    Thymeleaf <--> |13. テンプレート読み込み| 自分作成のhtml
  end

  DispatcherServlet --> |16. HTTPレスポンス| Tomcat
  Tomcat --> |17. HTTPレスポンス| browser

  style テーブル fill:#FFDDC1,stroke:#FF0000,stroke-width:2px
  style Repository fill:#FFDDC1,stroke:#FF0000,stroke-width:2px
  style Service fill:#FFDDC1,stroke:#FF0000,stroke-width:2px
  style Controller fill:#FFDDC1,stroke:#FF0000,stroke-width:2px
  style 自分作成のhtml fill:#FFDDC1,stroke:#FF0000,stroke-width:2px

■実装順序

  1. 静的リソースの提供
  2. Thymeleafテンプレートの設定
  3. 基本的なJavaScriptの追加
  4. データベースの設定
  5. サービス層の実装
  6. CRUD機能の実装
  7. エラーハンドリングとバリデーション