# 目的
- 証券会社のトレーダーに向けて、社内の100以上あるシステムから、P/L、ポジション情報を集約する。
# 背景
- EOLを迎えるシステムの刷新。
- Pythonで作成された、既存のシステムをJavaで置き換える
- OJT期間として、ノーロードで参画
# 規模感、チーム構成、担当した役割
- 15人程度のプロジェクト
- バッチチームを担当(画面チーム、バッチチーム、運用設計チームに別れた)
# 使用技術や開発環境等
- AWS
- Batch
- ECS
- CloudWatch
- StepFunctions
- EventBridge
- ElastiCache
- SNS
- SQS
- EC2
- Lambda
- S3
- RDS
- 開発環境
- IntellijIDEA
- VisualStudioCode
- SQLWorkbench
- Docker
- Redmine
- GitLab
- DBUnit
# 自身が担当した範囲
## バッチ実装
- 技術セット
- Java
- SpingBoot
- Mybatis
- JUnit
- DBUnit
- AWS ElastiCache
- AWS SNS
- AWS SQS
- 概要
- 証券会社の営業時間外に営業時間中に約定されたポジションの処理(P/L・リスク等を算出)を行うバッチ15本のコーディング・テストを行った。
他のシステムから外貨や金利情報を取得する処理が必要で、他システムではPostgreSQLの他に、Sybaseなどの他のRDBMSを使う必要があり認知負荷が高かった。
- システム内部DBも取り扱い商品分のPL・リスク情報などが記録されており、そこからデータを更新するためクエリが複雑で複数の結合や副問い合わせなどが複数必要であった。
- 課題
- 設計書・現行ソースコードの品質が低いこと
- 品質の低い現行ソースコード(if文のネストが10以上存在する、コメントが少ない、業務不理解によるバグが埋め込まれた実装)からリバースされた設計書に基づき実装を行ったため認知負荷が非常に高かった。
- 課題への向き合い方
- 現行ソースコード(Python)をJavaに書き換えるということを考えるだけでなく、そのコードを通して、業務的に何をやっているのかを理解するように努めた。
- 例)部署Aのポジションを0にして、部署Bのポジションを100にする。→ポジションの移転が行われたのだと理解する。
- 社内で開催されている業務知識勉強会に参加するとともに、発表者となって業務理解をより深めた。
## 内部結合テスト
- 技術セット
- Excel (VBA)
- AWS CloudWatch
- AWS Lambda
- AWS Batch
- 概要
- AWS Lambda上で営業時間中に入る約定データを処理するシステムの内部結合テストを行った。
- テストを行う前にDBのテーブルを特定の条件下に置く必要があった。
- 1テーブルあたりのカラム数が30〜50程度あり、それが1つのテストで10テーブル程検証が必要だった。
- 課題
- 証跡の残し方
- 1ケースのテストで、証跡を残すために、10個ほどのクエリが必要だった。
- テーブル名が異なるだけで、条件が同じであるなど単純な作業が発生していた。
- 課題の向き合い方
- VBAを使った効率化
- テーブルに応じて、VBAでクエリを自動生成して証跡を残せるようにした。
- テンプレートの作成
- 他人が同じように実行できるように、自分が実行したVBAをテンプレート化し他人も同じように作業できるようにした。
## システムテスト
- 技術セット
- Excel (VBA)
- AWS Cloud Watch
- AWS CLI
- AWS Batch
- 概要
- シナリオテストを担当した。システム時間を1時間ごとに区切り、バッチの実行を行った。
- 課題
- 親子関係のあるバッチや前後関係のあるバッチがあり、手動で実施すると事故が発生する可能性があった。
- StepFunctionsやEventBridgeはクライアント側作業があるためテスト時に利用できなかった。
- 関連企業とAWS環境を共有しているため、利用申請から許可までに通常より時間が大幅にかかる。
- 課題の向き合い方
- 事故防止のため、VBAで実行順序を制御するスクリプトと、前後関係を制御するスクリプトを組み込んだ。
## リリース
- 技術セット
- AWS CLI (EC2)
- 概要
- 本番環境に、アプリを構築すること。
- CloudFormationはクライントの許可が降りず利用できない。
- 課題
- クライアント側の本番ルームでしか作業できず作業時間も限られており、ミスが許されない環境だったため、手順書にあいまいさを残さないことが必要だった。
- 課題の向き合い方
- 手順書にあいまいさを残さないために、マネージメントコンソールで作業を行うのではなく、CLIで環境構築を行うようにした。
- また、相当数のLambdaやBatchがあったため、VBAを利用してコマンドを自動生成できるようにした。