Slide 1

Slide 1 text

Kaigi Effect 2025 After RubyKaigi 2025〜ZOZO、ファインディ、ピクシブ〜 https://pixiv.connpass.com/event/352852/ pixiv Inc. sue445 2025.5.13

Slide 2

Slide 2 text

2 Hello!

Slide 3

Slide 3 text

3 My name is Go The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The design is licensed under the Creative Commons 4.0 Attributions license. Read this article for more details: https://blog.golang.org/gopher

Slide 4

Slide 4 text

4 About sue445 ● Go Sueyoshi (a.k.a. sue445, sue-san) ● Gopher since 1982 ● pixiv Inc (2018-) ● https://x.com/sue445 ● https://github.com/sue445 ● Shibuya.rb ● Tokyu.rb sue445

Slide 5

Slide 5 text

● 2019 (福岡): Best practices in web API client development ○ https://rubykaigi.org/2019/presentations/sue445.html#apr20 ● 2020 (松本) : Ruby on CI ○ Proposalは採択されたがコロナでオンサイト開催自体が中止になった ● 2023 (松本) : Fix SQL N+1 queries with RuboCop ○ https://rubykaigi.org/2023/presentations/sue445.html#day2 5 Past my RubyKaigi Talks

Slide 6

Slide 6 text

6 RubyKaigi 2025 https://rubykaigi.org/2025/presentations/sue445.html#day3

Slide 7

Slide 7 text

7 CM1: 登壇報告 https://inside.pixiv.blog/2025/04/23/160000

Slide 8

Slide 8 text

8 CM2: 登壇予定 https://smartbank.connpass.com/event/351000/

Slide 9

Slide 9 text

9 CM2: 登壇予定 https://smartbank.connpass.com/event/351000/

Slide 10

Slide 10 text

● RubyKaigi 2025の前後に書いたコード(Kaigi Effect)について 10 今日話すこと

Slide 11

Slide 11 text

● 雑な説明 ○ RubyKaigiなどに参加した時の「やっていき」全般 ● 詳しいこと ○ https://scrapbox.io/kakutani/kaigieffect ○ https://scrapbox.io/iki-iki/%23kaigieffect 11 About Kaigi Effect

Slide 12

Slide 12 text

● #kaigieffect LT大会( https://timeedev.connpass.com/event/318445/ )で喋っ た ● https://esa-pages.io/p/sharing/8985/posts/842/dcff19f54d5e015a48b5-sl ides.html#/ ● 新しいgemを作ったり既存のgemのメンテをしてた 12 Kaigi Effect 2024

Slide 13

Slide 13 text

● 登壇の1ヶ月前には既に発表資料は完成していた ● 資料の細かい微調整と体調管理くらいしかやることがなくて暇だった ● 発表資料作成中にgo-gem-wrapper(今回のトークのテーマ)のバグを見つけてい くつかなおしたけど、トークとは全く関係ないコードも結構書いてた 13 Kaigi Effect 2025

Slide 14

Slide 14 text

14 RubyKaigi 1週間前の様子 https://x.com/sue445/status/1908727762007023616

Slide 15

Slide 15 text

15 https://github.com/sue445 Activity RubyKaigi 2025

Slide 16

Slide 16 text

16 https://github.com/sue445?from=2025-03-1 3&to=2025-05-13

Slide 17

Slide 17 text

17 RubyKaigiの前に書いたコードの紹介

Slide 18

Slide 18 text

● koicさんのRubyKaigi 2025のトークがRuboCop Pluginがテーマだった ○ https://rubykaigi.org/2025/presentations/koic.html ● koicさんのトークの予習がてら、自分がメンテしてるRuboCop系のgemもPlugin移 行した ○ c.f. 自分がメンテしてるRuboCop gemをPluginに移行した - くりにっき ○ https://sue445.hatenablog.com/entry/2025/03/23/234307 18 1. 自作RuboCop gemをPlugin移行

Slide 19

Slide 19 text

● 自分のOSSに直接関わってるところだったので予習も捗った ● 当日のkoicさんのトークもよく理解できてよかった 19 1. 自作RuboCop gemをPlugin移行

Slide 20

Slide 20 text

● https://github.com/sue445/connpass_api_v2-ruby ● RubyKaigiの直前にconnpass API v2が公開されたので世界最速でAPIクライアント を作った ● c.f. connpass API v2に対応したAPIクライアントgemを作った - くりにっき ○ https://sue445.hatenablog.com/entry/2025/04/05/174637 20 2. connpass_api_v2

Slide 21

Slide 21 text

21 3. 地域.rbカレンダーをconnpass API v2に移 行

Slide 22

Slide 22 text

22 地域.rbカレンダー https://sue445.github.io/regional-rb-calendar/

Slide 23

Slide 23 text

● 地域.rbカレンダーではconnpassからのイベントの取得にconnpass APIを使ってい るのでv1からv2に移行した 23 3. 地域.rbカレンダーをconnpass API v2に移 行

Slide 24

Slide 24 text

24 connpass API v2への移行でGoogle Cloudの費用が ほぼ無料になった v1 v2

Slide 25

Slide 25 text

● connpass API v1では固定IPが必要だったのだが、そのための仕組みが月21ドルく らいかかってた ● v2では固定IPが不要になったのでランニングコストが実質無料になった ● c.f. 地域.rbカレンダーをconnpass API v2に移行した - くりにっき ○ https://sue445.hatenablog.com/entry/2025/04/08/115309 25 なぜv2移行だけで安くなったのか?

Slide 26

Slide 26 text

26 RubyKaigiの後に書いたコードの紹介

Slide 27

Slide 27 text

