genonymous

GenestreamのTechブログ

Rails 4 + Devise 3でエラーが出続ける5つぐらいの理由

こんにちは。ジェネストリームの太田です。

そういえば最近、Railsでサービスが開発されるケースが増えてますよね。スタートアップ界隈だけかと思ったら、業務系も最近はRailsでシステムを開発するケースも多いとか。

かくいう当社も、トレンディにRailsを使ってサービスを開発しており、実際に私もRailsまみれになって日々コードを書いているわけなんですが、最近認証周りでドハマりしたのでそこらへんの話でもしようと思います。 主役はそう、第四世代の認証うんちゃらライブラリとか言われているDeviseさんです。

前説

RailsWEBサービスを開発している当社は、当然ながらRailsでプログラムを書いたことのあるエンジニアがいます。

しかし、もともとはPHPとか、Android開発メインでRailsガッチリやってました!的なエンジニアはおらず、そのため「あんたバカァ?deviseなんて朝飯前なのよ!わかったさっさと書きなさいよ!」といったかんじで、僕がシンジくんならアスカ的になじってくれるような人はいないわけであります。

第3使徒が襲来した時に使徒と戦ったことのあるエヴァがいなかったように、deviseが必要になったときにdeviseと戦ったRailsエンジニアがいないので、「逃げちゃダメだ、逃げちゃダメだ…」と思って、deviseに人柱になって立ち向かうしかないのであります。

いやー、そしたら突然、エヴァから寅さんですよ。

「人柱はつらいよ」

まさに「orz」状態なわけです。消しても消しても消えないエラーラッシュ。たたみかけて襲ってくるエラーラッシュ。パズドラのゴッドラッシュ、ヘララッシュ、デビルラッシュを凌ぐぐらいのラッシュ具合で完全「OMG!!!!!」って叫びたくなってくるのであります。使徒で言うと新劇場版で言う第5使徒と第13使徒が一緒に襲来してくる感じ。

しかし、まことしやかにささやかれる「Railsの認証と言えばDeviseっしょ!」っていう都市伝説。「ほんとに??それ、ほんとに??」女子高生が憧れのイケメン先輩席の後ろからパソコンの操作方法を教えてもらうときと同じぐらいの感覚で、この次の展開はなんなんだろう、光が見えてくるのではないだろうかと期待してしまうわけであります。

でやりましたよ、ええ。そしたらね、

(つд⊂)ゴシゴシ

(つд⊂)ゴシゴシ

( ゚д゚)ポカーン

ってなりました。

「え?ちょ、え?さflkjsdf;:ぁdlkがds;lkg超絶×3簡単じゃんかよおおおおおおぉぉぉぉぉぉ!」

ええ、やっぱりDeviseさんは便利でしたよ。「Railsの認証といえばDevise」という都市伝説は都市伝説ではなかったということです。 ただね、そこに至るまで

NA・GA・SU・GI・RU

ってことで前置きがめっちゃ長くなりましたが、その旅路で出くわしたksエラーどもとかその対処法とか、エラーは出てないけどやらなくていいこととかを紹介したいと思います。

前提

太田スペック

  • Rails超絶勉強中
  • railstutorial.jpやった
  • ドットインストール「Ruby入門」「Rails4入門」「bootstrap入門」やった
  • swiftでスクレイパーアプリ作った

やろうとしていること

状態

gem 'devise'
gem 'omniauth'
gem 'omniauth-google-oauth2'
gem 'omniauth-facebook'
$ rails g devise:install
$ rails g devise user

とりあえずgoogle認証はできている感じ。これから手入力を実装したい。

エラーとか不要なこととか

model、DB周り

remember_tokenがいらない

えっとですね、「rails初学者」という言い訳を盾のように使うと、認証の仕組みなんてrailstutorialで書いたやつをそのままコピペすりゃいいじゃん!」とか思うわけなんです。ただdeviseを入れるとそんなものは不要です。

password_digestがいらない

railstutorial.jpを勉強した人にはお馴染みのpassword_digest。しかしdeviseがその代わりとなる「encrypt_password」を作ってくれるのでこれもいりません。

controller周り

users_controllerの中のnew、createメソッドがいらない

これは衝撃的でした。「ふぁ!?」と思いましたが全部deviseパイセンがやってくれるようです。ありがたや。

sessions_helperがいらない

セッション管理もdeviseパイセンがやってくれます。

view周り

ユーザー登録、ログイン、ログアウトの画面がいらない

下記をターミナルで実行すれば勝手に上記のviewを作ってくれます。便利!

rails g devise:views

f:id:genestream:20141028100506p:plain

その他viewから推測されるいらないやつ(未検証)

  • ユーザー編集画面がいらない?(写真を見る限りいらなそうですよね…)
  • パスワード変更画面がいらない?(同上)

まとめ

  • deviseパイセン、最初は苦戦してましたが使ってみるとめちゃくそ便利ですね!「これからrails使うぞ!」って方がいれば是非参考にして頂ければと思います。