株式会社Macbee Planet / Webエンジニア
社内管理ツールのリプレイス開発
【使用技術】 Language : Go Framework & Library : Ent DB : MySQL IaC Tools : Docker Infra : [AWS] IAM, VPC, Route53, ECS(Fargate), S3, KMS, Secrets Manager, RDS(MySQL) CI/CD Pipeline : Github Actions Other Tools : gRPC, go-testing, go-testfixtures, bufconn, localstack https://pkg.go.dev/testing https://github.com/go-testfixtures/testfixtures https://pkg.go.dev/google.golang.org/grpc/test/bufconn 【担当業務概要】 - 既存Controller(PHP)ビジネスロジックの gRPC & Goベースへの移行作業 - モノリシックなWebアプリケーションのMicroserviceへの移行作業 - 既存テーブル間のスキーマ定義及びリレーションの定義 - Go及びgRPCを用いたAPIのE2Eテスト整備 - Github Actionsを用いたCI環境の整備 - gRPCを用いたprotocol buffersの定義 - リプレイス後の技術スタックに関しての検証・選定 - gRPC serviceのデプロイに関する検証・構築 - Github Actionsを用いたCD環境の整備 【既存サービスの課題】 * テーブル間のリレーションが定義されていない データストアとしてMySQLを採用しているにもかかわらず、テーブル間のリレーションが一切定義されていない状態となっていました。 既存のControllerの挙動を変えないように注意を払いながら、外部キー制約などを用いて参照整合性を保てるように改善を行いました。 * 既存Contollerのカバレッジが著しく低い PHP & Codeigniterで開発されていた既存Controllerに対してテストコードが一切書かれておらず、改修時に既存のソースコードの挙動が正しいことを担保する仕組みが存在しませんでした。Go & gRPCベースへの移行作業時には新規で実装したビジネスロジックに対して常にカバレッジが85%を維持されるように開発を行いました。 また、GitHub Actionsを用いてCI環境の整備を行い、remote repositoryにpushされるたびに自動テストが実行される様にいたしました。 AWSのマネージドサービスに依存するビジネスロジックの自動テストを実行するにあたって、localstackというmockサービスを用いて、テスト環境の構築を容易に行えるようにいたしました。 【技術選定・基盤コード整備について】 技術選定に関しては、私一人で進めたわけではなく、リードエンジニアの方の主導で検証・選定作業を進めました。 私自身も技術選定前の段階で、採用予定の技術に関する公式ドキュメントの参照を行い、開発を進めるにあたっての懸念点の有無を調査いたしました。 また、プロジェクト初期の基盤コードの整備に関してもリードエンジニアの方主導で行っていただきました。 プロジェクト初期の技術検証・選定及び基盤コードの整備については、今後、自身が主導して進めていけるようになりたいと考えております。 【gRPC serviceのデプロイに関する検証・構築】 gRPCサービスのホスティング方法に関して、検証から構築までを担当しました。 AWS ECSを用いてサービスを運用していくにあたって、運用にかかる手間や工数を削減する目的で、EC2タイプではなくFargateタイプを選定しデプロイを行いました。 また、AWS Secrets ManagerおよびKMSを用いて、セキュリティ面に配慮を行いながらデプロイを行いました。 【Github Actionsを用いたCD環境の整備】 AWS ECS への自動デプロイ環境を整備しました。