SorceryとDeviseで広がるプログラミングの"ワクワク"

## はじめに
RUNTEQ Advent Calendar 2024で16日目を担当する"フネ"と申します。
現在はプログラミングスクールRUNTEQにて今年の6月に入学して本格的に学習をスタートし、現在7ヶ月目に突入しております。
今年のテーマは『プログラミングでの"ワクワク"❤️‍🔥』です。
プログラミングを学ぶ中で、ユーザー認証機能を実装する瞬間は「本当にサービスを作っている！」と感じられるワクワクする瞬間ではないでしょうか？  
そんな認証機能を実現するRailsの2大Gem、**Sorcery**と**Devise**。それぞれの特性を活かすことで、開発の楽しさをさらに広げることができます。
##  認証Gemがもたらす"ワクワク"
認証Gemを使うと、「ログイン」「パスワードリセット」「アカウント管理」などの機能が簡単に実装できます。  
ゼロから全てを書かなくていい、だけど自由にカスタマイズもできる――そんなGemたちがプログラミングの敷居を下げつつ、クリエイティブなワクワク感を与えてくれます。

しかし、ここでふと疑問が。「**SorceryとDevise、どちらを使うべき？**」

## SorceryとDevise、それぞれの"ワクワク"
### **Sorcery：自由自在にカスタマイズの楽しさを味わう**

**ワクワクポイント①：シンプルな作り**
Sorceryは必要最低限の機能のみを提供している為、シンプルかつ軽量でパフォーマンスが軽く、カスタマイズしやすいという特性があります。

**ワクワクポイント②：自由度の高さ**
  Sorceryでは、認証フローやセッション管理を自分でコントロールできます。
  具体的には、『モデルの設定』『マイグレーション』『コントローラーの設定』『ビューの作成』『ルーティングの設定』『コンフィグの設定』etc...
  「ログイン後の挙動をこう変えたい」など、細部までこだわれる点が魅力です。
  
**ワクワクポイント③：モジュールベース**
Sorceryでは、認証機能が複数のモジュール（部品）に分かれており、それぞれ独立した機能を提供しています。
この仕組みによって以下のような利点があります。
- 必要な機能だけを選んで使える: 余計な機能を含めないため、アプリが軽量でパフォーマンスも良い。
- カスタマイズがしやすい: 追加するモジュールの内容を自分で制御できる。

### Sorceryで提供されるモジュール
| モジュール名               | 機能概要                                                         |
|---------------------------|----------------------------------------------------------------|
| ` Activation`            | ログイン状態を記憶する（いわゆる「ログイン保持」機能）。             |
| `Reset Password`         | パスワードリセット機能を提供。                                     |
| `Core`        | 基本的な認証機能の提供。パスワードのハッシュ化やセッション管理も含む。                                    |
| `Remember Me` | フォームでチェックボックスをクリックすると永続ログインを有効にする。              |
| `Active Logging`       | 最終ログイン日時などのログ記録。                                     |
| `External`               | OAuthを使った外部認証（Google、GitHubなど）。      |


### Devise：充実した機能でスムーズな体験を提供
一方、Deviseは「とにかくすぐ使える」豊富な機能を持つGemです。

**ワクワクポイント①：簡単に動く！**
コマンド一発でほぼ全ての設定が完了するため、「動くものが見える」体験がすぐに得られます。これによって、プロジェクトの進行がスピーディーに。

**ワクワクポイント②：高度な機能を楽しめる**
確認メール、パスワードリセット、アカウントロックなど、デフォルトで多くのモジュールが使えます。大規模なアプリケーションでも強力なサポートが得られます。

**ワクワクポイント③：カスタマイズ性の高さ**
Deviseは、コントローラー、ビュー、モデル、ルーティング、設定、OAuth認証、I18n対応といった多くの側面でカスタマイズが可能です。

### Deviseのカスタマイズ性一覧

| 項目                         | 説明                                                                                              |
|------------------------------|--------------------------------------------------------------------------------------------------|
| **コントローラー**           | Deviseのデフォルトコントローラーをオーバーライドしてカスタマイズ可能。                                   |
| **ビュー**                   | デフォルトのビューを生成して、デザインや機能を自由に変更可能。                                          |
| **モデル**                   | Deviseモジュールを選択して、必要な機能のみを追加可能。                                                 |
| **ルーティング**              | デフォルトのルーティングをカスタマイズ可能。                                                         |
| **コンフィグ**                | `config/initializers/devise.rb`でDevise全体の設定を変更可能。                                         |
| **Omniauth（OAuth認証）**     | Omniauthを利用してGoogleやFacebookなどの外部サービス認証を簡単に統合可能。                               |
| **I18nとの統合**             | RailsのI18n機能を利用して、多言語対応のメッセージやラベルを設定可能。                                      |

**ワクワクポイント④：多言語対応の強み**
DeviseはRailsの国際化（I18n）フレームワークを活用しており、認証関連のメッセージやラベルを簡単に多言語対応できます。
 Deviseは主要な言語（英語、日本語、スペイン語など）のロケールファイルを公式で提供しています。そのため、初期設定だけで多言語対応が可能です。

**ワクワクポイント⑤：豊富なドキュメント**
DeviseはRailsの認証機能を提供するGemの中でも特に人気が高く、長年にわたり多くのプロジェクトで使用されてきました。そのため、公式ドキュメントやコミュニティによるサポート情報が非常に充実しています。

公式ドキュメント Deviseの公式GitHubリポジトリには、インストール手順から詳細なカスタマイズ方法まで網羅的なドキュメントが揃っています。公式ページを見れば、ほとんどの疑問が解決できるでしょう。

豊富なブログや記事 多くのエンジニアがDeviseの使い方やトラブルシューティングについてブログや技術記事を投稿しています。そのため、Google検索で解決策が見つかる可能性が高いです。

## どっちを使っても広がる世界

Sorceryで細部まで自分で作る楽しさを味わうか、Deviseで豊富な機能を活用して完成形を磨き上げるか。  
どちらを選んでもプログラミングの**"ワクワク"**は尽きません。

たとえば：

- **小さなアプリ**: Sorceryでカスタマイズを楽しむ。  
- **大規模アプリ**: Deviseで複雑な機能を手軽に実装。

## 自分だけの認証機能を作ろう！

プログラミングで大切なのは、自分のやりたいことに合わせて選ぶことです。  
SorceryとDeviseはどちらも認証という機能を通じて、あなたの開発するアプリに命を吹き込みます。

次は、ぜひ自分のアプリケーションでどちらかを試してみてください！  
「これ、僕が作ったんだ！」という感動があなたを待っています。  
プログラミングの楽しさを、存分に味わってくださいね！

それでは来年もよいお年を！！最後まで読んでいただきありがとうございました。