🧐

【Rails】Sorceryがサポート終了しているって本当?

2024/12/04に公開

この記事はPREVENTアドベントカレンダー4日目の記事です。

https://adventar.org/calendars/10319

はじめに

PREVENTで働いているバックエンドエンジニアのとぴ(@topi_log)と申します!
少し前に、認証ライブラリとして有名なSorceryがメンテナンスされていない警告がGitHubのREADMEに記載されました。
人気を博する認証GemのひとつであるSorceryに何があったのかについて深掘りましたので、まとめを執筆させていただきます。

対象者

RailsアプリケーションでSorceryを利用している方、または利用を検討していた方

結論

詳細はいいよ!という方向けにお伝えすると、Sorceryはサポート終了しています
現時点でメンテナンスやメジャーアップデートは無いと推察されます。

詳細を知りたい!という方は以降をご覧くださいませ。

取り扱う内容

  • Sorceryとは
  • サポート終了の詳細
  • 今後の対応について

Sorceryとは

SorceryとはRailsアプリケーションで利用できる認証ライブラリです。
軽量さとシンプルさを兼ね備えたSorceryは、必要最低限の機能が備わっておりカスタマイズ性に長け実装しやすいのが特徴です。

https://github.com/Sorcery/sorcery

Sorceryでできることは

  • メールアドレス・パスワードを利用したシンプルなログイン機能
  • 自動ログイン
  • Basic認証
  • GoogleログインなどのSNS認証
  • リメンバーミー
  • パスワードリセット
  • セッションのタイムアウト

などがあります。
人気を誇るに認証ライブラリのdeviseと比べ機能数は少ないものの、だからこそ軽量さとシンプルさを実現できています。
管理者はパーフェクトRuby on Railsの著者の一人である前島真一氏と、セキュリティ業界に身を置いているというJosh Buker氏です。
OSSのため貢献者は沢山いらっしゃいますが、プルリクエストに対するレビュワーはこのお二方のようです。

サポート終了の詳細

READMEによると

SorceryのREADMEの更新日は2024年9月18日です。READNEにはこのように書かれています

Sorcery is currently unmaintained.

