Rails8でのDevise導入時にハマった点と解消方法

## はじめに
Rails8でDeviseを導入したところ、少しハマったので、解消方法を残します。
補足に記載しましたが、もしかしたら下記を全て対応しなくてもサーバーを再起動するだけで直ったのかもしれません…

## やりたいこと

- Rails8でDeviseを使いたい

### やったこと

- 公式ドキュメントとインストール後のメッセージに沿って対応
    
    ```bash
    bin/rails generate devise:install
    
    # ルートページの設定と動作確認
    
    # flashメッセージ表示の設定
    
    bin/rails g devise:views
    
    bin/rails g devise User
    
    bin/rails db:migrate
    ```
    
    - ドキュメントなど
        - [公式ドキュメント](https://github.com/heartcombo/devise)
        - メッセージ
            
            ```bash
            
            Depending on your application's configuration some manual setup may be required:
            
              1. Ensure you have defined default url options in your environments files. Here
                 is an example of default_url_options appropriate for a development environment
                 in config/environments/development.rb:
            
                   config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
            
                 In production, :host should be set to the actual host of your application.
            
                 * Required for all applications. *
            
              2. Ensure you have defined root_url to *something* in your config/routes.rb.
                 For example:
            
                   root to: "home#index"
            
                 * Not required for API-only Applications *
            
              3. Ensure you have flash messages in app/views/layouts/application.html.erb.
                 For example:
            
                   <p class="notice"><%= notice %></p>
                   <p class="alert"><%= alert %></p>
            
                 * Not required for API-only Applications *
            
              4. You can copy Devise views (for customization) to your app by running:
            
                   rails g devise:views
            
                 * Not required *
            
            ```
            

## エラー内容

- 上記のやったこと対応後にサインインページにアクセス

  ```bash
  ActionView::Template::Error (undefined method 'session_path' for an instance of #    <Class:0x00007fd4d318e890>)
  Caused by: NoMethodError (undefined method 'session_path' for an instance of #<Class:0x00007fd4d318e890>)

  ```

- routes.rbを以下のように修正した後にサインインページにアクセス
    
    ```ruby
    # routes.rb
    
      devise_for :users, controllers: {
        sessions: "users/sessions"
      }
    ```
    
    ```bash
    Routing Error
    uninitialized constant Users
    ```
    

## 解決策

### users_controllersの作成

- `app/controllers`にusers_controllersがあるかを確認
    - 作られていない…！
    - 作成時のログ、確かに作られていない
        
        ```ruby
              invoke  active_record
              create    db/migrate/20250217023827_devise_create_users.rb
              create    app/models/user.rb
              invoke    test_unit
              create      test/models/user_test.rb
              create      test/fixtures/users.yml
              insert    app/models/user.rb
               route  devise_for :users
        ```
        
- controllerを作成する
    
    ```ruby
    rails generate devise:controllers users
    ```
    

### ビューの再作成

- 再度サインインページにアクセスするとエラー
    
    ```ruby
    NoMethodError in Users::Sessions#new
    ```
    
    - session_path　が認識されていない
- 原因
    - `bin/rails g devise:views`で作成したビューだと上手く読み込まれない
- 解決策
    - ビューを削除
    
    ```ruby
    bin/rails d devise:views
    ```
    
    - カスタムビューとして再作成
    
    ```ruby
    bin/rails g devise:views users
    ```
    
    - `config/initializers/devise.rb`を修正
    
    ```ruby
    config.scoped_views = true # デフォルトはfalse
    ```
    
    - サーバーを再起動

### 補足

- 上記の手順を行った後に、上手く解消せず、サーバーを再起動したら機能したので、もしかしたら上記のようなことをやらずともサーバーを再起動したらエラーが出なくなったのかも…というきもします。

## 参考

- [公式ドキュメント](https://github.com/heartcombo/devise)
- [【Rails】Deviseをカスタマイズして使いたい！！(ルーティング編)](https://qiita.com/ysk91_engineer/items/35d71e25261286a52b7b)
- [【Rails】deviseのviewやcontrollerの編集とカスタマイズ方法](https://qiita.com/AKI3/items/bf0d5b57029abfc8154c)