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

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

uji
June 15, 2023

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

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を再利用できる