Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
マネーフォワードにおけるGoとマイクロサービスの活用事例
Search
ysakura_
March 03, 2021
Technology
610
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マネーフォワードにおけるGoとマイクロサービスの活用事例
マネーフォワードにおける
- Go化の背景
- Goを技術選定した理由
- Goを使って得られた知見
- 今後のGo利用
についてのドキュメントです
ysakura_
March 03, 2021
More Decks by ysakura_
See All by ysakura_
OpenAPI を用いた GoのAPIサーバー の開発自動化
ysakura_
0
98
Goでの設定情報管理に苦労した話
ysakura_
0
430
Other Decks in Technology
See All in Technology
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
170
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
140
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
9
4.5k
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
160
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
160
2026_devsumi_ozono.pdf
o3
3
520
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
事業課題から技術的負債に向き合う
sansantech
PRO
2
2k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
25
16k
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
100
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
2
520
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Optimizing for Happiness
mojombo
378
71k
Test your architecture with Archunit
thirion
2
2.4k
My Coaching Mixtape
mlcsv
0
320
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Building Adaptive Systems
keathley
44
3.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
The Invisible Side of Design
smashingmag
301
52k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Transcript
マネーフォワードにおけるGoとマイクロサービスの活用事例 2021年3月3日
自己紹介
• 名前: 櫻 勇人(さくら ゆうと) • Twitter: ysakura_ • 関西開発本部
テクニカルアーキテクトグループ リーダー • 複数の新規プロダクトで インフラとマイクロサービスの構築を担当 • 性能問題の解決を主とし 『マネーフォワード クラウド会計Plus』の技術改善に従事 • Go歴: 3年 • MFでは約2年、Goでマイクロサービス 自己紹介
• 複数のドメインでプロダクトを展開 • 開発言語 ◦ Railsのプロダクトが多い ◦ Java: 社内の基盤サービス ◦
Go: マイクロサービス • インフラ ◦ さくらインターネットからスタート ◦ 新規プロダクトはAWS ◦ さくら to AWSの移行も マネーフォワードの紹介 FY20 通期決算説明資料より引用
• マネーフォワード クラウド会計Plus ◦ 櫻の担当プロダクト ◦ 上場企業向けの会計ソフト ▪ データ量が多いのが特徴 ◦
監査向けに承認機能や履歴機能を提供 ◦ WebのメインシステムはRuby on Rails ◦ 一部をGoでマイクロサービス化 マネーフォワードの紹介
今日話すこと/話さないこと
今日話すこと • MFにおけるGoの事例 • マイクロサービス化の背景 • Goを選んだ理由 • マイクロサービスでGoを活用してみて ◦
Goで良かった点 ◦ Goを使う上で意識した方が良い点 ◦ Goを利用してみての課題感 • 今後のMFとGo
• マイクロサービスアーキテクチャの詳細 • Goの具体的なコード例 今日話さないこと
MFにおけるGoの事例
MFにおけるGoの事例 • マイクロサービス ◦ 今回のメイントピック • ツール ◦ インフラ系が多い ◦
簡単な言語仕様 ▪ サクッと作れる ▪ 利用者に改善して貰いやすい
• マイクロサービスの約半数がGo製 ◦ ※ 全社の基盤サービスを含む • 会計Plusのマイクロサービス ◦ 機能のジャンル(ドメイン)毎に作成 ▪
会計帳簿の作成 ▪ 履歴管理 ▪ 他サービスからのデータ連携 マイクロサービス
アーキテクチャ紹介 会計帳簿を作成するサービスの 簡易的なアーキテクチャ図 • メインのWebシステムはRails • API CallはgRPCを利用 ◦ メソッドをRPCで丸々置き換え
• 非同期処理はSQSで ◦ 重い処理をオフロード
マイクロサービス化の背景
• 次の2つの背景からマイクロサービス化を進行中 ◦ 組織スケールの問題 ◦ 性能問題の解決 マイクロサービス化の背景
• これまではRailsのモノリシックなアプリケーション ◦ 大きなサービスでは、数十人で開発している • 徐々にリリース速度が低下 ◦ メンバー数の増加 ◦ コードの複雑性の増加
• 開発速度を維持したまま、組織をスケールさせたい ◦ マイクロサービス化を進行中 • ※ 複雑度が低いうちは、モノリスの方が生産性が高い 組織スケールの問題 出典 https://martinfowler.com/bliki/MicroservicePremium.html
• 現状の技術スタックでは満たせない非機能要件が出てきた ◦ MFのユーザー数の増加 ◦ 新しいターゲット層 ▪ 会計Plusでは上場企業を対象に • 非機能要件を満たせる技術選択をしたい
◦ マイクロサービスで疎結合にして、独自の技術選択を可能に ▪ 別言語のサーバー ▪ 独自のストレージ 性能問題の解決
Goを選んだ理由
• マイクロサービス化の要件 ◦ 高速な言語 ◦ 静的型付けの言語 • Goを選んだ理由 ◦ 要件を満たせる
◦ Dockerとの相性が良い ◦ モチベーションの高いメンバーの存在 ◦ 採用市場の変化 Goを選んだ理由
• 高速な言語 ◦ 性能問題を解決する事が目的の1つ • 静的型付けの言語 ◦ 信頼性が求められるケースでは、静的型付けの安全性を重視 ◦ 開発チームが大きくなる事を考えても、静的型付けの安全性は大きなメリット
マイクロサービス化の要件
• 要件を満たせる ◦ この段階ではC#やJavaも候補になる • Dockerとの相性が良い ◦ Goはイメージサイズが小さい ▪ コンパイルしたバイナリを置くだけ
▪ Javaの様に仮想環境を必要としない ◦ MFでは、ECS/EKSでコンテナ化が進んでいるのでマッチした • モチベーションの高いメンバーの存在 ◦ 社内に経験者やGoを扱いたいエンジニアがいた Goを選んだ理由
Goを選んだ理由 • 採用市場の変化 ◦ Goが流行っている ▪ ”今”の技術選択においてはGoは有力な選択肢の1つ • 採用のしやすさ •
エンジニアのモチベーション • 情報のアクセスしやすさ ◦ 参考: 当社CTO中出の発信 ▪ マネーフォワードCTOが考えていること(2020年9月)
マイクロサービスでGoを活用 してみて
マイクロサービスでGoを活用してみて • Goで良かった点 • Goを使う上で意識した方が良い点 • Goを利用してみての課題感
• ハイパフォーマンス ◦ 数十分かかる処理が10分の1, 場合によっては100分の1に • 並行処理が扱いやすい ◦ 'g', 'o',
' 'の3文字を打つだけでgoroutineが起動する ◦ OSの違いを意識する必要がない ◦ 性能が求められるケースでは大きなメリット Goで良かった点
• gRPCのスキーマ駆動開発が便利 ◦ マイクロサービスとの通信に利用 ▪ 別チームとの開発を進めやすい • キャッチアップが容易 ◦ 言語仕様がシンプル
Goで良かった点
• 言語仕様がシンプルゆえにコード量が多くなる ◦ 自前で実装する、もしくは、ライブラリのキャッチアップを意識する ◦ 下手をすると可読性の低いコードが生まれてしまう • goroutine leakには気をつける ◦
goroutineが終了せずに、goroutine内部の変数がメモリを浪費しOOM ▪ 解決策の例 • context.Contextを用いて、タイムアウトや強制終了を可能にす る Goを使う上で意識した方が良い点
• Goが最適な技術とは限らない ◦ JavaやC#の方が言語仕様はリッチ ◦ RESTfulなWebサーバーをスピーディーに作りたい ▪ Railsの方が良い ◦ フロントエンドを扱うには不向き
• gRPCを扱いにくいケースもある ◦ MFではRailsをクライアントとして、gRPCを利用 ◦ 型を意識しない世界に、厳密な型を持ち込むので扱いづらい Goを使う上で意識した方が良い点
• 各チームで似たような事をやっているが、知見が共有されていない ◦ Goがスモールチームで活用される傾向にある為 ▪ チーム間の交流が必要 ◦ MFでは、Goのライブラリ勉強会を2021年から開始 ▪ go-forwardという活動
Goを利用してみての課題感
• 他言語からのConvertに壁がある ◦ シンプルさが言語特有の癖 ◦ From Java/C#: 静的言語によくある仕様がない ▪ 例)
継承やGenerics ◦ From Rails: フルスタックなフレームワークから移るにはシンプルすぎる ◦ MFでは、他言語のエンジニア向けのGo勉強会を開催 ▪ 当時のエンジニアの4分の1が初回は参加 Goを利用してみての課題感
• Goの案件がスポット的 ◦ マイクロサービスでは、改修が入る頻度が少ない ◦ 現在はマイクロサービス移行を進行中なので、もう少し先の時間軸 ◦ 解決策の例 ▪ 日々増加していく機能要件ベースで、Goを扱う機会を作る
▪ 大型の基盤をGoで作っていく Goを利用してみての課題感
今後のMFとGo
• 今後もマネーフォワードではGoを活用していきます ◦ マイクロサービス化は、今後の事業拡大を考えると必須 ◦ レイテンシ/可用性などGoが求められるケースは増えていく • 今後検討している取り組み ◦ 社内ライブラリの作成
▪ Goの開発速度を上げる ▪ Go利用のハードルを下げる ◦ Goを扱う機会の創出 ▪ 新規サービスのバックエンドをGoで • CTOの中出が、Goの導入相談を開始 ▪ サービス基盤をGoで • 性能要件が求められるのでマッチする 今後のMFとGo
We are hiring! Goを使って、ユーザーの課題を解決したいエンジニアを募集中です! カジュアル面談から是非
• Railsを読み、Goを書く。大規模SaaSのマイクロサービス化の(生々しい)実際をマネーフォ ワードに聞いてきた! • マネーフォワードCTOが考えていること(2020年9月) 参考資料