Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法

Avatar for uji uji
June 15, 2023

マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法

Avatar for uji

uji

June 15, 2023
Tweet

More Decks by uji

Other Decks in Technology

Transcript

  1. 【Gophers Talk】スポンサー4社による合同LT & カンファレンス感想戦 株式会社マネーフォワード CTO室 Web3グループ 大阪 2022/2 入社

    ブロックチェーン領域のリサーチ Web3領域の新規プロダクトの開発に従事 Gopher 5年生 Kyoto.go 運営 Twitter @uji_rb uji Go Conference のセッションでも ブロックチェーンの話をしました
  2. 各種 ブロックチェーン マネーフォワード ME ブロックチェーン連携 アグリゲーション基盤 API CoinGecko 暗号資産価格API address

    addressに紐づく 暗号資産の残高を取得 各暗号資産の価格を取得 換算した資産情報を 返却
  3. 重要視したポイントは2つ • 開発の初速 ◦ ニーズが不明瞭のため、 ユーザーからの使われ方をなるべく早く検証したい ◦ MVPをなるはやで世の中に出す必要がある • 柔軟性

    ◦ 開発したサービスは今後どうなるかわからない ▪ 機能要望が殺到、サービス終了、塩漬け、他チームに移譲、 etc… ◦ あらゆる事象に即座に対応できるようにしたい 設計方針
  4. Simpleな機能のライブラリを組み合わせて機能を実現することで • ライブラリに依存する実装が減り、柔軟性が生まれる • Go自体の仕様や慣習に関するノウハウが積み上がる ◦ フレームワーク固有の知識と比較すると再利用されやすい • 意識しないと行けないルールを最小限にできる ◦

    例: ディレクトリ構成、linterのルール ▪ フラットな状態で始めて、課題が出てきたタイミングで追加すれば良い ▪ フレームワークを利用していなくても、ルールを作り込みすぎると 複雑度はあがり、認知負荷がかえって高まってしまう 必要最低限の機能を持ち、インターフェースがGo標準に近いライブラリを利用 ライブラリ選定
  5. ブロックチェーン連携で利用している主なライブラリ go-chi/chi net/httpをラップしたルーティングライブラリ deepmap/oapi-codegen OpenAPIドキュメントからGoコードを生成 volatiletech/sqlboiler DBスキーマからGoコードを生成 shopspring/decimal 固定小数点数を扱うパッケージ zap

    構造化ログのライブラリ 1.21で標準に追加されるslogとインタフェースが近い hashicorp/go-retryablehttp リトライ機能つきHTTPクライアント ethereum/go-ethereum Ethereumの公式実装、サブパッケージに クライアントライブラリ ethclient がある wealdtech/go-ens ENSというEthereum上にあるアプリの APIクライアントライブラリethclientをラップしている ライブラリ選定
  6. ライブラリ選定の反省 sqlboilerの利用は、 複雑さの増大に対して得られる利便性が見合わなかった (あくまでも今回のユースケースの話) • ある程度Simpleさを保ちつつ、初速を重視できる点から採用した ◦ sqlboiler派 vs 生SQLを書くライブラリ(sqlx,

    sqlc)派 の議論があった • 生成コードが結構なサイズで、内容の理解やトラブルの原因究明などで 結果的に時間がかかってしまった • 柔軟性に関しても、生SQLを書くライブラリの方が確保しやすい ◦ 生SQLを書くライブラリは、SQLを再利用できる