こんにちは、ドリコムの三上(@mkmn252)です。
この記事はRubyKaigi 2019の1日目のセッション報告になります。本日行われたセッションの中でも私が特に気になったものをご報告させていただきます。
また、基調講演の様子はこちらにございますので、合わせてご覧ください。

A Bundle of Joy: Rewriting for Performance

このセッションはRailsのコア開発メンバーである、Matthew Draper氏(@_matthewd)による発表になります。

Bundlerにも改善の余地がある

BundlerはRubyのパッケージ管理ツールであり、Rubyエンジニアにとっては必須のツールかと思います。新しいプロジェクトを作成したり、gemを追加する際にはbundle install、Railsを動かす際にはbundle exec rails xxx といった具合に頻繁にBundlerを利用しています。 そんなBundlerですが、Rubygemsや手動でgemを読み込む場合と比較するとパフォーマンスが悪いそうです。そこで、Matthew氏はリファクタリングによるパフォーマンス改善方法を示されていました。

Gel:新しいパッケージ管理ツール

また、Matthew氏は新しいパッケージ管理ツールとして、Gelというツールを提案しています。 このツールは、Bundlerと同様にgemのinstallやupdate、execコマンドを提供しています。使い方もBundlerと同じように利用することができます。

# ex. gemをinstallする
## Bundler
$ bundle install

## Gel
$ gel install

驚くべきはそのパフォーマンスです。Gelの各コマンドは同等のBundlerコマンドと比較し、パフォーマンスが改善されています。この結果には、会場からもどよめきが起こる程でした。 特にlockコマンドの改善は顕著で、Gemfile.lockファイルがない状態で実行すると、大幅に改善されています。これは、gemの依存性解消が高速化されているからだそうです。 どの程度改善されているかは、資料が公開されていますのでそちらをご覧ください。
Bundlerは一日何回も実行するコマンドですし、小さなパフォーマンス改善であっても積もり積もれば大きな時間になりますので、効果は絶大ではないでしょうか。

まとめ

セッションでは、既存ツールのBundlerのパフォーマンス改善手段が示されました。 セッション内、既存のコードを書き換える価値があることもあるし、普段良く使う既存のツールであっても大きな改善の余地があるというMatthew氏の言葉は、非常に心に刺さりました。 みなさんも、一度既存のコードやツールを見直してみてはいかがでしょうか。