SorceryとDeviseの違いについて

# はじめに
皆さん、初めましてマッチョ💪
現在、プログラミングスクールにて学習をしている “のぞみ” と言います。
私は現在、未経験からのエンジニア転職に向けて今年の4月から本格的に学習をスタートし、現在6ヶ月目に突入しております。
今回、学習中に気になった点があり深掘りする機会がありましたので、初めて技術記事を書かせていただきました。
# 概要
現在、《Ruby on Rails》を用いたポートフォリオについてアイデアを考えている段階なのですが、
その際 ”認証機能” の実装について調べている時に、ふとこう思いました。

**「認証機能実装のGemって、”Sorcery” と “Devise” の2種類あるけど、どう違うの？？」**

今回はそんなふと感じた疑問点について、初学者なりに纏めた内容となっております。
ですので、内容に誤り等がある場合がございますのでご了承下さい。
もし誤りに気づかれた際は、コメント等でご教授いただけると助かります🙇‍♂️
# Sorcery・Deviseについて
まず、"Sorcery"と"Devise"について軽く説明をしたいと思います。

"Sorcery"および"Devise"は、《Ruby on Rails》のアプリケーションに**認証機能を追加するためのGem**です。
これらのGemを利用することで、ウェブサイトで一般的に見られる『ログイン』『アカウント作成』『パスワードのリセット』などの認証機能を手軽に実装する事が出来ます。
例えばですが、SNSやショッピングサイトのような、ユーザーがアカウントを持ちログインする必要があるアプリケーションを開発する際にこれらのGemを活用することで、0から機能開発をせずとも基本的なログイン関連の機能を、簡単に導入することが出来ます。

💡Gemの導入方法についてはこちらから⇩

https://github.com/Sorcery/sorcery

https://github.com/heartcombo/devise
# Sorcery・Deviseの違い
ここまで読んでくださった方の中には、こう思った方もいらっしゃるかと思います。

**「どっちも認証機能を導入するGemなら、いったい何が違うの？」**

そこでここからは、"Sorcery"と"Devise"についてそれぞれの特徴と違いを説明していきたいと思います。
## Sorceryの特徴
### １. シンプル
Sorceryは必要最低限の機能のみを提供している為、**シンプルかつ軽量**となっている。
そのため、カスタマイズを容易に行うことが可能で、必要な機能のみを追加することが出来る。

### 2. 手動での設定
Sorceryを使用して認証機能を実装する際には、多くの設定やステップを開発者が手動で行う必要がある。
具体的には、『モデルの設定』『マイグレーション』『コントローラーの設定』『ビューの作成』『ルーティングの設定』『コンフィグの設定』これらの設定を手動で行う必要がある。

### 3. モジュールベース
Sorceryは、提供する認証関連の機能がいくつかの独立したモジュールに分割されているが、この事を「モジュールベース」と呼ぶ。
このモジュールベースにより、開発者は必要な機能だけを選択して組み込むことが出来、不要な機能を省略することが出来る。

💡Sorceryが提供するモジュールの例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3473076/3ee95c46-20fb-9145-ee96-63d30256549f.png)

### 4. ドキュメントが少ない
SorceryはDeviseと比べると、ドキュメントやチュートリアルが少ないため、エラーや不具合が発生した際に原因解明のための、記事や情報を探すのが難しい可能性がある。

## Deviseの特徴

### 1. 機能の豊富さ
Deviseは、デフォルトで多くのモジュールを提供している。
そのため、『確認メール』『パスワードリセット』『ロックアウト』『トラック可能』『タイムアウト可能』等多くの機能をデフォルトで使用する事が出来る。

### 2. カスタマイズ性が高い
Deviseは非常に柔軟で、多くの部分がカスタマイズ可能である。
しかし、その柔軟性のために設定やカスタマイズが複雑になる可能性が高い。

💡カスタマイズ可能な内容例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3473076/93879587-90d0-de7f-2d8b-0cf47b8f71e8.png)

### 3. 多言語対応の設定が簡単
Devise は、Railsの国際化フレームワークである **i18n** に対応している。これにより、様々な言語のロケールファイルを使用して、メッセージやラベルを翻訳することが出来る。
また、Devise は多くの言語のデフォルトのロケールファイルを提供している。その為、多くの言語に対応するアプリケーションを開発する際の手間が大幅に削減されます。

### 4. ドキュメントが充実
Sorcery に比べ、Devise の方が多くのユーザーに使用されている為、公式ドキュメントだけでなく多くのチュートリアルや質問・記事等がWeb上に存在している。
その為、エラーや不具合が発生した際に必要な情報を探しやすい。

# 新たな疑問
ここまでで、ある程度 Sorcery と Devise の違いについて理解出来たかと思います。
では、違いが分かったところでこう思った方もいるのではないのでしょうか？

**「結局のところ、Sorcery と Devise のどっちを用いて認証機能を実装するべきなんだ？」**

はい、ごもっともです。
私もその悩みにぶち当たりました、と言うよりその悩みがあったから Sorcery と Devise について深掘りしたと言っても過言ではありません。
さて、ここまで深掘りした上での私の考えとしては、、

**『開発するアプリケーションの内容によって、使用するGemを決めよう！』**

と言う結論に至りました。
「普通に当たり前な事じゃない？」と思われた方もいらっしゃると思いますが、重要な事なので是非最後まで読んで下さい。笑

# まとめ
先ほどの Sorcery・Devise の特徴で説明したように、それぞれシンプルで軽量であったり、豊富な機能をデフォルトで提供していたりと、それぞれの Gem にメリット・デメリットがあります。
その為、自分がこれから開発しようと考えているアプリケーションの内容に適した Gem を使用するのが一番だと思います。

例えば、、
**Devise：『豊富な機能を活かして、複雑な認証要件を簡単に満たすことが出来るので、大規模なアプリケーション、特にユーザー管理に関する多くの機能が必要な場合に用いる』**
**Sorcery：『機能性がシンプルなため、自分が開発するアプリケーションに必要とするのが基本的な認証機能だけであり、それ以上の機能は不要である場合やアプリケーションのパフォーマンスを最優先したい場合、または自分で認証機能を細かく制御したい場合に用いる』**
 
このように、自分が開発したいアプリケーションを一度見直してみて、そこで認証機能を追加するのにどちらのGemが適しているか判断するようにしましょう！