# マネーフォワードクラウド会計
## 概要
法人事業者数が10万社を超えるマネーフォワードクラウド会計の開発に携わりました。
## 役割
バックエンドエンジニア
## チーム規模と使用技術
- チーム規模: 8名
- 言語:Ruby 3.3
- フレームワーク:Rails 7.0
- データベース:MySQL 8.0
- OS:Linux, MacOS
- ツール:AWS, Docker, Git/GitHub, Slack, Jira, Asana
## 担当業務
- クライアントからの問い合わせ対応
- PdMやCSと協力し、法令のインボイス制度対応に伴うリファクタリングや新機能開発を実施
- ActiveRecordの代わりにgRPCを用いてGolangのAPIを使用し、リファクタリングを実施
- Rails 7へのアップデートに伴うコードレビューとテストサポート
## 課題
- レガシーコードが多く、メンテナンス性が低下していました。
- 非同期ジョブの実行時間が数分から数時間に及び、ユーザー体験に悪影響を及ぼしていました。
- 会計システムの基盤となる仕訳データが数十億件に増加し、DBの負担が大きくなっていました。
## 取り組みと結果
### レガシーコードへの対応
- FormObjectsやServiceObjectsのデザインパターンを導入し、コードのメンテナンス性とテストのしやすさを向上させました。
- TDDを導入し、テストをパスさせてからリファクタリングを行うことで、デグレの発生を防止しました。
### 非同期ジョブのパフォーマンス低下への対応
- Datadogを使用してトラフィックが多く、実行時間が長いジョブを3つ特定し、プロファイリングを行いました。
- 数個のアイテムデータを取得する際に数千回のキャッシュ呼び出しが発生していることが判明しました。
- N+1問題がループ内で発生していると仮説を立て、Railsのコンソールログを追跡して特定しました。
- N+1問題を解決し、ジョブの処理時間を2倍以上に改善しました。
### DBの負担が大きい問題への対応
- チーム全体でActiveRecordの代わりにgRPCを用いてGolangで実装した内部APIを使用しました。
- 私は特定のページで同じAPIリクエストを検知し、Memcachedを使用してキャッシュを導入することで、パフォーマンスを50〜90%向上させ、内部APIへの呼び出しを削減しました。
このプロジェクトでは、バックエンドエンジニアとして大規模なシステムの開発に携わりました。国際的なチームで英語でのコミュニケーションが求められ、最初は苦労しましたが、ELSAを使って毎日30分、3ヶ月間スピーキング練習を行った結果、英語でのコミュニケーション能力を向上させることができました。バックエンドに専念したことで、Railsの知識を深め、新機能の開発、リファクタリング、パフォーマンスチューニングなど、さまざまなタスクを遂行しました。また、会計業界のドメイン知識も学び、大変貴重な経験となりました。