Slide 1

Slide 1 text

© 2024 Wantedly, Inc. Ruby製社内ツールのGo移⾏ golang.tokyo #34 Mar. 25 2024 - Atsushi Tanaka @bgpat

Slide 2

Slide 2 text

© 2024 Wantedly, Inc. $ whoami @bgpat / Atsushi Tanaka ウォンテッドリー株式会社 Infrastructure Engineer Kubernetes / Terraform SRE / Platform Engineering 好きなパッケージ golang.org/x/sync/singleflight

Slide 3

Slide 3 text

© 2024 Wantedly, Inc. 究極の適材適所により、 シゴトでココロオドルひとを ふやすために Wantedlyはパーパス‧共感を軸にした、⼈と会社との出会いを2012 年から創出。 はたらくすべての⼈が共感を通じて「であい」「つながり」「つなが りを深める」ためのビジネスSNS「Wantedly」を提供しています。 1⼈でも多くの⼈がワクワクしたり、熱中してシゴトと向き合えるよ うな世界を実現するために、国境を超えて「はたらくすべての⼈のイ ンフラ」を創っていきます。 ウォンテッドリーについて

Slide 4

Slide 4 text

© 2024 Wantedly, Inc. ウォンテッドリーについて

Slide 5

Slide 5 text

© 2024 Wantedly, Inc. ウォンテッドリーについて ウォンテッドリーのバックエンド領域を⽀える⾔語の歴史を読み解く https://www.wantedly.com/companies/wantedly/post_articles/886087

Slide 6

Slide 6 text

© 2024 Wantedly, Inc. ウォンテッドリーについて ● (Goも使われているが) Rubyの利⽤が多い ● マイクロサービス構成 ● Kubernetes上で運⽤

Slide 7

Slide 7 text

© 2024 Wantedly, Inc. Infrastructure Squad (インフラチーム) の取り組み インフラや開発運⽤に関わる機能とプラクティスをプラットフォームとして提供していく

Slide 8

Slide 8 text

© 2024 Wantedly, Inc. Infrastructure Squad (インフラチーム) の取り組み インフラや開発運⽤に関わる機能とプラクティスをプラットフォームとして提供していく 今⽇話す部分

Slide 9

Slide 9 text

© 2024 Wantedly, Inc. 内製ツール “kube” kube | Wantedly Engineering Handbook https://docs.wantedly.dev/fields/dev-tools/kube

Slide 10

Slide 10 text

© 2024 Wantedly, Inc. 内製ツール “kube” ● エンジニアがデプロイ等の操作をするためのツール ● kubectlのラッパーコマンド ● はじめはRubyで書かれていた ○ Rubyを扱えるエンジニアが多かった ○ 参考にしたCapistranoがRubyで書かれていた

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

© 2024 Wantedly, Inc. Goへのリプレース ● 環境によって動作しない ○ ランタイムのバージョン → コンパイラ⾔語なのでランタイム依存しない ○ パッケージや共有ライブラリへの依存 → static linkで考慮不要 ○ OSによる環境差異 → クロスコンパイルが容易 ● Kubernetesとの相性が良くない ○ パッケージが少ない → 既存の資産を利⽤可能に ● 実⾏速度が遅い ○ Rubyで並列処理を書くのは⼤変 → goroutine で簡単に並列処理が書ける

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

© 2024 Wantedly, Inc. 移⾏後しばらく経って - 困った点 ● テストが書きづらい ○ 処理を後から書き換えることができない ○ mockしやすい構成にする必要がある ■ かなりの量のコードを書き直した ● ツールチェインが充実していなかった→時間経過で改善 ○ パッケージマネージャー: 当時は go mod がなかった ○ ファイル埋め込み: go:embed がなかったので jessevdk/go-assets や rakyll/statik を使っていた

Slide 15

Slide 15 text

© 2024 Wantedly, Inc. まとめ Goに移⾏したことで ● 環境依存を限りなくなり多様なニーズに応えやすく ● 安全にバージョンアップでき容易にメンテナンス可能に ● テストの考慮をせず書いてほとんどを書き直すことに

Slide 16

Slide 16 text

© 2024 Wantedly, Inc. We are hiring! https://www.wantedly.com/projects/522096