はじめに
deviseとsorceryという認証機能に関わるものについて前回あたりで調べたことをまとめてみましたが。今回はもう少し深ぼってまとめてみたいと思います。
一般的とされるdeviseだが…
1. deviseはRailsエンジンを用いており、動作を定義してしまう。つまり、ライブラリとしての独立性に乏しいのでsorceryがいいこともある
Railsエンジンとは、Railsアプリケーションの一部として動作するモジュール(再利用可能なコードの塊)です。Railsエンジンを使用することで、機能や部分を独立して作成し、Railsアプリケーションに組み込むことができます。devise
はこのRailsエンジンを利用しており、認証機能の動作を多くの既存のRails機能に組み込んでいます。
このため、devise
はRailsの内部で多くの機能や動作を定義しており、これがライブラリとしての独立性を低くしています。
つまり、devise
を使うと、認証機能がRailsの他の部分と強く結びつき、カスタマイズや他のライブラリとの互換性が難しくなることがあります。
2.deviseはコントローラーのオーバーライドやソースコードを読んで一部メソッドをオーバーライドするなど依存が激しいのでsorcerygsいいことがある。
-
コントローラーのオーバーライドとは、
devise
が提供するデフォルトのコントローラーやアクションをカスタマイズするために、自分自身でコントローラーを作成してdevise
のコントローラーの動作を変更することです。 -
一部メソッドをオーバーライドするとは、
devise
が提供する既存のメソッド(例えば、ログイン処理など)をカスタマイズするために、同じ名前のメソッドを自分で定義し直すことです。 - オーバーライドとは、既存のクラスやモジュールの機能を上書きして、自分の目的に合わせてカスタマイズすることを指します。
つまり、devise
の内部実装に依存するため、カスタマイズが難しくなり、devise
のバージョンアップや他のライブラリとの互換性に問題が生じる可能性があります。
3. sorceryも1モデルでしか使えない?!
1モデルとは、sorcery
が基本的に1つのモデル(例えば、User
モデル)に対してのみ認証機能を提供することを意味します。つまり、sorcery
を使って複数のモデルに対して認証機能を設定するのが難しいという制約があります。例えば、User
とAdmin
のような複数のモデルに対して認証機能を設定したい場合、sorcery
では少し手間がかかります。
このような理由から、sorcery
はシンプルで使いやすいですが、複雑な認証要件には不向きかもしれません。
さいごに
deviseとsorceryどちらを利用するか非常に悩ましい。シンプルなミニアプリとかならsorceryでいいのかもしれません。他におすすめの認証機能等があれば教えていただきたいです。
自作という手もあるのか…。