What should I do?

  1. Help maintain Sorcery (see: #350)
  2. Keep using Sorcery, and accept the risk that it may break or have unpatched security vulnerabilities.
  3. Consider switching to alternative libraries that are actively maintained:
  • Clearance
  • Rodauth
  • Devise
  • OmniAuth

内容を訳すと

Sorceryは現在メンテナンスされていません

どうすべきか

  1. Sorceryの維持に貢献(詳しくは #350へ)
  2. Sorceryを使い続けるなら、壊れる可能性やバッチが適用されていないセキュリティ脆弱性がある可能性があるリスクを受け入れてください
  3. 積極的にメンテナンスされている別のライブラリへ乗り換えを検討してください

と書かれています。
メンテナンスがされていない詳細についてはissueにあるのでそちらを見るとして、READMEから分かることはSorceryとしては翻訳した3つを提案していることです。

  • 今後も使えるようにするために、Sorceryのメンテナンスを誰かにやってほしい(詳細はissueにて)
  • 使い続けてもいいけどリスクがあるので自己責任で
  • Sorceryをやめて他のライブラリの利用・乗り換えを

リスクがあるとなれば、これから導入しようという場合は避けた方が良さそうです。
一方、すでに使っている場合は乗り換えるか否かの選択が迫られます。
乗り換えるにしても場合によってはデータベースを操作する必要やロジックを大幅に書き換える必要が出てくるかと思いますので、移行にはそれなりのコストがかかると予想されます。

issueにある詳細を見る

READMEにも書いてありますが、詳細はissueにあるので読みに行きました。

https://github.com/Sorcery/sorcery/issues/350

issueのタイトルは「Sorceryはメンテナンスされていない、追加のメンテナを探しています」です。
そして2023年10月18日に作成されたissueの内容にはこのように書かれています。

Unfortunately, I have not been able to dedicate much time to pushing Sorcery forward, and things like Rails 7 support, version 1 release, switching to Omniauth for SSO, Passkey support, etc, have fallen behind schedule by a factor of years.
I still plan on pushing these efforts forward, but to accelerate the process to a reasonable timeframe, it would be good to pull in additional maintainers for the project.
If you are interested in helping, please let me know via this issue or by working on issues/pull requests marked "help wanted."

日本語訳すると

残念ながら、Sorceryに取り組むための多くの時間を割けず、Rails7のサポート、バージョン1のリリース、SSOのOmniAuthへの切り替え、Passkeyのサポートなどは、予定より数年遅れてしまいました。
私はまだこれらの取り組みを続けるつもりですが、限られた時間でより早く取り組むには、このプロジェクトにメンテナーを引き入れた方がいいでしょう。
もし手伝っていただけるようでされば、このissueを通してか、「help wanted」と書かれたissueやプルリクエストに取り組んで私に教えてください。

当初私は「Sorceryがサポート終了になったってよ」と聞いており、READMEにあった「メンテナンスされていない」の文言から今後更新はなく完全にサポートが終了したものだと思っていました。
詳細issueをよく読んでみると、「まだ続けるつもりはある、でも時間がかけられない、誰か手伝って」といった内容が書かれており、サポートが終了したわけではないように見えます。
しかしこの後もやり取りは続いているので、読んでいくとこのようなことが分かりました

  • 別のリポジトリでバージョン1のリリースに向けて活動している
  • GitHubProjectにisuseなどが上がっており、整理している

なんとか更新を続けるために、他の方が手を挙げ動いているのが分かります。
ところが最後に投稿されたJosh氏の投稿では

It's been years, and I think it's time for me to accept that I simply do not have the time to focus on Sorcery like I hoped. While I'll still help as I can, I'm marking Sorcery as unmaintained in the hopes that someone else will take up the mantle, or the community can at least move to alternative libraries with a similar ethos that are properly maintained.

日本語訳すると

とうとうSorceryに集中する時間がないことを受け入れる時が来たと思います。
Sorceryのメンテナンスは他の誰かが引き継ぐか、Sorceryの利用者であれば適切なメンテナンスが行われている別のライブラリに移行できることを期待しています。

Josh氏はメンテナンスにもう関われないような文言です。
実際このコメントが投稿された日に、READMEが「メンテナンスされていない」に修正されています。
また、READMEの一番下を見に行くとメンテナの名前が列挙されています。

Contact

Feel free to ask questions using these contact details:
Current Maintainers:

  • Sorcery has no active maintainers: #350

Past Maintainers:

  • ...

こちらを読むと「現在アクティブに活動しているメンテナはいない」とあり、メンテナもいない状態であることも分かります。

今後の対応について

先ほどissueのコメントを見ていた中で「バージョン1に向けて別のリポジトリで活動している」とありました。
ではそのリポジトリがどのようになっているのか見てみます。

https://github.com/Sorcery/sorcery-rework

こちらのコミット履歴を見てみると、2024年9月18日の更新を最後に音沙汰がないようです。
こちらが最後のコミットの内容です。

https://github.com/Sorcery/sorcery-rework/commit/dd39c76635ce239c74eb40df023b54bd4f3494a2

見てみると、コードオーナーをSorceryの開発者のJosh氏に変更しているのが分かります。
Josh氏はSorceryの開発に割く時間が捻出できないと、先程のissueでコメントしていることから事実上Sorceryは開発がストップしたのではないかと考えられます。

結論

以上Sorceryのリポジトリを確認し、Sorceryの開発が止まっておりメンテナンスも終了しているのが分かりました。
これから認証Gemを導入しようとしている場合は、Sorceryは選択肢から外れることになります。
そして現在Sorceryを使っているプロダクトについては、リスクを背負って使い続けるか別のGemへの移行を余儀なくされます。

終わりに

認証周りのサポート終了は影響範囲が大きい上に最初に選定しなければならないものなので、Sorceryのサポート終了については「定期メンテナンスされているか」「今後もメンテナンスされ続けるか」が重要だと再認識する一件でした。
認証に限らずライブラリのメンテナンス状況は定期的に確認していく必要があるとも思ったので、アンテナを張って行きたいと思います!

Discussion