● https://github.com/tomykaira/rspec-parameterized/blob/master/CHANGEL OG.md#v200-2025-05-02 27 1. rspec-parameterized v2.0.0

Slide 28

Slide 28 text

● https://github.com/rspec-parameterized/rspec-parameterized-core/issues/16 ● Ruby 3.4だとParser gemでwarningが出るからなんとかしてくれというissue ● Parserで出してるwarningなのでrspec-parameterizedは関係ないやろと思って最初 クローズしたんだけど、よく話を聞くとRuby 3.4以降だとParser gemが積極的にメン テされなくなったのでPrismに移行した方がいいとのこと 28 きっかけ

Slide 29

Slide 29 text

● sue「あー、これ進研ゼミRubyKaigiで見たやつだ!!!」 ● rubocop-astを参考にParser gemとPrism gemを両方使えるようにした ● c.f. rspec-parameterized v2.0.0をリリースした - くりにっき ○ https://sue445.hatenablog.com/entry/2025/05/02/181743 ● RubyKaigiで聞いたことがすぐに役に立ってよかった。(いいはなし) 29 世はまさに大Parser時代!!!

Slide 30

Slide 30 text

● https://github.com/sue445/x_post_sanitizer ● Xのポストに含まれる短縮URL(t.co)を展開したりその他色々やるgem ● https://github.com/sue445/tweet_sanitizer を https://github.com/sferik/twitter-ruby に依存しない形で作り直した ● c.f. x_post_sanitizerというgemを作った - くりにっき ○ https://sue445.hatenablog.com/entry/2025/05/05/134548 30 2. x_post_sanitizer

Slide 31

Slide 31 text

● https://gitlab.com/gitlab-org/api/client-go はGitLab APIのGoクライアント ● RubyKaigi 2025の前からパッチを送って、先週ようやくマージされた ● https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2201 31 3. https://gitlab.com/gitlab-org/api/client-go

Slide 32

Slide 32 text

32 3. https://gitlab.com/gitlab-org/api/client-go https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2201

Slide 33

Slide 33 text

● client-goには特定のステータス(429エラー、500系エラー)の時には自動リトライ する機能があるのだが、特定のAPI呼び出しの時だけ他のステータスコードでもリ トライさせたかった ○ 例. MergeRequest(GitHubでいうところのPullRequest)作成直後にAuto mergeを設定しようとすると402エラーや422エラーになることがあるためリ トライが必要になる ● そのため任意のAPI呼び出しで任意のステータスコードでリトライ可能にできるよ うにする機能を追加した ● マージはされてるけどリリースはされていない 33 モチベーション

Slide 34

Slide 34 text

● TerraformというのはIaC(Infrastructure as Code)のツール ● Google Cloud + GitHubの組み合わせで最速でTerraformリポジトリを作るための テンプレートリポジトリ ● c.f. Keyless Terraformに特化したTerraformテンプレートリポジトリを作った (AWS, GCP対応) - くりにっき ○ https://sue445.hatenablog.com/entry/2021/12/30/205629 34 4. https://github.com/sue445/terraform-gcp-template

Slide 35

Slide 35 text

35 余談:趣味で10個以上Terraform運用して る

Slide 36

Slide 36 text

1. Google Cloud関係のOSSを作った時のインテグレーションテストの実行環境 2. OSSとしてDockerイメージを配布していて、そのDockerイメージのホスティング 先としてArtifact Registryを使ってる ○ 基本的にはGitHub Container Registry(ghcr)でいいんだけど、Cloud Runで 動かす時にはArtifact RegistryかDocker Hubじゃないとダメ ○ Docker HubはRateLimitとの兼ね合いがあるのであまり使いたくない... ○ そのためGitHub Container RegistryとArtifact Registryの両方にホスティ ングしてる 36 Why?

Slide 37

Slide 37 text

● 僕はOSS 1つにつきGoogle Cloudのプロジェクトも1つ作ってる ○ プロジェクトを分けた方がかかってる費用の内訳が分かりやすいため ● Google Cloudのプロジェクトも1つにつきTerraformリポジトリも1つ必要 ● 気づいたら16個になってた 37 Why?

Slide 38

Slide 38 text

● templateリポジトリを元にリポジトリを作成 ● Terraform実行のためにGCSのバケットやサービスアカウントなどが必要なので、 Deployment Managerで初期セットアップしてる ○ Deployment ManagerはAWSのCloudFormationみたいなやつ ● 余談1:https://github.com/sue445/terraform-aws-template だと CloudFormationで初期セットアップしてる ● 余談2:terraform-gcp-templateとterraform-aws-templateのGitLab版があっ て、社内だとそっちを使って最速でセットアップできるようにしてる 38 terraform-gcp-templateの仕組み

Slide 39

Slide 39 text

● 39 Deployment Manager deprecation… https://cloud.google.com/deployment-manager/docs/deprecations

Slide 40

Slide 40 text

● Deployment Managerの移行先としてInfrastructure Managerが提示されている ○ https://cloud.google.com/infrastructure-manager/docs ● しかしInfrastructure ManagerはTerraformベース ● Terraformのセットアップのために別のTerraformを使いたくないw ● そのため、Deployment Managerでやってることをシェルで実装しなおした ○ https://github.com/sue445/terraform-gcp-template/pull/304 40 Deployment Manager deprecation…

Slide 41

Slide 41 text

● 41 先週末に書いた https://github.com/sue445/terraform-gcp-template/pull/304

Slide 42

Slide 42 text

● RubyKaigiは日々のコードの積み重ねなので、少なくともProposalを出そうと思っ てる人は毎日コードを書くべき 42 まとめ