そのライブラリ、続投?それとも解雇? 「stay_or_go」で素早く決断!
by
kon_yu
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
そのライブラリ、続投?それとも解雇? 「stay_or_go」で素早く決断! 株式会社 UZUMAKI CTO 今 佑介(@kon_yu)
Slide 2
Slide 2 text
こんなことありませんか? Gemfile の肥大化問題 Rails プロジェクトを数年運用すると Gemfile が肥大化していく サービスを運営するにつれて増え続けるライブラリ gem の追加は簡単だが削減は難しい なぜなら実際に使っているから... 2
Slide 3
Slide 3 text
Gemfile の肥大化問題 2 その gem 本当に全部必要? その gem を利用しているのは 1 ファイルだけだったり そもそも使っているコードがなくなっていたり コードはあるけどどこにも呼ばれていない(けどテストはある) 3
Slide 4
Slide 4 text
オレが考えた最強の gem 問題 オレが考えた最強の gem を導入したのに退職してしまったアイツ 作成者が退職後、メンテナンス停止 会社リポジトリですらない、最終更新 5 年前 誰もメンテナンスしなくなってしまった... 4
Slide 5
Slide 5 text
Rails/Ruby バージョンアップ時の課題 依存 gem が古くてアップデートできない Ruby2 系 →3.0 移行時に問題発覚しがち 依存している gem がメンテナンスされていない PR を送っても放置される... どの gem から調査すればいいの? 一つ一つの gem を今後も使っていくか調査してられない 優先順位をつけたいけど判断基準がない 5
Slide 6
Slide 6 text
背景と課題 gem(ライブラリ)管理はどんなサービスでも避けられない セキュリティリスクは Github の Dependabot はセキュリティが教えてくれるけ ど、問題が出ないと教えてくれない メンテされていない gem は依存関係により Rails や Ruby のアップグレードの足か せ gem が多いとコードの見通しが悪くなる でも、どの gem から手をつければいいかわからない... 6
Slide 7
Slide 7 text
解決策 stay_or_go もともと仕事で同じようなものを Ruby で作ったものを Go 言語で再実装 ライブラリの GitHub リポジトリを使用して自動でスコアリング 評価基準 フォーク数、スター数、Issue 数、PR 数、最終コミット日、アーカイブされ ているか 結果を Markdown のテーブル、CSV、TSV に出力 Markdown のテーブル から Notion でデータベース化 CSV から pandas.DataFrame に読み込ませて統計処理 7
Slide 8
Slide 8 text
出力例: Name RepositoryURL LastCommitDate ... Score activeadmin https://... 2024-11-25T21:00:24Z ... 1282 active_decorator https://... 2024-11-04T14:51:22Z ... 121 active_decorator-rspec https://... 2017-03-15T12:48:01Z ... -137 activerecord-import https://... 2024-11-16T06:00:21Z ... 466 8
Slide 9
Slide 9 text
デモ Youtube 動画のデモ https://youtu.be/3wgeAq8GEGw 出力結果の Notion https://x.gd/KvPY5 9
Slide 10
Slide 10 text
システムの仕組み データ取得からスコアリングまで 1. Rubygems から依存情報(JSON)取得 2. GitHub API でリポジトリ情報を並列取得 Go 言語の並列処理を活用 3. スコアリングロジック スター数 → 人気度 最新コミット日時 → メンテナンス状況 フォーク数、Issue 数、PR 数なども考慮 これらを総合してスコア算出 10
Slide 11
Slide 11 text
stay_or_go のリポジトリ GitHub リポジトリ: https://github.com/uzumaki-inc/stay_or_go GitHub Actions Marketplace に登録済み https://github.com/marketplace/actions/stay_or_go-docker-action Action として簡単に CI/CD パイプラインに組み込み可能 現在のところ Ruby(Gemfile)と Go 言語(go.mod)に対応 Python 対応、PHP 対応など PR どしどしお待ちしています 11
Slide 12
Slide 12 text
実際に見つかった問題あるライブラリ ネイティブ拡張系 gem Ruby3 系からパフォーマンス逆転(純粋 Ruby の方が速い) 環境構築で問題発生しやすい 避けられるものは避けたい DSL 系 gem devise, activeadmin はメンテされているが... マイナーな DSL 系はメンテナンス停止が多い 特定の目的に特化した DSL を提供する gem は要注意 12
Slide 13
Slide 13 text
実際の効果 10 年近く運用している Ruby on Rails のプロジェクトに対して実施 効果 100 以上のライブラリ(gem)を数分でスコアリング 管理する gem を 10% 削減 よりハイパフォーマンスな gem に置き換え 顧客の声 : スコアをもとに、スコアが N 以下のものをすべて点検するよう指標ができた どの gem を調査するべきか、検討する時間を省略できた 13
Slide 14
Slide 14 text
stay_or_go 運用の仕方 効率的な運用方法 ハードコアに Github actions の PR のたびに実行 点数が N 店以下は CI を落とす せっかく GitHub Actions Marketplace に公開したので使ってほしい スコアベースの運用 ざっくりスコアが N 点以下のものを調査対象とする 半年に一回の定期点検がおすすめ 14
Slide 15
Slide 15 text
計測後の具体的な作業 一定以下のスコアの低いライブラリを調査・検討 そもそも利用しているか 言語や FW のデフォルトの API で代替できないか 簡単な実装でライブラリを置き換えられないか 代替するメンテされているライブラリに変更できないか パフォーマンス計測して比較 なかなか大変 そんなときは UZUMAKI にお問い合わせを! 15
Slide 16
Slide 16 text
まとめ stay_or_go でライブラリを自動スコアリング - GitHub リポジトリ情報から gem の健全性を数分で評価可能 スコアベースで効率的に運用 - 低スコアの gem に絞って調査することで、点検時 間を大幅削減 実績: 10 年運用プロジェクトで gem を 10%削減 - 不要な依存を削減し、よりメン テナンスされたライブラリへ置き換え Gemfile の定期検診をしましょう - 絶対使ってない・古い gem あるから 16
Slide 17
Slide 17 text
UZUMAKI の CM: 2026 年 1 月〜 フリーランス & 副業メン バー募集! カジュアル面談 受付中「いちど 話を聞いてみたい」という方も 大歓迎です 17