# プロジェクト経験概要
## 業務システムの機能開発・パフォーマンス改善
Javaを用いた業務システムの開発に従事。発注一覧画面をはじめとする業務機能の開発・改善を担当しました。
主に、非同期処理の導入によるUX改善、検索機能の実装、SQLのパフォーマンス最適化、API検証、単体・結合テストなどを実施しました。
単に機能を実装するだけでなく、ユーザーの操作性、システムの応答性能、保守性、品質を意識した開発に取り組みました。
**使用技術**
- バックエンド:Java、Spring(@Async)、MyBatis(@SelectProvider)
- フロントエンド:Thymeleaf、JavaScript、jQuery、Ajax
- データベース:SQL
- 開発・テストツール:Postman
**担当工程**
- 機能設計・実装
- パフォーマンス改善
- テスト仕様書作成
- 単体・結合テスト
- テストエビデンス作成
# チーム情報
- **チーム構成**:【PM 1名、開発メンバー 3名、別チーム含めると10名ほど】
- **自身の役割**:アプリケーション開発担当
- **チーム全体の担当範囲**:【要件定義から結合テストまで一気通貫】
- **自身の担当範囲**:非同期処理の実装、画面制御、動的SQLの実装、SQLパフォーマンス改善、API検証、テスト設計・実施
# 開発・実装内容① 非同期処理の導入によるUX改善
### 【概要・開発した機能】
大量データを扱う機能において、Javaの非同期処理とAjaxを組み合わせ、処理中も画面操作を継続できる仕組みを実装しました。
### 【課題・問題点】
大量データの処理を同期的に実行する構成では、バックエンド側の処理完了までユーザーを待たせることになり、画面操作が制限される問題がありました。
特に処理時間が長い場合、ユーザーの待機時間が増加し、操作性が低下することが課題でした。
### 【打ち手・使用した技術】
自身が以下の実装を担当しました。
- Javaの`@Async`アノテーションを用いて、時間のかかる処理を非同期で実行する仕組みを導入
- 重い処理の完了を待たずにHTTPリクエストへ応答する構成に変更
- フロントエンドではjQueryのAjax通信を使用し、画面全体が処理完了を待つ状態を回避
- 非同期処理の完了後に画面を更新し、最新のデータを反映する制御を実装
バックエンド側の処理方式とフロントエンド側の両方を見直すことで、ユーザーが処理完了を待たずに操作できる構成としました。
【成果】
重いバックエンド処理による画面操作の待機を軽減
ユーザーが処理中も画面操作を継続できるよう改善
非同期処理の導入によって体感的なレスポンスを向上させ、操作性を改善
開発・実装内容② 画面特性に応じた同期・非同期通信の実装
【概要・開発した機能】
Thymeleafによるサーバーサイドレンダリングと、Ajaxを利用した非同期通信を組み合わせ、機能特性に応じた画面制御を実装しました。
【課題・問題点】
画面表示やデータ更新をすべて同期的に処理すると、一部のデータ更新だけが必要な場合でも画面全体の再表示が発生し、操作性が低下する可能性がありました。
一方、すべての処理を非同期化すると、画面状態の管理が複雑になるため、機能に応じた通信方式の選択が必要でした。
【打ち手・使用した技術】
Thymeleafを使用したサーバーサイドレンダリングによる画面表示を実装
非同期通信が適した処理にはjQueryのAjaxを使用
処理内容に応じて同期・非同期の通信方式を使い分け
データ更新後の画面反映を考慮した制御を実装
【成果】
必要な箇所に非同期通信を適用することで、不要な画面遷移や待機を軽減
既存のサーバーサイドレンダリング方式を活用しながら、画面の操作性を改善
処理の特性に応じた実装方式を選択し、操作性と実装の複雑さのバランスを考慮した構成を実現
開発・実装内容③ @SelectProviderを活用した動的SQLの実装
【概要・開発した機能】
複数の検索条件を組み合わせる検索機能について、MyBatisの@SelectProviderとSQL Builderを活用した動的SQLの生成処理を実装しました。
【課題・問題点】
検索条件の組み合わせによって実行するSQLが変化するため、条件ごとにSQLを個別定義すると、コードの重複や保守性の低下につながる課題がありました。
また、検索条件が追加・変更された際にも、既存の検索ロジックを修正しやすい構成が求められました。
【打ち手・使用した技術】
MyBatisの@SelectProviderを使用し、Java側でSQLを動的に生成する仕組みを実装
SQL Builderクラスを活用し、検索条件に応じてSQLの構成要素を組み立てる処理を実装
検索条件の組み合わせに対応できるよう、条件分岐を整理
XMLへのSQL記述ではなく、Javaコード内でSQL生成ロジックを管理する構成を採用
検索条件の変更や追加を考慮し、SQL生成処理を一元的に管理できる設計を意識しました。
【成果】
複数条件を組み合わせた柔軟な検索機能を実現
SQL生成処理をJava側に集約し、検索条件の変更に対応しやすい構成を実現
業務要件に応じた動的SQLの実装を通じて、複雑なデータ取得処理に対応
開発・実装内容④ SQL最適化による画面レスポンス改善
【概要・開発した機能】
発注一覧画面など、大量データを扱う機能に対してSQLクエリの最適化を実施し、画面レスポンスの改善に取り組みました。
【課題・問題点】
データ件数が多い環境では、SQLによるデータ取得処理が画面表示速度に影響するため、データベースへの負荷とレスポンスの改善が課題でした。
特に一覧画面は利用頻度が高く、データ取得処理の効率がユーザーの操作性に直結するため、SQLの見直しが必要でした。
【打ち手・使用した技術】
対象画面で使用されるSQLクエリを確認
データ取得処理における改善可能な箇所を検討
SQLクエリを修正し、データ取得処理の効率化を実施
大量データを扱う場面を考慮して、画面レスポンスの改善に取り組んだ
具体的な改善内容:【要記入:どのSQLを、どのように変更したか】
【成果】
SQLの最適化により、データベース負荷の軽減と画面レスポンスの改善を実現
大量データを扱う業務画面の表示性能向上に貢献
改善結果:【要記入:改善前後の実行時間、対象データ件数、確認方法など】
開発・実装内容⑤ Postmanを活用したAPI開発・検証の効率化
【概要・開発した機能】
API開発において、Postmanを活用した仕様確認・動作検証を実施し、フロントエンドとバックエンドの開発を効率的に進めました。
【課題・問題点】
フロントエンドとバックエンドが連携する機能では、APIのリクエスト・レスポンス仕様に認識の相違があると、結合時の不具合や手戻りが発生する可能性がありました。
また、画面からの操作だけでAPIの動作を確認すると、検証に必要な準備や操作が増える課題がありました。
【打ち手・使用した技術】
Postmanを活用してAPIのリクエスト・レスポンスを確認
API単位で動作検証を実施し、画面を介さずにバックエンドの処理を検証
APIの仕様を早期に確認し、フロントエンド実装との認識差異を減らすことを意識
APIの検証と画面開発を並行して進められるよう、開発作業を効率化
【成果】
API単位での動作確認により、問題の切り分けを容易にした
フロントエンドとバックエンドの連携時に発生する手戻りの抑制に貢献
仕様確認と検証を効率化し、開発作業の円滑化に寄与
開発・実装内容⑥ テスト設計から実施までの品質管理
【概要・開発した機能】
担当機能に対して、テスト仕様書の作成、単体・結合テスト、テストエビデンスの作成まで一貫して担当しました。
【課題・問題点】
業務システムでは正常系の動作確認だけでなく、入力値の不備やAPIエラーなど、異常系を含めた品質確認が必要でした。
特にAPIと画面が連携する機能では、バックエンド単体の動作とフロントエンドを含めた一連の動作を確認することが求められました。
【打ち手・使用した技術】
機能仕様に基づくテスト仕様書を作成
正常系に加えてAPIの異常系を考慮したテストケースを設計
単体テスト・結合テストを実施
テスト実施結果を確認し、エビデンスを作成
担当機能について、実装から検証まで一貫して対応
【成果】
正常系・異常系の両面から機能の動作を確認
テスト仕様書とエビデンスを整備し、検証内容を追跡・確認できる状態を構築
実装からテストまで一貫して担当することで、品質確保に貢献