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

次なるルーターパッケージ選定のしざまと決め手について

 次なるルーターパッケージ選定のしざまと決め手について

Go Conference 2023(https://gocon.jp/2023/) で登壇した発表です。

先日Goの軽量routerの代表格であるgorilla/mux擁するGorilla Web Toolkitがアーカイブされました。
私たちのチームで開発しているGoのWeb APIはすべてgorilla/muxに依存しており、対応を迫られました。
フォークしてチーム内でメンテナンスを行うことも考えられましたが、チームの規模的に無理があり他のパッケージへ移行する必要がありました。
そこで今回の発表では移行時に行った他のパッケージの比較検討や最終的な決断の意思決定について話します。
この発表を通してパッケージの選定基準などについて、同じくrouterや外部パッケージを移行したい方の手助けになれば幸いです。

Ren Ogaki

June 02, 2023
Tweet

Other Decks in Programming

Transcript

  1. © 2012-2023 BASE, Inc. 1
    次なるルーターパッケージ選定の
    しざまと決め手について
    2023/06/02 - Go Conference 2023

    View Slide

  2. © 2012-2023 BASE, Inc. 2
    プロフィール
    BASE, Inc. / BASE BANK Div
    大垣 連 / Ren Ogaki
    BASEでインターン→高校卒業→1年くらい専門学校に
    入ったり、BASEで業務委託として働いてみたりふらふ
    らした末に最近正社員になりました。
    BASEカードというプロダクトを開発しています。
    @re_yuzuy
    @yuzuy

    View Slide

  3. © 2012-2023 BASE, Inc. 3
    ネットショップ作成サービス「BASE」

    View Slide

  4. © 2012-2023 BASE, Inc. 4
    振込申請
    BASEカード
    YELL BANK
    かんたん、即座に
    1万円から資金調達が可能
    売上をそのままお支払いに使える 「お急ぎ振込」では
    最短翌営業日に売上を振込
    「銀行をかんたんにし、全ての人が挑戦できる世の中に」
    BASE加盟店向けに金融事業を提供しているチーム
    個人やスモールチームの資金繰りに関する課題解決に取り組んでいます
    BASE BANKがやっていること

    View Slide

  5. © 2012-2023 BASE, Inc. 5
    突然ですが
    みなさんはどんなフレームワークやルーターを
    使っていますか?
    BASE BANKのルーター事情

    View Slide

  6. © 2012-2023 BASE, Inc. 6
    BASE BANKではGo製のWeb APIはすべて
    gorilla/muxというルーターを使っていました
    BASE BANKのルーター事情

    View Slide

  7. © 2012-2023 BASE, Inc. 7
    gorilla/muxってなに?
    Gorilla Web Toolkitが提供するHTTPルーター
    https://github.com/gorilla

    View Slide

  8. © 2012-2023 BASE, Inc. 8
    gorilla/muxってなに?
    2022年12月...

    View Slide

  9. © 2012-2023 BASE, Inc. 9
    gorilla/muxってなに?

    View Slide

  10. © 2012-2023 BASE, Inc. 10
    gorilla/muxってなに?
    2022年末までに、Gorillaプロジェクトのリポジトリを
    「アーカイブモード」にする予定です。

    View Slide

  11. © 2012-2023 BASE, Inc. 11
    gorilla/muxってなに?
    メンテナーの不在により
    2022年末をもってアーカイブされてしまった

    View Slide

  12. © 2012-2023 BASE, Inc. 12
    gorilla/muxってなに?
    🙀🙀🙀

    View Slide

  13. © 2012-2023 BASE, Inc. 13
    gorilla/muxってなに?
    アーカイブされたmuxを移行する
    プロジェクトの主導をすることになったogaki

    View Slide

  14. © 2012-2023 BASE, Inc. 14
    いま、移行先を決める旅が始まる

    View Slide

  15. © 2012-2023 BASE, Inc. 15
    ogaki「移行先ってどうやって決めるんや」

    View Slide

  16. © 2012-2023 BASE, Inc. 16
    移行先を決める旅
    とりあえず候補になりそうな
    ライブラリを集めて比較してみた

    View Slide

  17. © 2012-2023 BASE, Inc. 17
    移行先を決める旅
    ・net/http
    ・軽量フレームワーク
     (gin-gonic/gin, labstack/echo, etc)
    ・ルーティングパッケージ
     (go-chi/chi)

    View Slide

  18. © 2012-2023 BASE, Inc. 18
    候補: net/http
    みんな大好き公式が提供している
    HTTPを司る標準パッケージ
    これだけでも全然Web API開発はできる

    View Slide

  19. © 2012-2023 BASE, Inc. 19
    候補: net/http

    パスパラメーターやハンドラー登録周りが簡潔に実装
    できなそう
    個人的には微妙だなあ...

    View Slide

  20. © 2012-2023 BASE, Inc. 20
    候補: 軽量フレームワーク(gin-gonic/gin, labstack/echo)
    フルスタックではない軽量のフレームワーク
    net/httpのルーターとハンドラーの部分をいい感じに
    ラップして書きやすくしている感じ
    色々な種類があるけど
    書き味は大体同じような感じ
    ←はgin

    View Slide

  21. © 2012-2023 BASE, Inc. 21
    候補: 軽量フレームワーク(gin-gonic/gin, labstack/echo)

    独自ハンドラーで便利機能がいっぱい
    でも現状の実装がhttp.HandlerFuncに
    依存してるからな...

    View Slide

  22. © 2012-2023 BASE, Inc. 22
    候補: ルーティングパッケージ(go-chi/chi)
    軽量フレームワークとは違いルーターだけいい感じに
    ラップしてる
    ハンドラーにはhttp.Handler, HandlerFuncを使う

    View Slide

  23. © 2012-2023 BASE, Inc. 23
    候補: ルーティングパッケージ(go-chi/chi)

    3つの候補の中ではmuxと最も似てる
    無難にchiなのかな?

    View Slide

  24. © 2012-2023 BASE, Inc. 24
    移行先を決める旅
    各候補に対する所感を文章にまとめて
    勢いでDevチーム全員呼んでMTG開催!!!

    View Slide

  25. © 2012-2023 BASE, Inc. 25
    移行先を決める旅
    MTG中のogaki🫠
    「どう決めればいいのかわからん」

    View Slide

  26. © 2012-2023 BASE, Inc. 26
    移行先を決める旅
    なんとなくchiでいいような気もしつつ
    決め手がない😕

    View Slide

  27. © 2012-2023 BASE, Inc. 27
    移行先を決める旅
    評価基準を作って
    それをもとに評価し直しました

    View Slide

  28. © 2012-2023 BASE, Inc. 28
    5つの評価軸
    muxからの移行コストが低い(重要度: 大)
    速度的パフォーマンスがよい(重要度: 大)
    別のルーターへの移行コストが低い(重要度: 中)
    日々の開発が楽になる(重要度: 小)
    アーカイブ可能性が低い(重要度: 小)

    View Slide

  29. © 2012-2023 BASE, Inc. 29
    5つの評価軸
    muxからの移行コストが低い(重要度: 大)
    工数はできるだけ少なく、影響範囲もできるだけ少なく移行したい
    ヘルパーを作成する必要があったり、ハンドラーの形式が変わったりする
    のはメンバーへの共有すべき箇所も増えるのでつらい
    速度的パフォーマンスがよい(重要度: 大)
    BASEカードではVisaからの応答速度の要求があり、最低限の速度的パ
    フォーマンスは確実に満たしたい(muxほどの性能があればよい)

    View Slide

  30. © 2012-2023 BASE, Inc. 30
    5つの評価軸
    別のルーターへの移行コストが低い(重要度: 中)
    muxがアーカイブされたこともあり移行先もいつアーカイブされてもいい
    ような立ち回りがしたいが、とはいえそれなりにユーザーがいるOSSが急
    にサポート終了する可能性は小さいので重要度は中

    View Slide

  31. © 2012-2023 BASE, Inc. 31
    5つの評価軸
    日々の開発が楽になる(重要度: 小)
    日々の開発が楽になるといいが、muxの運用している中で使っていた基盤
    があり、http.HandlerFuncに依存し続ける限りは使えるのでそこまで重要
    度は高くない
    アーカイブ可能性が低い(重要度: 小)
    どんなソフトウェアにも寿命はある
    Gorillaがアーカイブされるなんて思ってなかった

    View Slide

  32. © 2012-2023 BASE, Inc. 32
    移行先を決める旅
    改めて評価軸をもとに候補を評価してみる

    View Slide

  33. © 2012-2023 BASE, Inc. 33
    移行先を決める旅
    4段階評価🖍
    ◎: 評価軸に対してとても適している
    ○: 評価軸に対して適している
    ﹣: 評価軸に対して最低限適している
    ✕: 評価軸に対して適していない

    View Slide

  34. © 2012-2023 BASE, Inc. 34
    候補: net/http
    言わずと知れた標準パッケージ
    信頼性は文句なし💯
    しかしパスパラメーターなど自前でがんばらないといけない部分がまあまあある

    View Slide

  35. © 2012-2023 BASE, Inc. 35
    候補: gin-gonic/gin, labstack/echo
    軽量フレームワークの代表格たち
    便利機能がいっぱい🛠 <-> 他へ移行しづらい🙅
    BANKにはmuxと一緒に使っていた基盤があるので便利機能はいらなそう?

    View Slide

  36. © 2012-2023 BASE, Inc. 36
    候補: go-chi/chi
    muxと似てる軽量ルーター
    ルーターとして欲しい機能を最低限提供してくれているという印象
    採用への壁は特にない

    View Slide

  37. © 2012-2023 BASE, Inc. 37
    移行先を決める旅
    文章としてまとめて事前に共有📝
    非同期で意見を募る

    最終的な合意だけ同期的に行った

    View Slide

  38. © 2012-2023 BASE, Inc. 38
    移行先を決める旅

    View Slide

  39. © 2012-2023 BASE, Inc. 39
    移行先を決める旅
    同期的に共有するには時間がかかる
    致命的な指摘があったときにまた時間を取る?
    他人の時間をいただく意識を持つ

    View Slide

  40. © 2012-2023 BASE, Inc. 40
    移行先を決める旅

    View Slide

  41. © 2012-2023 BASE, Inc. 41
    移行先を決める旅
    移行先はchiに決めた🎉

    View Slide

  42. © 2012-2023 BASE, Inc. 42
    移行

    View Slide

  43. © 2012-2023 BASE, Inc. 43
    移行していく
    エンドポイントが少ないサービスでお試し

    広げていく

    View Slide

  44. © 2012-2023 BASE, Inc. 44
    移行していく
    既存の実装がnet/httpに依存していた
    おかげで移行自体はとても楽だった
    10個くらいエンドポイントがあるサービスの移行時のdiff

    View Slide

  45. © 2012-2023 BASE, Inc. 45
    小話

    View Slide

  46. © 2012-2023 BASE, Inc. 46
    小話: New Relic対応
    BASEではNew Relicという
    オブザーバビリティプラットフォームを使用しています

    View Slide

  47. © 2012-2023 BASE, Inc. 47
    小話: New Relic対応
    ログを記録するために公式が提供する
    nrgorillaというミドルウェアを使っていました📹

    View Slide

  48. © 2012-2023 BASE, Inc. 48
    小話: New Relic対応
    nrchiはどこに...🔭

    View Slide

  49. © 2012-2023 BASE, Inc. 49
    小話: New Relic対応
    まだなかった
    Issueはあったけど
    対応はされておらず
    https://github.com/newrelic/go-agent/issues/450

    View Slide

  50. © 2012-2023 BASE, Inc. 50
    小話: New Relic対応
    なかったら作るのがOSS󰳕

    View Slide

  51. © 2012-2023 BASE, Inc. 51
    小話: New Relic対応
    BANKの基盤パッケージに
    New Relic for chiミドルウェアを追加💪

    View Slide

  52. © 2012-2023 BASE, Inc. 52
    小話: New Relic対応
    少し運用してみて大丈夫そうだったら
    newrelic/go-agentにコントリビュートする予定です

    View Slide

  53. © 2012-2023 BASE, Inc. 53
    まとめ

    View Slide

  54. © 2012-2023 BASE, Inc. 54
    まとめ
    ・技術選定は評価基準を明確に
    ・標準パッケージに依存する

    View Slide

  55. © 2012-2023 BASE, Inc. 55
    まとめ: 技術選定は評価基準を明確に
    基準を明確に示すことは
    スムーズで納得感のある合意形成につながる🤝
    →逆に基準がないと何を元に判断・発言したらよいか
    わからないし見返したときに根拠がわからない

    View Slide

  56. © 2012-2023 BASE, Inc. 56
    まとめ: 標準パッケージに依存する
    標準パッケージに依存することで
    万が一のときに移行がしやすい
    公式が標準のインターフェースを
    用意してくれているんだからそれを使わない手はない

    View Slide

  57. © 2012-2023 BASE, Inc. 57
    まとめ
    GorillaほどポピュラーなOSSでも
    アーカイブされてしまう🥲
    マーフィーの法則を信じて起こりうるリスクに対しては
    それを想定した対応をしておくことが重要

    View Slide

  58. © 2012-2023 BASE, Inc. 58
    まとめ
    OSSはみんなで作って使うもの
    使うだけじゃなくて貢献していこう🌎

    View Slide

  59. © 2012-2023 BASE, Inc. 59
    求人情報
    フルサイクル開発やってます!!
    Go, Python, PHP使ってます!!
    オフィスアワーでもDMでもいつでも声かけてください!!
    We are hiring !!

    View Slide

  60. © 2012-2023 BASE, Inc. 60
    おわり

    View Slide