Ruby on Rails チュートリアル やってみてる ~6章~

こんにちわ。寒いですね。何が立春だよ。まだ早いよ。

さて今回は6章。全体の半分くらいに来たかなという感じですね。
6章を終えるには3日かかりました。結構しんどかったっす。
でもほら、「3日で1章終わらせるべ」作戦が僕にはありますから。今回も作戦を実行したので気楽ではありました。

正直言って何のことやらさっぱりわかってない部分もかなりありました。そういうのをいちいち調べたり理解しようとしたら時間がかかって仕方ないので、読み流してとにかく実装していきました。

今回もタイポに苦しんだけど、前回も言ったようにどこがタイポってるかを探す時間がmottainaiので素直にコピペしちゃってください。でも一度はちゃんと写経してよね。

というわけで6章のまとめいってみよう。うまくまとめられるかな。

6章の概要

第6章 ユーザーのモデルを作成する

タイトルでもわかるように、この章ではユーザーのMVCでいうMの部分を作っていきました。
後々IDとパスワードでサインインできるように作り上げていくらしく、そのための認証システムを含めてそれぞれのユーザーが持つべき情報の基礎を作っていきます。
名前、メールアドレス、パスワード、そして自動で書き換えられていくユーザー登録日時と更新日時。
このシステムではメールアドレスをIDとするようです。

これらのユーザーが持つ情報に関してバリデーションを実装していきます。重複、空、メールアドレスの形式、パスワードの再入力と一致しているかという感じのものですね。メールアドレスのバリデーションでは正規表現がでてきました。

そのバリデーションに対するテストも同時に書いていきます。今回はテストめっちゃ書きましたよ。不正なものを入力したらエラーが返るというテストを書いてバリデーションがちゃんと効いているかをチェックしています。

Railsにはパスワードを実装する便利なアレが入っているので暗号化されセキュアなパスワード機能が簡単に作れました。
DBを乗っ取られて中身を見られても暗号化されているからパスワードはわからないのですな。

ざっくり書くとこんな感じの6章でしたが、メソッドとかオプションとかがめちゃくちゃたくさん出てくるし、書くコード量も多いので気長にやらないと辛いです。

ハマったところ

メソッドとかオプションとか多すぎ...

便利なメソッドやオプションが魅力であるRailsなのだと思いますが、めちゃくちゃ多くて頭がパンクしそうでした。
理解できないところもあるかもしれませんが、とにかくこの章の内容をひと通り実装することを優先してください。
そして終わったらもう一度目を通すと良いかもしれません。最初は何のことだかわからなかったことも実装が終わった頃には何となくわかるようになっていることがあるかもしれません。

 

演習

演習の1,2,3は書かれていることを書いていけば良いので問題ないと思います。何かエラーが出てしまったのならそれはたぶんタイポなのでコピペしてみましょう。

そして演習4,5は英語のドキュメントを読めとのことだったのでページまるごと日本語に翻訳するやつにぶっこんでみました。そしたら英語で読むより意味わかんないことになりました。さーっと目を通して終えました。正直何も頭に入っていません。

演習6に関しては正規表現のお勉強だったので飛ばしました。こつーん。

 

感想など

手を動かしている間は「こんなに意味わかってないのに大丈夫かよ。。。」と不安でしたが、実装が終わった頃にはどんなものを作ったかを理解できているとは思うのでおk。
ちゃんとテストはパスするし、DB Browser for SQLiteを見てもちゃんと登録されているもの。

なので、しんどくてもとりあえず最後まで実装してみてください。そして終わったらもう一度読み返してみましょう。ね。

という感じでした。

 

このシリーズ書き始めたら今まで1日100PV程度に落ち込んでいたこのブログも700PVくらいになりました。皆さんありがとうございます。
この反応の良さもモチベーションを保つ大きな要因になっていますので、皆さんも何かを学ぶのならブログを書いてみると良いと思います。

さて、次回第7章は「ユーザー登録」だそうです。
表側の画面から実際にユーザー登録を行う部分の実装ですかね。これは楽しみだ。

ではまた3、4日後くらいに。

Ruby on Rails チュートリアル やってみてるシリーズ:

はじめに

第1章 ゼロからデプロイまで

第2章デモアプリケーション

第3章ほぼ静的なページの作成

第4章 Rails風味のRuby

第5章レイアウトを作成する

第6章ユーザーのモデルを作成する

第7章ユーザー登録

第8章サインイン、サインアウト