Ruby on Rails チュートリアル やってみてる ~7章~
どうも。バレンタインはいかがお過ごしでしたでしょうか。僕は奥さんにチョコをもらいましたが全部食べられてしまいました。
さて、今回は7章です。6章でユーザーのモデルを作成したので、今回はそこにデータを突っ込んでいくためのユーザー登録機能やその情報を見る部分の実装ですね。
前回は目に見えないところの実装だったのでしんどくもあったんですが、今回は表側が主なスコープになっています。
この章は楽しかった。はい。そしてRails超便利。すげえ。
期間としては3日間くらいでした。いつも1日2~4時間くらい進めてますんでまあそのくらいです。
今回は最後の最後で超辛い事件が起きたのですがそれはまた後ほど・・・
では7章のまとめいってみよう!やってみよう!
7章の概要
6章ではユーザーの情報を保存するモデルを作ったので、ユーザーの情報を登録して表示する機能を作っていきます。
ブラウザにデバック情報を表示させる技もサラっと出てきます。
5章でレイアウトを作成した時にも出てきたRails特有の記法で共通部分は1つのファイルに書いて該当箇所に適応できたり、ユーザーの情報を引っ張って表示できるようにしていったりします。
テストを書きながらユーザーのプロフィール画面、ユーザー登録画面をグイグイ作っていきます。
ユーザー登録画面ではバリデーションに引っかかれば正しいエラーメッセージを表示させたりもします。登録完了時だけウェルカムメッセージを表示させるflash機能が出てきたり。とにかくRailsの機能でめっちゃ簡単に作れちゃう。
最後にSSLを導入して本番に反映させます。ユーザー情報を扱うならSSLがないとねってことかな。herokuのSSLを使うのでお金は掛かりません。
といったところが7章をサラッとまとめた感じでしょうか。しつこいけど本当に楽しかったです。
ハマったところ
has_secure_passwordがなんかしてやがる...
上からグアーっと実装していくと途中で本当ならエラーが出ないはずのところでエラーが出てしまう。こういうエラー。
ActiveRecord::UnknownAttributeError:
unknown attribute: password
原因が全然わかんないからgitで章の最初に戻して最初からやってみる。。。直近の状態に戻すコマンドはこれ。
git checkout .
でもまたエラーが起こるようになる。。。passwordが何なんだよ。。。
で、なんとなく6章の演習で追加した app/models/user.rb の以下の1行をコメントアウトしてみた。
# has_secure_password
そしたらなんかエラー出なくなった!知らんけど!まあいいや!
解決したかに見えたんだけど、またグイグイ進んでいくと同じエラーが出るようになった。。。
じゃあ今度はコメントアウト外してみよっかなと試したら無事エラーが出なくなった!
最初にこのエラーが出た時になぜエラーになってしまっていたのかが謎で仕方なかったんですが、とりあえず同じような状態に陥ってしまったらhas_secure_passwordをゴニョゴニョしてみてください。
gitをよくわかってなかった...
あーやっと終わったーと本番に反映している時に何かをやってしまった。何をやったかはわからない。とにかく嫌な予感がしたのでローカル環境のユーザー登録画面を見てみたら真っさら。何にもない・・・。
「でもまあgitで何とかなるんでしょう?」なんて余裕こいてググりながら適当にグチャグチャやっていたらもうワケがわからないことになって来てしまい。。そもそもgitってバージョンが管理できる何かなんでしょう?程度の認識しかなかった。。。
githubを直接見に行っても6日前のcommit(?)しかない。。。何これ。。。
というわけで、なんと、最後まで終わって本番反映すれば終わりというところですべて一からやり直しとなりました。さすがに全部コピペしましたがけどね。結構落ち込みました。
その後、ちゃんと最後までできたことを確認し、改めてgithubの項を読み返しました。
なるほど、たしかにpushなんて最近した記憶がなかったな。。。
皆さんはこまめにpushして僕みたいなことにならないようにしてくださいね。
演習
この章の演習はすべてコードが書いてあるのでタイポらなければすんなりいきます。ヒョイヒョイっと終わらせましょう。
感想など
というわけで、最後の最後でまさかのふりだしに戻るという悲しい事件が起きたわけですが、何とか7章を終えることができました。
gitまじ調べよ。調べよgit。
あと、かなり悩まされた has_secure_password なのですが、これ超すごいやつで、これを1行書くだけでパスワードとその再確認の内容が一致しているかという評価をしてくれる子なのです。
あとちょっと関係ないかもだけど、ディレクトリに新しいフォルダを作る時にFinderで「新しいフォルダを作成」とかやって作ってる人いたらアレなので、ターミナルでフォルダを作るコマンド書いときます。
mkdir ディレクトリ/フォルダ名
んで、ここにファイル作るならターミナルに
subl ディレクトリ/ファイル名
ってやればエディタでそのファイル名で開いてくれるので保存すればファイルが作られます。↑はsublime textの場合のコマンドなので違うエディタ使ってる人はそれぞれに対応したコメンド入れてください。
はい、とりあえず今回はこんな感じですかね。
次回の第8章は サインイン、サインアウト だそうです。
認証系は少し難しそうな気もしますが興味もかなりあるので楽しみだ。
では、また~。
Ruby on Rails チュートリアル やってみてるシリーズ:
赤い公園最高。
【2/17まで!!】google driveの容量が2GB増えるセキュリティ診断
Ruby on Rails チュートリアル やってみてる ~6章~
こんにちわ。寒いですね。何が立春だよ。まだ早いよ。
さて今回は6章。全体の半分くらいに来たかなという感じですね。
6章を終えるには3日かかりました。結構しんどかったっす。
でもほら、「3日で1章終わらせるべ」作戦が僕にはありますから。今回も作戦を実行したので気楽ではありました。
正直言って何のことやらさっぱりわかってない部分もかなりありました。そういうのをいちいち調べたり理解しようとしたら時間がかかって仕方ないので、読み流してとにかく実装していきました。
今回もタイポに苦しんだけど、前回も言ったようにどこがタイポってるかを探す時間がmottainaiので素直にコピペしちゃってください。でも一度はちゃんと写経してよね。
というわけで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 チュートリアル やってみてるシリーズ:
Ruby on Rails チュートリアル やってみてる ~5章~
はい、どうもこんにちわ。
どうですか?そうですか。
今回は5章になります。
今回の章、とても楽しかったです。
まずBootstrapに触るのが初めてだったので、その簡単さと美しさに感動してしまいました。学びには感動が伴うとモチベーションも上がって素敵です。見た目をいじくるのはやっぱ楽しい。
それと、4章が結構しんどかったなぁという印象を持っていたのですが、前回も書いた通り、「3日間掛けてこの章を終わらせよう」って感じで進めると気楽で良かったです。
結局は3日掛からず気付いたら2日目に終わっていました。あららら。
では、第5章のまとめいってみよう。
5章の概要
タイトルにもある通り、今あるしょぼいレイアウトをTwitter社が無償で提供しているBootstrapを使って豪華に改造していきます。
何気にIE対策のコードなんかも入ってたんだけど、こういうコメントの仕方でIE対策してるんだなぁと感動したりしました。
それぞれのページについて共通のグローバルメニューやロゴ、フッターを追加し、まだ中身は空っていうかURLは指定していないけどリンクを作ったり。このリンクってのが今回とても重要なところでした。
Bootstrapをインストールして初めて見た時の感動ったらなかった。しかもcssやらscssってのをいじってどんどん美しくなっていく。初めて触る人は感動間違いなし。
途中Asset Pipelineってやつが如何に素晴らしいものかっていうブロックがあるんだけど、結局意味わかんないから飛ばしちゃった。
チュートリアルが終わってからもまだ意味がわかんなかったらちゃんと調べてみる。
で、scssっていうやつでスタイルシートを美しく整形していったり、スタイルシートにも変数が使えちゃうんだよということなどを解説。最終的に読みやすくて重複のないスタイルシートのファイルが出来上がった。
見た目が仕上がったら次はさっき言ってたリンク。ルーティングがちゃんとされているかというテストをそれぞれのページに対して書く。/static_pages/homeを叩かなくてもhttp://localhost:3000/を叩けばhomeが表示されるようになります。
ルーティングが終わったらテストの見直しです。重複しているコードをまとめるようにリファクタリングしまくっていきます。どんどんまとまっていきます。面白いです。
最後にユーザー登録画面を作って、Sign up now! をクリックするとページが開かれるところまでテストも込みで作って終了。
この章が終わったら見た目がかっこ良くなってほぼすべてのページが作り終わり、ルーティングもほぼ完了しているという感じです。
ハマったところ
タイポったタイポった。。。
とにかくタイポってエラー続出。”path”が"pass"になっていることに気付くのに20分くらいかかった。
エラーを読んでもコードを読んでも何が悪いかわからない時は素直にコピペをしてみるといい。すると普通に通るから。気になる場合は元のコードをどっかに貼っておいてエラーが出なくなったコードと見比べればいいさ。あんまり気にし過ぎると疲れるし時間もったいないです。diffできるサイトがあるから貼っときますね。
Mergely - Diff online, merge documents
でもとりあえずはちゃんと写経するようにはしましょうね。
alignの読み方
cssで出てくる"align"の読み方が昔からわからなかったのでこの機会に調べた。
”アライン”だそうだ。”あーりん”かと思った。
演習
この章の演習は答えは書かれていなかったけど、最終的に全部テストが通るようになったから大丈夫なはず。
お手本みたいなコードが書かれてるからそれをそれぞれのテストに変えていくだけ。ここでもタイポしなければ普通に通るはず。
感想など
最初にも書いた通り、この章は楽しかった。初めて経験することばかりで「へぇ!すげえ!!」と感動しまくった。
あとこの章でもいろんなディレクトのいろんなファイルをメンテナンスしていったからだんだんアプリの構造が頭に入ってきた感じがする。全然まだまだだけど。ちょっとだけね。
あとRSpecのテストスイートってまさか、テストスイート = フォルダじゃないよねってbundle exec rspec spec/ を回してる時に少し心配した。まさかね。テストスイートが書かれたファイルとかあるよね。
いまいち何のことを言ってるのかわからない箇所はこの章にもずいぶんあった気がしますが、何とか前に進めてると思います。
次回の第6章は「ユーザーのモデルを作成する」だそうです。
MVCのMの部分ってとこかな?ユーザーのデータ構造的な話ですか?
それともユーザーのペルソナを考えてみようってことかな?ん?
というわけで今日はこの辺で。ではでは。
Ruby on Rails チュートリアル やってみてるシリーズ:
ChromeCast持ってる全員600円分のクーポンがもらえるぞ!
Googleが600円分のクーポンプレゼントやってる
なんかgoogleがバレンタインのキャンペーンとかで600円分のクーポンを全員にプレゼントしてるぞ!
日本ではできないとかどっかに書いてあったけど試しにiPhoneからcastのアプリ入れて試したら普通にもらえた!
以下からどうぞ!
ちなみにgoogle playで課金したことないから何に使っていいのかはまだわかってない。
映画でも見るかな。
Ruby on Rails チュートリアル やってみてる ~4章~
こんにちわっす。どうもです。
今回は4章になります。
集中力が続かず3日間かかりました。4-3の途中までを1日目、そこから4-5までを2日目にやりましたが、最後に演習があってダルくなり3日目になりました。
つまり気長にやれば3日間で余裕で終わります。
完全に理解できたかというとそんなわけは決してなく、未だによく意味がわかっていないことはありますが、これは数をこなせば身に付くんだろうなという前向きな思考で誤魔化しています。
とにかく最後までひと通りやってみて、まだわかってなかったらまた戻ってやってみようというスタンスで相変わらずやってます。
というわけで4章のまとめいってみよう。
4章の概要
まずはページのtitleについて 「全ページ共通のタイトル | 個別のページタイトル」 という風になっているよというのを説明され、それを実際に書いていくという感じ。テストも少しだけ書きます。
いろんなファイルを開いてコードを書くので、今どのファイルに対して定義していってるのかというのを頭に入れながらやっていくとWEBアプリの構造がわかるのかなと思った。まあそんなにファイルの数も多くないので「ここにこういうルールを書いていくんだなぁ」って感じで写経していけば良いと思います。
その後、コンソールを使ってRails(Rubyなのか?)の基礎的なアレを写経していく感じ。演算子とか配列とかそういうプログラムの入門で出てくるアレ。
つまり、いろんなファイルにコードを書いて定義していったものがRailsの基礎的なアレを学んでそこに何が書かれているのかを読めるようになりましょう的な章だったかな。
この章を終えたからと言ってRubyのことが理解できているなんて決して言えないっぽいのでちゃんとRubyやりたいなら別のとこでちゃんと勉強しなさいよってことらしいです。
だってさ。
ハマったところ
意味がわからない単語
エラーが出てどうにもならんという場所は特になかったんだけど、未だに意味がよくわからない単語がいくつもあった。
他の言語やってても普通に出てくる単語もあり、追々意味は理解しなきゃならないと思うのでここにその単語とその意味が書いてあるリンクを羅列する。
やっぱりリンク先を読んでもいまいち意味がわからない。
演習
演習の1,2,3はリスト4.10、4.11を見たり、この章を読み返したりすればわかるはず。ハッシュのネストの仕方とか全然覚えてなかったけど読み返せば普通にわかったのでご安心を。
演習の4については「ruby api hash merge」でググればすぐに公式ドキュメントが出てくるがドキュメントは英語だった。英検5級を保有するスーパー日本人である僕だが、なんとなく意味はわかったぞ。ほ、本当だ...。
是非ググるところから英語を読んでみるところまでご自分でやってみて欲しい。
演習5についてはサイトを開いてみると英語だったので、そっと閉じた。見てみない振り。というのは半分冗談で、Rubyは後で別に勉強しようと決めているのです。
もう半分の理由は英語だったからなんだけど。
感想など
この章も3章同様にボリューム的にしんどかったが、最初から3日掛けてやろうと決めていればそんなに辛くもないと思う。3日目に先延ばしにした演習もやってみれば20分やそこらで終えることができたので、これからやる人はまあそのくらいの感じでやってみてくださいね。
あとこの章で急に著者がチョケていた(「チョケる」は関西弁であり、僕は関東で育った人間だが、「チョケる」という表現がピッタリだ)。
自分で例に出した単語を「こんな単語を使うなんてクールだろ?」だの、急にバッドマンのセリフを持ってきたりだの何があったんだろうか。酒でも飲みながらこの章を書いていたんだろうか。嫌いじゃない。
4章を総合的に見ると、Railsを書くってこういう感じなのっていうのを薄っすら学んだ感じだ。ここからいろいろ入り混じったことを書いていくんだろうなという印象。
あと全然関係ないけど、前回の3章の記事が多数のはてブをいただき、また、初めてスマートニュースさんに載ったようだった。グノシーにも載ったみたい。
まあ多分スマートニュースもグノシーもはてブ数が多くついてる記事を載せてるんだろうけど。
それにしてもはてブっていうのは皆さんがクリッククリックしてくれないと集まらないものなのでとても嬉しかったです。ありがとうございます。
「こんな適当な僕でもRoRチュートリアルを最後までやろうと頑張ってるんだぞ」っていうところを今後も記事にしていければと思っています。
さて、次回第5章は「レイアウトを作成する」だそうです。
なんでしょうか。これはもしかしてレイアウトを作成するんでしょうか。まさかね。
1章ごとのボリュームも増えてきたので。今までに増して更にのんびり、そして無理矢理進めていこうと思っております。
ではでは。
Ruby on Rails チュートリアル やってみてるシリーズ:
Ruby on Rails チュートリアル やってみてる ~3章~
どうもです。今回で第3章。
前回2章を終わらせた際に「3章はマークアップ的なことかなぁ」って言ってたんですが、確かに見た目に関するところはあったんですが、主旨は全然違いました。
3章結構疲れました。
ですが、これからやる人はその長さから落胆しないでください。上級者向けの内容(やらなくていい箇所)やこのチュートリアルの推奨環境以外でやっている人向けのアドバイスも相当あったり、
あとはいろんなツールをインスコしたりな内容なので、グイグイ進めようと思えばいけます。
というわけで自分的まとめを始めます。
3章の概要
RSpecでテストを先に書いて実行して失敗させ、テストに書かれている内容をHTMLでtitleとbodyに少し書いてテストを通すというところまでをまずは行う。
その後、複数あるページで重複している部分があるのがよろしくないとし、効率の良いコードに「リファクタリング」していく。
最後にコードに変更があったら自動的にテストを行っていくツールを入れたり、テストの実行速度を上げるツールを入れたりとかした終わり。だったかな。
ハマったところ
- 3.2.1 テスト駆動開発
初めてテストを回す時にテストがコケたエラーじゃなくて、
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested
みたいなエラーが出た。
調べたら「spec_helper.rbのRSpec.configureの中にconfig.include Capybara::DSLを書くとうまく動きます。」だそうだ。なんで書かれてなかったんだろう。保存し忘れかな。
Capybara + Rspecでvisitがundefined methodと言われたときの対策 - Qiita
解決した。
- 3.2.1 テスト駆動開発
その後、解決と思いもう一度テストを叩いたら
初めてテストを回す時にテストがコケたエラーじゃなくて、
require': cannot load such file --
みたいなエラーが出てる。
調べると「Gemfileに'rspec-rails'は入っていますかね? 記述しただけでなく、bundle install と rspecの設定は完了してますか?」と言われてる人がいたので見てみたら僕も入ってなかった。 なんで入ってないんだろう。。。保存し忘r
Railsチュートリアルの第3章のRSpecの設定時にエラーが発生してしまう。(5667)|teratail
解決した。
- 3.3.3埋め込みRuby
別にハマってないんだけど、”yield”の読み方が気になった。今後yieldが出てきた時になんて呼べばいいんだ。まさかアルファベットで読むわけにはいかないだろう。
yield:なんと読む? - A Day In The Life
解決。
- 3.5 演習
Contactのページを追加するだけなんだけど何度もコケた。スペルのミスだったり、すべての必要なファイルにContactを追加できていなかったのが原因だった。
演習は解説や正解のコードも書かれてるから他のhomeやaboutを作った時と同じ要領で追加していけば問題なくできるので焦らない方がいい。
- 3.6.4Sublime Text上でテストする
あと、Ruby on Rails関係ないかもしれないけど、Sublime Textでテストを実行できるようにする設定をする時に
Library/Application\ Support/Sublime\ Text\ 2/Packages
にターミナルで行こうとしてもいけない。lsしてもApplication Supportの下にSublime textがいない。Finderではいるのに。
で、調べたらFinderで開いてるディレクトリをターミナルの新規ウインドウで開く方法があったのでやってみたらちゃんとターミナルで開いた。開くじゃないかよ!!
Mac Finderで開いているフォルダをターミナルで開く方法 | memobits
解決。
感想など
あんまり関係ないのかもしれないけど、SublimeTextでカレントディレクトリを開いた時にエディタの左側にディレクトリ構造が出てきてビックリした。普通なんだろうけどさ。今まで知らなかったから便利で驚いた。IDEっぽくなるんだね。
3章ではRSpecで初めてテストを書いてみたんだけど、まだ簡単な見た目だけのテストなので、画面遷移や要素の細かいテストの仕方が出てくるのが楽しみだなと思った。
少しテストを書き始めたくらいのところでタイムリミットというか疲れて一旦やめ、翌日残りを終わらせた。
最初に書いたようにグイグイ進められるとは思うけど、やはりボリュームは増えてきていると思う。
4章は「Rails風味のRuby」だそうだ。なんだそりゃ。「カレーライス風味のカレー」みたいな感じかな。
3章同様にボリュームが多いかもしれないけど、無理せず進めていこうと思う。モチベーションはまだ健在でござる。
ではでは。
Ruby on Rails チュートリアル やってみてるシリーズ: