質問: いつもお世話になっております。 開発初心者です。。。 とあるシステムを作っていて、helperの使い方に悩んています。 [開発中のシステム] - API - [認証システム] 現在、開発中のシステムではユーザ認証を別システムに頼っています。 ID・パスワードなどの認証情報をAPI経由で送って、レスポンスとして権限情報を取得しています。 取得した権限情報はsessionに格納しています。 開発中のシステムの認証周りを先輩が実装したのですが、すべてhelperに記述してありました。 (この先輩は退社してしまっていて、どうしてこの実装になっているか聞けません。) 認証周りの処理とはログイン中のユーザIDを取得したり、権限情報を取得したりする処理です。 質問1 helperの使い方的に問題ないでしょうか? (自分の認識ではheplerはview周りのロジックを記述するところだと思っています。helperに書いてあるとmodelやcontrollerから使いにくいなぁーって思っています。) 質問2 認証周りの処理をmodelに書き直そうと思っているのですが、modelであっていますか? ご教授のほど、よろしくお願いいたします。
回答: 1について 普通ヘルパーはviewに渡されたデータにロジックが必要だったり,使い回せるdomを書くところです。なのでk.hagiwaraさんの考え方が正しく、先輩は使い方を根本的に間違えています。ロジックの共有やファイルの肥大化を防ぐためのコードはコントローラやモデルフォルダの中にconcernというフォルダを切ってそこにモジュールを定義します。また,データベースのロジックや外部入出力はモデルともコントローラとも関連が薄いのでserviceというフォルダをapp配下に切ってことが多いです。 2 認証はApplicationControllerかそれに付随するモジュールに書くのが普通です。 ただし,データベースへの認証情報登録時の暗号化などはモデルもしくは一般化してserviceなどに任せます。認証したかどうかを確認するだけならApplicationControllerかserviceに切り出します。 ちなみにform,service,validator,concernはrailsの有名なコミッターが採用している設計パターンで特にrailsの規約であるわけではないので(実態も単なるモジュールやミックスインやクラスの分割ファイル)自由にやっても構わないのですが,railsの綺麗な設計について勉強したければtrailblazer周りを調べて見ることをお勧めします。