最終課題

最終課題の概要

最終課題では、実際に運用されたシステムを踏襲したアプリケーションを題材に、
サーバーサイド開発を0から取り組みプログラミングの実務の一連の流れを学びます
要件定義書を元に、テーブル定義書の作成、プログラミング、テスト項目書の作成と実施まで行います。

Viewファイル(フロントエンド制作)は完成済みのSpring Bootプロジェクトを用意していますので、バックエンド側の処理を追加していきます。

初回準備

ファイルのダウンロード

下記2点が最終課題に必要なファイルです。クリックしてダウンロードします。

inventory-management-system.zip
プロジェクト

最終課題_書類.zip(書類フォルダ)
以下を含みます。
・【最終課題】要件定義書.xlsx
・【最終課題】テーブル定義書_記入例.xlsx
・【最終課題】単体テスト項目書_記入例.xlsx

プロジェクトの準備(inventory-management-system.zip)

(1)
【inventory-management-system.zip】ファイルを展開し、「inventory-management-system」フォルダをEclipseの「workspace」フォルダに配置する。
(※「C:\pleiades\2024-12\workspace」のようなパス。これまでのjava、springプロジェクトを配置しているのと同じ階層)
(※「inventory-management-system」のフォルダが2重にならないように注意。)
↓正しく配置できている例


(2)
Eclipseでファイル > インポート を選択
→「インポート・ウィザードの選択」では「フォルダーまたはアーカイブからプロジェクト」を選択し、「次へ」


(3)
ディレクトリーボタンを押して、「inventory-management-system」フォルダを選択
→下記のように「インポート・ソース」欄に指定できればOKです。
→完了をクリック


(4)
Eclipseの「パッケージ・エクスプローラー」ビューにプロジェクトが表示され、エラーアイコン表示が出なくなったら
(読み込みには数分の時間を要します。「進行状況」ビューで進行中の処理がないか確認することを推奨)
プロジェクトをSpring Bootアプリケーションとして実行し、「http://localhost:8080/」にアクセスして下記のログイン用画面が表示されれば準備完了です。

Git管理

Git」ページを参考に、以下を実施してください。

  • リモートリポジトリの作成
    GitHubでのリポジトリ名は「ims-○○」としてください。(ローカルのプロジェクト名と異なっていても管理可能。)
  • 初回コミット
  • コラボレーターの招待

その他設定

  • DBのスキーマは新しく作成してください。(「ims」など自分で管理しやすい名前を推奨)
    →「Oracle Database」の単元を参照
  • 「DB接続」など、過去のマニュアルを読み返して適宜 必要なライブラリを導入してください。

最終課題の進め方、一連の流れ

大まかな流れとしては、各機能に対して以下の作業を実施していきます。
(1)テーブル定義書作成
(2)テーブル作成・データ追加 
(3)プログラム作成
(4)単体テスト項目書作成
(5)単体テスト実施

表にすると以下のようになります。商品マスタ~などが機能名で、対応する実施作業を記載しています。

商品マスタ企業マスタ
(仕入先/取引先マスタ)
受注入金発送
テーブル定義書作成(1)(6)○※1〇※1―※2
テーブル作成
データ追加 
(2)―※2
プログラム作成(3)
単体テスト項目書 作成(4)
単体テスト実施(5)

最初は、上表の(1)~(5)の順で、商品マスタについて一連の作業を実施します。

(1)~(6)が完了した後は実施順序に決まりはなく、商品マスタと同様に1機能ごとに一連の作業を進める(縦方向に進めていく)順序でも、
1作業項目ごとに全機能まとめて実施していく(横方向に進めていく)順序でも構いません。

※1…受注と入金テーブルは内容的に関連するので、まとめて作成、レビュー依頼してください。

※2…「受注」「入金」「発送」については一連のフローであり、「発送」に関するデータは受注テーブルに登録するので「発送」テーブルは不要です。

各作業の進め方

いずれの作業も要件定義書を元に進めます。
一般的な開発工程と異なる点として
・「要件定義書」ですが、画面設計書・基本設計も一部兼ねた内容になっています。
・本来は基本設計書や詳細設計書なども作成しますが、ここでは設計書の作成は省略します。要件定義書からどんなシステムになるか考える過程が設計にあたります。
・記載がない範囲の仕様についての疑問点は講師(実際の開発では顧客にあたる)に確認してください。

各ページに対するGetMappingは、SampleController.java内に準備されています。
このこのファイルとファイルに記載のルーティングは、必要に応じて編集・移動してください。

(1)テーブル定義書作成
・[【最終課題】テーブル定義書_記入例.xlsx ]をFMTとして使用、内容を参考にして作成
・全機能について、同じファイルの別シートに作成します。
・要件定義書 を参照して、各機能に必要なカラムを考えてください。
・ER図の作成は不要です
→テーブル定義書が作成出来たら、Slackで講師にファイルを送付し、確認を依頼してください。

(2)テーブル作成・データ追加
・テーブル定義書を元に作成

(3)プログラム作成
・デザインは完成されているので、必要な機能を追加していきます。
・必要であれば、デザインに関わる部分や属性などの値についてViewを変更・修正して構いません。
・機能ごとにControllerやFormクラスなどを適宜作成します。
ログイン機能、ページネーション、CSVファイルのデータ部分のバリデーションはEXTRAの範囲として実施します。
・プログラム完成時は、講師にレビューを依頼してください。
※定期的に(少なくとも半日に1回)プッシュしてください。

