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

Ruby製社内ツールのGo移行

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 Ruby製社内ツールのGo移行

Avatar for Atsushi Tanaka

Atsushi Tanaka

March 25, 2024
Tweet

More Decks by Atsushi Tanaka

Other Decks in Programming

Transcript

  1. © 2024 Wantedly, Inc. $ whoami @bgpat / Atsushi Tanaka

    ウォンテッドリー株式会社 Infrastructure Engineer Kubernetes / Terraform SRE / Platform Engineering 好きなパッケージ golang.org/x/sync/singleflight
  2. © 2024 Wantedly, Inc. 究極の適材適所により、 シゴトでココロオドルひとを ふやすために Wantedlyはパーパス‧共感を軸にした、⼈と会社との出会いを2012 年から創出。 はたらくすべての⼈が共感を通じて「であい」「つながり」「つなが

    りを深める」ためのビジネスSNS「Wantedly」を提供しています。 1⼈でも多くの⼈がワクワクしたり、熱中してシゴトと向き合えるよ うな世界を実現するために、国境を超えて「はたらくすべての⼈のイ ンフラ」を創っていきます。 ウォンテッドリーについて
  3. © 2024 Wantedly, Inc. 内製ツール “kube” kube | Wantedly Engineering

    Handbook https://docs.wantedly.dev/fields/dev-tools/kube
  4. © 2024 Wantedly, Inc. 内製ツール “kube” • エンジニアがデプロイ等の操作をするためのツール • kubectlのラッパーコマンド

    • はじめはRubyで書かれていた ◦ Rubyを扱えるエンジニアが多かった ◦ 参考にしたCapistranoがRubyで書かれていた
  5. © 2024 Wantedly, Inc. Ruby製kubeのつらみ • 環境によって動作しない ◦ ランタイムのバージョン ◦

    パッケージや共有ライブラリへの依存 ◦ OSによる環境差異 • Kubernetesとの相性が良くない ◦ パッケージが少ない • 実⾏速度が遅い ◦ Rubyで並列処理を書くのは⼤変
  6. © 2024 Wantedly, Inc. Goへのリプレース • 環境によって動作しない ◦ ランタイムのバージョン →

    コンパイラ⾔語なのでランタイム依存しない ◦ パッケージや共有ライブラリへの依存 → static linkで考慮不要 ◦ OSによる環境差異 → クロスコンパイルが容易 • Kubernetesとの相性が良くない ◦ パッケージが少ない → 既存の資産を利⽤可能に • 実⾏速度が遅い ◦ Rubyで並列処理を書くのは⼤変 → goroutine で簡単に並列処理が書ける
  7. © 2024 Wantedly, Inc. 移⾏後しばらく経って - 良かった点 • CIOpsでも利⽤ ◦

    エンジニアのPCから⼿動デプロイ→CIで⾃動デプロイに変更 ◦ エンジニアのPCはmacOSだったがCIのLinux環境でも問題なく動作 • Goや依存パッケージのアップデートで壊れにくい ◦ 型があるおかげで go build が成功すればだいたい動く ◦ 他の⾔語に⽐べて破壊的変更が少ない (発表者の印象)
  8. © 2024 Wantedly, Inc. 移⾏後しばらく経って - 困った点 • テストが書きづらい ◦

    処理を後から書き換えることができない ◦ mockしやすい構成にする必要がある ▪ かなりの量のコードを書き直した • ツールチェインが充実していなかった→時間経過で改善 ◦ パッケージマネージャー: 当時は go mod がなかった ◦ ファイル埋め込み: go:embed がなかったので jessevdk/go-assets や rakyll/statik を使っていた