チームが開発をよりし易い環境作りをしました。
具体的には以下テーマが主です。
## 入社後行ったことのざっくりとした概要
- CI/CDの構築、改善
- 上記改善の為の計測システム構築
- fourkeysの計測
- リアーキテクチャ
- エラー監視の自動化、運用方法の整備
- 言語、FWのバージョンアップ調査、改修対応
- ローカル開発環境の効率化
- 2038年問題対応
- 静的解析運用の改善、改修
- フォーマッターの導入
まずCI/CDが全然整備されていなかったので、IaCを進め、環境差異を減らすようにしました。
そこから開発生産性を上げるために、まずは計測できる環境を整えて、改善活動をどんどん行なっていきました。
また、モノリスであったソースを、モジュラーモノリスへリアーキテクチャしたり、品質を担保するためにフォーマッターの導入を行いました。
エラー監視の運用が元々ありましたが、Sentryが丁度お試し導入されていましたので、Asanaとの自動連携部分を整備し、ドキュメントの整備等も行い、運用の改善を行いました。
## 各対応の課題と成果
### CI/CDの構築、改善
【課題】
・CI/CDの枠組み自体はざっくりあったが、無駄が多かった
・フェーズ毎の切り分けが、不十分であるため、問題が起きたときの対処が難しかった
・手動で構築されている部分が多く、何が設定されているかの見通しが悪かった
・環境毎にかなりの差異があり、検証の意味をなしていない部分があった
【対応】
・CFnやCDKを用いIaCを進めた(テスト的にGo, Pythonで並行して実装し、最終的にPythonが選ばれた)
・フェーズ毎に切り分けた ※例えばビルドはCodeBuildで行うなど
【成果】
・環境毎の差異が殆どなくなった
・フェーズ毎に切り分けられたことによって、原因特定が安易になったし、チーム内での説明もできるようになり、CI/CDで何をやっているのか?というチーム内理解度も深まった
・変更する際の修正箇所や、影響範囲が見えやすくなった
・手動部分が自動化されることにより、工数が減った
・コード管理されたことによって、誰でも読めるようになった
### 改善の為の計測システム構築
【課題】
・フェーズ毎に切り分けられたが、どこに無駄があるのか、何がどの程度かかっているのか不明だった
・リリース時間がプロダクトの成長とともにどんどん伸びていたので、短縮する必要があった
【対応】
・リリースにおけるフロー、マージから本番デプロイまでを切り分け、それぞれ時間計測した
・fourkeys計測のシステムを拡張する形で、ダッシュボードを作成した
【成果】
・実際に数字を見ることができ、グラフ表示も行ったことによりボトルネックが判明した
・元々予測として出ていた、E2Eの時間が支配的であることが確定した
### fourkeysの計測
【課題】
・某SaaSを利用していたが、値上げによって予算オーバーになってしまった
・生産性の基準にしていたため、必要であった
【対応】
・DORAとGoogle Cloudのレポートを参考にシステムを構築した
・Terraform, Google Cloud等を駆使した
【成果】
・fourkeysを外部サービスに依存せず計測できるようになった
・独自カスタマイズも可能になった
・ダッシュボードを拡張することで他の指標も作成できる基盤になった
・月1万円以内くらいで収まるようになった <- めちゃくちゃでかい
### リアーキテクチャ
【課題】
・モノリスである
・依存が多く、影響範囲調査に時間がかかるし、ミスも多い
・スケールさせる上で効率が悪い
・リリースに時間がかかる
【対応】
・モジュラーモノリスへ移行
・モジュールの境界を担保するために、静的解析でモジュラー間の依存をCIで検知
・モジュール毎にテストが動くようにした
【成果】
・影響範囲が限定的になった(どうしても依存を切り離せない共通部分も一定残っている)
・リリース時間がテスト時間が短くなったことにより、同時に短くなった
・今後の展望がイメージできるようになった(モジュール毎にサーバーを分けるとか)
### エラー監視の自動化、運用方法の整備
【課題】
・エラー監視用のSaaSは導入していたが、手作業でのコピペや、報告などが多く、本質的なエラー監視業務以外の作業に時間がかかっていた
・開発メンバーが、それぞれ、月のうち多いと2日程度担当しないといけない
【対応】
・Sentryをお試し導入していたので、利用して自動検知、タスクの自動起票、担当課長の自動アサインをできるようにした
・運用やドキュメントも細かい対応等に合わせて複雑な状態だったため、全て見直し、シンプルな運用にした
【成果】
・手作業がほとんどなくなった
・自動検知や通知がされるので、毎日誰かが行っていた1時間程度の作業が消えた
・通常タスクを進めながら、エラー監視をしていたのが、あまり意識することがなくなったので、効率が上がった(タスクスイッチ状態の解消)