(4)単体テスト項目書作成、(5)単体テスト実施
・ファイル[【最終課題】単体テスト項目書_記入例.xlsx ]をFMTとして使用、内容を参考にして作成・実施
・機能ごとにファイルを分けて作成してください。
・エビデンス作成については、商品マスタでは必ず実施します。企業マスタ以降はエビデンス作成のみ後回しにして先を進めても構いません。(テストの作成・実施は必須)
→項目書の完成後、テスト実施後(エビデンス作成後)、の各2回の都度Slackで講師にファイルを送付し、確認を依頼してください。

スケジュールの目安

以下の表を参考に、作業を進めましょう。

商品マスタ企業マスタ
(仕入先/取引先マスタ)
受注入金発送
テーブル定義書作成
~テーブル作成・データ追加
0.5日0.5日0.5日※10.5日※1
プログラム作成3日1.5日3日4日2日
単体テスト項目書作成1日0.5日0.5日0.5日0.5日
単体テスト実施1日0.5日1日1日1日

※1 受注・入金のテーブル定義書は、内容が関連するため同時に作成します

EXTRA

「商品マスタ~発送」まで一連の作業を完了したら、EXTRAの課題として以下を順次取り組んでください。

EXTRA① 機能作成

商品マスタ等と同様に、各機能について実施します。これまでの機能と同様で、実施順序に決まりはありません。

発注ユーザーマスタログイン勤怠管理
テーブル定義書作成―※1
テーブル作成
データ追加 
―※1
プログラム作成
単体テスト項目書作成
単体テスト実施

※1…「ログイン」についてはユーザーテーブルを使用します。

ユーザーマスタ

新規登録時のパスワード入力については、以下に沿って実装しましょう。
・新規登録時のみバリデーションを有効にする
・パスワード確認用の入力項目を作成し、一致することを確認

ログイン機能

以下も併せて実装します。
・headerにログインユーザー名の表示
・各テーブルへのINSERT時に監査情報(登録者ID)の自動登録
 監査 :: Spring Data JPA – リファレンスドキュメント
・「ユーザー管理機能」は管理者権限のみリンクを表示し、アクセス可能とする(メニュー、サイドバー)
権限に応じた出し分けについて
 Thymeleaf + Spring Security integration basics

EXTRA② 諸機能の追加

各種機能を拡充させていきます。マニュアルで習った内容というよりは、ご自身で調べて作り上げていく内容になります。
エンジニアとしては自分で調べて、試行錯誤を繰り返しながらプログラムを作り上げる能力が非常に重要です。
道のライブラリを調査する、有用なものがあれば導入することも含めて検討すると良いでしょう。

CSVデータ内容のバリデーション

入金のCSV登録機能について、入金テーブルに登録するデータの内容をバリデーションします。
・最もシンプルな方法は、正規表現によるバリデーションです。
・ほかにもValidatorインターフェースでの明示的なバリデーションの実行や、Hibernate Validatorを使用してServiceメソッドでの@Validatedの使用によるバリデーションなども一案です。

メニュー、サイドバー

・要件定義書に従ってメニュー画面とサイドバーをカスタムします。
【/src/main/resources/templates/top/index.html】 と 【/src/main/resources/templates/include/sidebar.html】 に手を加えて、出勤状態に応じて表示が変わるようにします。ボタン色を変えたり、押下不可にすることも可能です。
出勤状態データを全ページで参照できるように、プロジェクト全体に対する共通処理が実装可能です。ここではControllerAdviceとModelAttributeによる参考サイトを紹介します。
参考サイト:
コントローラーのアドバイス :: Spring Framework – リファレンス
Javaの@ControllerAdviceアノテーションを完全ガイド!初心者でもわかるエラーハンドリングの基本

・更に発展的な内容として、出勤していない場合は「勤怠管理」以外の機能ページにアクセスできないようにすることにも挑戦してみてもいいでしょう。
ここではHandlerInterceptorによる実装を案内します。
参考サイト:4.3. アプリケーション層の実装 — TERASOLUNA Global Framework Development Guideline 1.0.5.RELEASE documentation
他にも、Spring Securityの認可処理を応用した実装なども考えてみてもいいでしょう。
参考サイト:Spring Security を使って独自の認可処理を実装した話 – Uzabase for Engineers

ページネーション(ページング)

各一覧ページについて、ページネーションを機能させます。
参考サイト:
Spring Bootにおけるページング #Java – Qiita
Repositoryクラス|SpringBoot、Thymeleaf プログラム自動作成(マクロ使用版)
Spring Data JPAで動的にクエリを生成する(複数ワード検索)(ページング対応) – Qiita

Enum

Enum=列挙型を取り入れて、テーブルへの登録やセレクトボックスの表示などをスマートにする方法を考えてみましょう。
参考サイト:
入門Javaのenum – Qiita
enumのおさらいメモ #Java – Qiita
Persisting Enums in JPA | Baeldung
JPA Attribute Converters | Baeldung

タイトルとURLをコピーしました