そのライブラリ、続投?それとも解雇? 「stay_or_go」で素早く決断!@kon_yu

kon_yu 0 views 17 slides Oct 15, 2025
Slide 1
Slide 1 of 17
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17

About This Presentation

- **stay_or_go でライブラリを自動スコアリング** - GitHub リポジトリ情報から gem の健全性を数分で評価可能
- **スコアベースで効率的に運用** - 低スコアの gem に絞って調査することで、点検時間を大幅削減
- **実績: 10 年運用プ...


Slide Content

そのライブラリ、続投?それとも解雇?
「stay_or_go」で素早く決断!
株式会社 UZUMAKI CTO 今 佑介(@kon_yu)

こんなことありませんか?
Gemfile の肥大化問題
Rails プロジェクトを数年運用すると Gemfile が肥大化し ていく
サービスを運営するにつれ て増え続け るライブラリ
gem の追加は簡単だが削減は難しい
なぜなら実際に使っ ているから ...
2

Gemfile の肥大化問題 2
その gem 本当に全部必要?
その gem を利用し ているのは 1 ファイルだけだったり
そもそも使っ ているコードがなくなっ ていたり
コードはあるけどどこにも呼ばれ ていない (けどテストはある )
3

オレが考えた最強の gem 問題
オレが考えた最強の gem を導入したのに退職してしまったアイツ
作成者が退職後、メンテナン ス停止
会社リポジトリですらない、最終更新 5 年前
誰もメンテナン スしなくなっ てしまった ...
4

Rails/Ruby バージョンアップ時の課題
依存 gem が古くてアップデートできない
Ruby2 系 →3.0 移行時に問題発覚しがち
依存し ている gem がメンテナン スされていない
PR を送っ ても放置される ...
どの gem から調査すればいいの?
一つ一つの gem を今後も使っ ていくか調査し てられない
優先順位をつけたいけど判断基準がない
5

背景と課題
gem(ライブラリ)管理はどんなサービスでも避けられない
セキュリテ ィリスクは Github の Dependabot はセキュリテ ィが教え てくれるけ
ど、問題が出ないと教え てくれない
依存関係によりフレー ムワークや言語の アップグレードの足かせ
単純に gem が多いとコードの見通しが悪くなる
でも、どの gem から手をつければいいかわからない ...
6

解決策
stay_or_go
もともと仕事で同じようなものを Ruby で作ったものを Go 言語で再実装
ライブラリの GitHub リポジトリを使用し て自動でスコアリング
評価基準
フォーク数、スター数、 Issue 数、PR 数、最終コミット日、ア ーカイブされ
ているか
結果を Markdown のテー ブル、CSV、TSV に出力
Markdown のテー ブル から Notion でデー タベース化
CSV から pandas.DataFrame に読み込ませて統計処理
7

出力例:
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

デモ
Youtube 動画のデモ
https://youtu.be/3wgeAq8GEGw
出力結果の Notion
https://x.gd/KvPY5
9

システムの仕組み
データ取得からスコアリングまで
1. Rubygems から依存情報 (JSON)取得
2. GitHub API でリポジトリ情報を並列取得
Go 言語の並列処理を活用
3. スコアリングロジック
スター数 → 人気度
最新コミット日時 → メンテナン ス状況
フォーク数、 Issue 数、PR 数なども考慮
これらを総合し てスコア算出
10

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

実際に見つかった問題あるライブラリ
ネイティブ拡張系 gem
Ruby3 系からパフォー マンス逆転 (純粋 Ruby の方が速い )
環境構築で問題発生しやすい
避けられるものは避けたい
DSL 系 gem
devise, activeadmin はメンテされ ているが ...
マイナーな DSL 系はメンテナン ス停止が 多い
特定の目的に特化した DSL を提供する gem は要注意
12

実際の効果
10 年近く運用している Ruby on Rails のプロジェクトに対して実施
効果
100 以上のライブラリ (gem)を数分でスコアリング
管理する gem を 10% 削減
よりハイパフォー マンスな gem に置き換え
顧客の声 :
スコアをもとに、スコアが N 以下のものをす べて点検するよう指標ができた
どの gem を調査するべきか、検討する時間を省略できた
13

stay_or_go 運用の仕方
効率的な運用方法
全ての gem を調査するのは現実的ではない
その gem を利用し ているのは 1 ファイルだけだったり
実は使っ ていなかったり
スコアベースの運用
ざっくりスコアが N 点以下のものを調査対象とする
半年に一回の定期点検がおすす め
14

計測後の具体的な作業
一定以下のスコアの低いライブラリを調査・検討
そもそも利用し ているか
言語や FW のデフォルトの API で代替で きないか
簡単な実装でライブラリを置き換えられないか
代替するメンテされ ているライブラリに変更できないか
パフォー マンス計測し て比較
なかなか大変
そんなときは UZUMAKI にお問い合わせを!
15

まとめ
stay_or_go でライブラリを自動スコアリング - GitHub リポジトリ情報から gem
の健全性を数分で評価可能
スコアベースで効率的に運用 - 低スコアの gem に絞っ て調査することで 、点検時
間を大幅削減
実績: 10 年運用プロジ ェクトで gem を 10%削減 - 不要な依存を削減し、よりメン
テナンスされたライブラリへ置き換え
Gemfile の定期検診をしましょう - 絶対使っ てない・古い gem あるから
16

UZUMAKI の CM:
Rails エンジニアの募 集中
17
Tags