株式会社ジャステック / ソフトウェアエンジニア
グループ企業人事管理システムリプレイス案件のバッチ部分の実装
## チーム構成 - プロダクトマネージャー(PdM):1 名 - 開発者:5 名 - 他部門スタッフ(Web 部分とデータクレンジング担当):6 名 ## 技術環境 - 使用技術:Java, Spring Batch, PostgreSQL, MyBatis, Linux, Bash (Shell) - 業界:エネルギー業界 ## プロジェクトの背景 - 参画時点でのプロジェクトの遅延 - Spring Batch と Java の専門家不在 - メンターや技術指導者の不在 ## 役割と責任 - エンジニアリングとマネジメントの兼任 - 一部技術選定 - Spring Batch のフレームワーク部分の実装 - 協力会社のマネジメント - ビジネスロジックの実装方針の立案 - コードレビュー ## 課題と解決策 - 技術選定の未確定問題の解決。フレームワークとして Spring Batch の使用は既に決まっていたが、ORM などをどれ を使用するか決まっていなかった。チームメンバーのスキルを確認したところ誰も ORM を使用したことがなかったの で、厳格な ORM である JPA の使用は早期に選択肢から外した。その中で Spring JDBC と MyBatis が候補に残ったが、 SQL に長けた開発者がいる場合は、SQL の部分が別ファイルに分かれていた方がコードの競合が起きないため便利か もと思い、MyBatis を採用した。→ 結果、SQL がとても得意で Java が全く書けない開発者が途中からジョインしたが SQL の部分だけを効率的に書いてもらうことができた。 - Java を扱える開発者がチームにいなかったため、本来はコードの可読性や保守性の観点から Java の方で処理するべ き問題でも SQL の方で処理した方が今回の開発ではよいかと思い、SQL 側に処理を寄せるようにしました。 - 詳細設計の段階でも基本設計レベルのテーブル定義が揺らいでいたので、エンティティクラスをテーブル定義から動 的に生成できる仕組みを MyBatis Generator で作成した。さらにテーブル定義だけではなく、CSV の変更を管理できる 方が便利だと考えたので、CSV の構造を一度 SQL で DB に入れて、そこからリバースで CSV のエンティティクラスを生 成するようにしてエンティティクラスの実装時間を短縮した。 - 運用は別の会社の運用部隊が行うことが決定していたので、リランとリカバリーを容易にする必要があった。そのた めには一つのトランザクションで処理する必要があった。Spring Batch ではチャンクモデルとタスクレットモデルの 両方があるが、タスクレットモデルでは、1 トランザクションでの処理機能のみを提供している。タスクレットモデル では自由度の記述が高い書き方だが、読み込みや書き込みの処理を別のファイルに分割することはできない。そこでド キュメントなどには載っていなかったがチャンクモデルコンポーネントをタスクレットモデルの中で呼ぶ処理をライブ ラリのコードを読みながら実装した。 - Web チームとのコミュニケーション不足を解消するためには、まずはランチなどを行ったりして、業務外での交流を 通じて関係を築くべきだと考え、ランチを一緒によく行った。 ## 成果 - 2 ヶ月の遅延を最終的に 2 週間に短縮。 - 四半期 360 度評価で 5 段階中 4 の評価を 2 期連続で獲得。