# 概要
複数ある古のバッチをGoでリプレイスを行った。
このプロジェクトは自ら企画・提案をして進めた。具体的にはリプレイスの言語や実行環境等の技術選定や選定理由をまとめて承認をもらってから始まったプロジェクトである。
# 期間
2023/12 ~ 2024/04
# 詳細
## 役割
開発リーダー
- 技術選定〜設計、開発(テストコードも含む)、インフラ構築(AWS SAMやStep Functions、GitHub ActionsによるCI/CDなど)
## 技術
- 言語:Node.js、Go
- DB:PostgreSQL
- インフラ:AWS Lambda, AWS SAM, AWS Step Functions
# 課題とその対策
- #### テストコードや仕様がなく今動いているものが正となっていた
【対策】
- 今後仕様が分からなくならいために書き換え時に仕様書を作成したりユニットテストコードを作成した。なるべくカバレッジを高くするために、モックを有効活用してテストコードの網羅性を高めた。
- #### デプロイが手動
【対策】
- GitHubActionsとAWS Samを利用して自動デプロイのワークフローを導入。そのための自動テストも追加した。
- #### 実行タイミングによるデータ不整合やトランザクションがイマイチで万が一途中でエラーが発生した場合のリカバリがかなり大変といった細かいがエラー時に致命的なところがある
【対策】
- 複数のバッチは依存関係があるため、Step Functionsを利用して依存関係を制御して不整合が必ず起こらないようにした。一度の実行で扱うデータ量を少なくしたり、重複実行しても多重にデータが取り込まれたりしないように工夫をしてリカバリ発生を防いだ。
# 成果
- LambdaとSAMを利用して開発容易性を高めたのと同時にサーバーレスによる耐障害性も高めることができた。
不明瞭だった仕様をハッキリとさせ、データ不整合が起きそうなところを防いだりしたことで安定的な運用ができている。
自ら技術選定・提案してリプレイスをやり切れた経験自体が自分の中で大きな経験となった。