こんにちは。課金基盤チームのyurikoです。2026年もやってきました。新年を迎えて心機一転、身の回りを整理整頓・大掃除したくなりますよね?
今回はGemfileにいつの間にか追加されていたGemを「掃除」した話をしたいと思います。
それはDependabotの作ったPRからはじまった
私の所属している課金基盤チームでは、Ruby on Rails製の社内向けアプリケーションを開発しています。このアプリのリポジトリでは、Dependabotによって定期的にGemアップデートのためのPull Request(以下、PR)が作成されるようになっています。
いつものようにGemアップデートのPRを確認していた私は、見慣れないGemのアップデートPRを目にしました。それはnet-imapというGemでした。
net-imapとは
net-imap GemはIMAPのクライアントライブラリです。サーバーで受信したメールを扱うために使われます。
対象のアプリではメール送信を行っているものの、受信したメールを処理することはありません。コードを調べた限り、このGemを使っている処理はなさそうです。
Gemが追加されたのはRuby 3.1.4へのバージョンアップ時
net-imapが追加されたPRを確認すると、Ruby 3.0.3からRuby 3.1.4へのRubyアップデートのPRでした。このPRではnet-imapの他にnet-pop、net-smtpというGemがGemfileに追加されています。どれもメールの送受信に関わるGemです。
Ruby3.1.4で何が起きたのでしょうか?
マイナーバージョンであるRuby 3.1.0のリリースノートを見てみます。
- 以下のライブラリが新たに bundled gems になりました。Bundler から利用する場合は Gemfile に明示的に指定してください。
- net-ftp 0.1.3
- net-imap 0.2.2
- net-pop 0.1.1
- net-smtp 0.3.1
- matrix 0.4.2
- prime 0.1.2
- debug 1.4.0
これまでdefault gemsとなっていたnet-imap、net-pop、net-smtp がbundled gemsになり、これによってBundlerから利用する場合はGemfileで明示的に指定する必要が生じました。
だから、Ruby 3.1.4へのバージョンアップでGemfileにこれらのGemが追加されていたというわけです。
で、これらのGemってどこで使ってるの?
気になるのはこれらのメール送受信に関わるGemたちがどこで使われているかということです。
RailsでメールといえばActionMailerです。ActionMailerはRailsアプリケーションからメールを送信するためのコンポーネントです。
ちなみにメール関連だとメール受信を処理するActionMailboxというコンポーネントも存在します。こちらは今回対象となるアプリでは使っていません。
ActionMailerはmail Gemを使っており、さらにこのmail Gemはnet-imap、net-pop、net-smtpといったGemを使っているという依存関係になります。
しかし、私の開発しているアプリではActionMailer(Rails)がインストールされているわけで、直接依存するmail Gemや間接的に依存するnet-imap、net-pop、net-smtpを明示的にGemfileに書く必要はないように思えます。
どうしてRubyアップデートの際にこれらのGemを追加したのでしょうか?
原因はRailsのバージョン
調べたところ、enpayのRubyが3.1.0にアップデートしました🎉という記事が見つかりました。
Ruby3.1.0 ではいくつかの Gem が default gem から bundled gem に変更になりました。
これらのうちメール関連の Gem (net-pop, net-imap, net-smtp)は actionmailer と actionmailbox の依存 Gem (正確には actionmailer と actionmailbox が依存している mail の依存 Gem)のため、Rails のバージョンが 6.1 以下の場合に net-pop や net-imap、net-smtp を読み込もうとした時点で LoadError が発生します。
この現象は Rails7.0 では https://github.com/rails/rails/pull/44083 で修正されているのですが、Pull Request の description にある通り Rails6.1 にはバックポートされていないためワークアラウンドな対応として Gemfile に net-pop、net-imap、net-smtp を追加しました。
これでは!?
調べてみると、このRuby 3.1.4へのアップデート時のRailsバージョンは6.1.6.1でした。これだ!
Gemを追加したり削除したり
引用した記事にも記載の通り、Rails 7.0でnet-pop、net-imap、net-smtpがRails側でインストールされるようになっています。2022年1月のことです。
おそらくmail Gem側の対応が追いついていなかったのでRails側で一旦インストールするようにしたのでしょう。mail Gem側でも数ヶ月遅れて対応されています。
そして、時は流れて2024年、不要になったnet-pop、net-imap、net-smtpがRails側で削除されています。
つまりGemfileから消していいわけです
mail Gem側で対応された以上、私たちの開発しているアプリでnet-imapをGemfileで管理する必要はありません。
Gemfileから削除します。バイバイ。ActionMailerとその先のmail Gemで元気にな。
たまにはGemfileを掃除しよう
というわけで、Gemfileに眠っていた不要なGemの背景を追い、削除した話でした。
今ではGemfileで個別の管理が不要なGem、使っていないGemが意外と眠っているかもしれません。(Rails側でもGemを削除するのに2年かかってますしね)
新年が始まったばかりの今こそGemfileの大掃除をしてみてはいかがでしょうか。
We Are Hiring!
SmartHR では一緒に SmartHR を作りあげていく仲間を募集中です!
少しでも興味を持っていただけたら、カジュアル面談でざっくばらんにお話ししましょう!