Java silver取得したけど、では何ができるか考えた時にひとまずアプリを作ってみようと思い、始めました。
Todoアプリや家計簿アプリが定石ですが、同じCRUD機能で他のものが作りたいと思い、CRUD機能をメインとしたアプリを作成することにしました。
まずは、開発ロードマップを作成し全体の流れを把握します。
全体の流れ
①要件定義(何を作るか決める)
・家庭用監視カメラに映ったアライグマの日時、回数を積算するアプリケーションを作る。
機能要件一覧
・目撃記録の一覧表示(read)
・目撃記録の登録(create)
・目撃記録の編集(update)
・目撃記録の削除(delete)
非機能要件
・利用者は1人のみ。
→ログイン機能、ユーザー管理は作らない。
・ローカルのブラウザからアプリを起動する。
→インターネットには公開しない。
・記録件数は年間100件程度を想定。
→ページング機能は作らない想定。
・PCのブラウザのみの対応とする。
・記録はPostgresSQLに保存し、アプリを再起動しても消えないこと。
・バックアップは手動で行う。
登録(入力)のルール
・日付:必須。未来の日時の登録はできないようにする。
・時刻:必須。何時のみ。分はなし。
・回数:必須。
②基本設計
・画面設計、URL、データの骨組みを決める。
画面設計
・一覧画面(登録、編集、削除ボタンあり)
・登録画面
・編集画面
・削除の確認画面
URL設計
| 操作 | メソッド | URL | 処理後の動き |
|---|---|---|---|
| 一覧表示 | GET | /sightings | 一覧画面を表示 |
| 登録画面表示 | GET | /sightings/new | 入力画面を表示 |
| 登録処理 | POST | /sightings | 一覧画面へリダイレクト |
| 編集画面表示 | GET | /sightings/{id} | 詳細画面を表示 |
| 更新処理 | POST | /sightings/{id} | 一覧へリダイレクト |
| 削除処理 | POST | /sightings/{id}/delete | 一覧へリダイレクト |
データ設計(テーブル定義)
| 論理名 | 物理名 | 型 | 制約 |
|---|---|---|---|
| ID | id | 連番 | 主キー |
| 目撃日 | sighted_date | DATE | NOT NULL |
| 目撃時刻 | sighted_time | TIME | NOT NULL |
| 回数 | count | INTEGER | NOT NULL |
| メモ | memo | VARCHAR(255) | |
| 作成日時 | created_at | TIMESTAMP | |
| 更新日時 | updated_at | TIMESTAMP |
③詳細設計
| クラス | 役割 |
|---|---|
| Controller | URLと処理の対応づけ。画面の切り替え。 |
| Form | 画面の入力値を受け取る。入力チェックの設定。 |
| Service | 業務処理 |
| Repository | DBへのアクセス |
| Entity | テーブルの1行分を表すクラス |
*Formは「信用できない値」、Entityは「検証済みの値」を入れる箱であるため、Controllerで検証し、通ったものだけEntityに詰め替えてDBへ渡すという流れになる。
④環境構築
・JDK:21
・Eclipse:2024-12
・プロジェクトの作成:Springスターター・プロジェクト
・PostgresSQL、pdAdmin4
⑤実装
1機能作るたびにブラウザで確認する。
・一覧表示でDBから画面まで繋がる。
・入力チェックなしで登録(保存)できるようになる。
・バリデーションを追加し、画面にエラーメッセージを表示する。
・登録内容を編集できる。
・削除前の確認をつける?
・一覧表示の並び順、日付の表示形式、画面間のリンクを確認する。
⑥テスト
・正常系、異常系、境界値をテストする。
・JUnitで自動テストを作成する。
⑦振り返り
・つまずいたところ、理解したことをまとめる。
・拡張のアイデアを挙げる。