💎

PD WorkTime で Gemfile を見直してみた

2022/04/13に公開

こんにちは、 Leaner Technologies の石渡(@mishiwata1015)です。

Leaner ではエンジニアチームが週に一度集まってチームや技術の話をする PD WorkTime という時間を設けています。[1]

https://careers.leaner.co.jp/pdworktime

先日の PD WorkTime では Gemfile 見直し会を行ったので、今日はその話をします。

よりよいGemはないか?

Gemfile に記載されている全ての Gem に対し、以下の観点で 1 つ 1 つ見直しました。

  • 不要な Gem が記載されていないか
  • 適切な Group に Gem が記載されているか
  • 今使ってる Gem よりも、よりよい Gem がないか

この手の作業は一人で黙々とやるよりも、他のエンジニアを巻き込んで同期的にワイワイやる方がいいですね。「この Gem はここで使ってるよ」「もうこの Gem 使ってないはず」など、パッと出てくるので効率良く見直し作業を進められました。

いくつか乗り換え推奨の Gem があったので紹介します。

Kaminari → Pagy

https://github.com/ddnexus/pagy

ページネーションの Gem について、 KaminariよりもPagyの方が40倍早いと言われています。

Leaner でも Kaminari から Pagy への移行を進めていて、ページネーションの新規実装時は Pagy を使用しています。古いコードには Kaminari を使用している箇所が残っていたのですが、Pagy へ完全に乗り換えていく予定です。

activerecord-import → insert_all

https://railsdoc.com/page/insert_all

Rails で bulk insert を行う場合、Rails5 までは activerecord-import を使用するのが主流でした。Rails6 から実装された insert_all により、Rails 標準機能で bulk insert が行えるようになりました。

こちらも Pagy と同様に、古いコードから activerecord-import を剥がして insert_all へ完全に乗り換えていく予定です。

Jbuilder, jb → Alba (検討中)

https://github.com/okuramasafumi/alba

Rails で JSON 形式のレスポンスを生成する場合、様々な選択肢があります。それぞれメリット・デメリットがあるので、これを使っておけば間違いない!という鉄板 Gem は無い認識でしたが、改めて調べたところ Alba がよさそうでした。

Zenn でも作者による記事が公開されています。
https://zenn.dev/okuramasafumi/articles/53fcee0f946ac3

Albaはエラーハンドリングのような独自機能に加えて、representableのみがサポートしている型付け機能やActiveModelSerializersのみがサポートする循環参照機能もサポートしています。

AlbaはRubyエコシステムにおけるJSONシリアライザのデファクトスタンダードになることを狙っています。代替と比べて以下の優位性を提供します。

  • 速度:Albaは既存のJSONシリアライザの全てより高速です
  • 機能:Albaは通常必要な機能を網羅しつつ、型付けのような機能も提供します
  • シンプル:Albaは引き続き他のgemに依存しないため、Rails以外の環境での使用が容易です

後発 Gem ということもあり、速度面はもちろんのこと型付けなどの機能も豊富で、既存 Gem のいいとこ取りしたような Gem となっています。シンプルな実装に保つ努力がなされていたり継続的なメンテも期待できそうです。

Leaner では、パフォーマンス面の問題から Jbuilderjb へ移行中、という状況でしたが、Alba であればパフォーマンス改善に加えて型付けなどの機能も利用できそうです。このあたり検証してみたいなと考えています。

PD WorkTimeでエンジニア組織横串のコミュニケーション

Leaner には 2 つのプロダクトがあり、各プロダクトごとに専任の開発チームが存在しています。各エンジニアはどちらかのチームに所属して日々業務を行っているため、普段はチーム間のコミュニケーションがそれほど多くありません。(times チャンネルで絡んだりとかはよくありますが)

プロダクトチーム間のエンジニアが横串のコミュニケーションを取る場として PD WorkTime が役立っています。

議題に制限はなく、開発時に発生した困りごとや得た知見を共有したり、エンジニア全体で取り組みたい事を各自自由に持ち込んでいます。技術的な情報交換の他に、社内勉強会、ドラッカー風エクササイズのようなワークショップなども行っています。

今回取り上げた「Gemfile 見直し」においても、以下のような情報を効率良く共有できました。

  • 各プロダクトがどんな機能を持っているか
  • その機能をどんな Gem を使って実装しているか
  • その Gem の良いところ・つらみ

単なる Gem の知識共有だけでなく、誰がその領域に詳しいのかという情報まで共有できるのが良かったですね。

まとめ

  • Gemfile 見直しを定期的に行うのは大事
  • 他プロダクトのエンジニアも交えて Gemfile を見直すことで、他プロダクトの知見も得られる
  • 技術的な話をみんなでワイワイ話すのは楽しい

宣伝

Leaner の PD WorkTime は外部参加を歓迎しています!
ちょっと覗いてみたいな〜という方、ご応募お待ちしております!

https://meety.net/matches/QWfonGfZOJLG

https://careers.leaner.co.jp/engineering

脚注
  1. Leaner ではプロダクト開発チームのことを Product Development (PD) と呼んでいます。 ↩︎

リーナーテックブログ

Discussion