Ruby on Railsチュートリアル第6版のまとめです。
第1章から第14章までコメント的に簡単にまとめてありますが、基本的にはリンク集としての記事のつもりです。
僕の学習の順番は、1周目はRailsチュートリアル第4版(Rails5.1)を使い、2周目で第6版を使うという感じになってます。これは1周目が終わったところで第6版のWebテキスト版がリリースされたからです。
ちなみに、2周目は解説動画を購入してやってます。オススメです。
Ruby on Railsチュートリアルとは
Ruby on Railsチュートリアルは、Ruby on Railsを使ったWebアプリケーションの作り方を学ぶためのチュートリアルです。著者はマイケル・ハートル(Michael Hartl)さんで、日本語版は安川要平さんが代表取締役を務めるYassLab(株)が運営してます。
Ruby on Railsチュートリアル第4版のWeb版は無料で公開されてますが、第6版は有料になってます。解説動画を購入するとWeb版も付いてくるので、学習効率を考えると解説動画の購入をオススメします。
開発にRuby on Railsを使ってない企業でも社員研修でRuby on Railsチュートリアルが使われることもあるようで、Webアプリケーションの基礎を学ぶためにも役立つものとなってるそうです。
個人的な感想ですが、難易度は比較的高めなので、プログラミング初心者がいきなりやるには難しすぎると思います。
Ruby on Railsチュートリアルでもオススメされているように、Progateの「Web開発パス(Ruby on Rails)」から始めることをオススメします。
Ruby on Railsチュートリアルは全部で14章あり、3つのアプリケーションを作ることになります。最初の2つはRuby on Railsの簡単な紹介という感じで、3つ目でTwitterライクなアプリケーションを作ります。
1周目ですべてを理解しようとするのは難しいと思うので、必要に応じて2周、3周と繰り返すことになると思います。僕は2周やりました。
Ruby on Railsチュートリアルの紹介はこのくらいにして、各章の簡単なまとめに入ろうと思います。詳細なまとめは章ごとに別の記事になってます。
Ruby on Railsチュートリアル第6版まとめ
Ruby on Railsチュートリアルの各章について、簡単にまとめようと思います。詳細なまとめは章ごとにリンクを貼ってあります。
第1章 ゼロからデプロイまで
Ruby on Railsチュートリアル第6版の第1章は、Ruby on Railsに触れてみること、バージョン管理を体験してみること、Web上に公開してみることが主な内容だと思います。
上でも書きましたが、Progateの「Web開発パス(Ruby on Rails)」をやってからRuby on Railsチュートリアルに入ることをオススメします。
第1章で作るアプリケーションは「アプリケーション」と呼んでいいのか疑問になるくらいのものです。おそらく期待してるものとは違うと思います。
でも、ここが基礎となって、先に進んでいきます。
開発環境の構築(Ruby on RailsチュートリアルではAWSのCloud9を推奨)、Gitによるバージョン管理、GitHubの利用、Herokuへのデプロイ、というRuby on Railsチュートリアルを通じて必要になる設定をすることになります。
GitHubとHerokuに関しては必須ではないのでスキップすることもできますが、Web系エンジニアになろうと思ってるなら必須だと思います。
ただ、1周目は学ぶことがたくさんあるので、2周目からGitHubとHerokuを導入するのもいいと思います。僕はそうしました。
第2章 Toyアプリケーション
第2章では2つ目のアプリケーションを作ります。scaffoldという強力なツールを使うため、あっという間にアプリケーションができていきます。
MVC(Model-View-Controller)というRuby on Railsを使う上では欠かせない概念についても学びます。最初はいまいち理解できないかもしれませんが、それぞれ役割が違って、それらが協調してアプリケーションが動いてます。
第3章以降はMVCを意識して学習を進めていくと、理解が早くなると思います。難しいと思ったら、解説動画を検討するのもいいかもしれませんね。
ここで出てくる「has_many」と「belongs_to」は重要なものなので、しっかりと理解して進みたいところです。この時点での説明を理解してると、第14章で再登場したときに理解しやすいと思います。
「has_many」と「belongs_to」については、第2章のまとめに書いてあります。
第3章 ほぼ静的なページ
第3章から3つ目のアプリケーションを作り始めます。このアプリケーションの開発が最終章の第14章まで続きます。
タイトルからわかるように、ほとんど動きのないページを作っていきます。
ここで初めて出てくる「テスト」はとても重要なものです。最初は必要性がよくわからないかもしれませんが、Ruby on Railsチュートリアルが終わる頃には頼もしい味方だと思えるようになります。
Ruby on Railsチュートリアルではあまり名前が出てこない気がしますが、DRY原則も重要な概念です。「Don’t Repeat Yourself」、つまり同じコードを書かずに、1つにまとめるという原則です。
第4章 Rails風味のRuby
Ruby on RailsはRubyがベースになってるため、第4章でRubyについて簡単に学びます。「Rails風味」となってる理由は解説動画を見るとよくわかりますが、純粋なRubyではないものも含まれてます。
Webアプリケーションを作りたいと思ってるところにRubyの基礎的な学習が入るので、ちょっと退屈な章かもしれません。でも、ここを理解してないとこの先でつまずきやすくなると思います。
Ruby on RailsチュートリアルをやっててRubyのことがわからなかったら、とりあえず第4章を確認するといいかもしれません。
第5章 レイアウトを作成する
第5章はCSSなどを使ってレイアウトを作成する章です。Bootstrapも導入します。
HTML、CSS、Sass、Bootstrapなどの知識があると理解しやすいと思います。
パーシャルを使ってHTMLを分離することをやりますが、これは最後まで使われ続けるので、しっかり理解しておきたいところです。呼び出しに使われるrenderメソッドも何度も出てきます。
アセットパイプラインはこの時点で完全に理解する必要はないかもしれませんが、なんとなくのイメージがつかめるといいかなと思います。
ここで名前付きルートが出てきますが、これを覚えるのがものすごく重要だと思います。詳細は第7章で出てくるので、そこからが勝負ですね。僕は現時点でも覚えられてませんが。
第6章 ユーザーのモデルを作成する
第6章ではUserモデルを作ります。データベースも扱うようになります。
Railsアプリケーションとデータベースを繋ぐのが「モデル」です。Userモデルは、ユーザーに関するデータベースとRailsを繋ぐために必要ということですね。
Ruby on Railsチュートリアルではユーザーの認証システムを主導で開発していきますが、実際はDeviseというgemが使われるそうです。
今やってることはRuby on Railsの勉強なので、認証システムがどのように機能してるかを理解するために、丁寧に進めてくといいと思います。
ユーザー登録時の検証だったり、セキュアなパスワードだったり、重要なものが出てきます。「どうせDevise使うんだから~」みたいな考えは捨てて、しっかりと理解した方がよさそうです。
第7章 ユーザー登録
第7章はRESTfulというのが強調される章です。でも、この時点でRESTfulを理解するのは難しいかもしれません。
2周目で丁寧に理解しながら進んだ結果、終わり頃にはRESTfulが何なのかということが何となくわかるようになりました。うまく説明はできませんが。
ここで出てくるdebuggerメソッドの使い方は解説動画を見るとわかりやすいと思います。僕は、1周目ではよくわからず1回も使わず、2周目では活用できました。
第7章のまとめにはform_withについてまとめてありますが、気になったところを調べながら進むと理解しやすくなります。完ぺきな理解は無理なので、うまくバランスを取りながらという感じですね。
ユーザー登録に関する脆弱性対策やエラーメッセージなども実装します。
さらに、HerokuへのデプロイではSSL、サーバー、データベースの設定も行います。「プロのデプロイ」という表現がなかなかいいですね。
第8章 基本的なログイン機構
第8章では、ユーザーがログインする仕組みを実装します。
Sessionsコントローラを作ることになりますが、それとは別にRuby on Railsに定義されてるsessionメソッドも出てきます。この辺は混乱の原因になりそうです。
Ruby on Railsには「ハッシュのようなメソッド」がいくつもあるようで、sessionメソッドもその1つです。
第9章は第8章で作った基本的なログイン機構を発展させます。ここの理解がいまいちだと、ただでさえ難しい第9章がさらに難易度を上げて立ちはだかることになります。
実験的なコードを書いてみたりしながら、じっくりと進めてくといいと思います。
第9章 発展的なログイン機構
第9章は本当に難しい章です。スキップすることも可能ということなので、どうしてもわからない場合はスキップしてもいいかもしれません。
記憶トークンと記憶ダイジェストという似た名前のものが出てくるのも難しさの原因になってる気がします。
仮想的な属性というのもなかなか厄介な存在です。attr_accessorを使うと作ることができますが、曖昧な理解で進むと途中から何が何だかわからなくなるかもしれません。
また、処理が入れ子構造になってるのも理解の邪魔をしてきます。「どこで何をやって」というのを追いきれなくなる感じです。第9章のまとめでは、処理の流れを書き出してありますが、本当にあってるか自信がありません。
どうしてもわからない場合はスキップするか、解説動画に頼るといいと思います。
第10章 ユーザーの更新・表示・削除
第10章では、ユーザー関係の機能を追加していきます。
編集フォームに関係するeditアクション、更新に関係するupdateアクションというところが少しわかりにくいかもしれません。editと言われると更新しそうですよね。でも、実際は更新フォームで、実際の更新はupdateアクションが担当します。
ユーザー情報を変更できるのはそのユーザーに限る必要があるため、ログインを要求したり、正しいユーザーか確認したりするようにします。
オプション引数とキーワード引数が出てきますが、これの違いがわからないままです。今のところどちらでも動くようなので、理解は後回しにしてあります。
あとはページネーションを追加したり、ユーザーを削除できるようにしたりします。ページネーションはwill_paginateというgemを使うことで簡単に実装できます。
Ruby on Railsチュートリアルのサンプルアプリケーションではユーザーの削除は管理ユーザーだけができるようになってます。こちらはdeleteアクションです。
第11章 アカウントの有効化
第11章では、メールを使ったアカウントの有効化を実装します。
開発環境ではメールのプレビューを使いますが、Herokuでは実際にメールを送信できるようにします。メールが届くのはなかなか感動的です。
ここでやってることは、第9章の発展的なログイン機構のメール版という感じです。第9章を理解できてれば、そこまで難しくないと思いますが、理解できてないと苦労するかもしれません。
指示されたリファクタリングの途中で、存在しないユーザーのプロフィールページ(users/1000 とか)にアクセスするとエラーになることを発見して、勝手に修正したりしました。
そのなかでunlessについて調べたりして、理解が深まりました。unlessと「||」(or)の組み合わせは苦情が出やすいみたいですね。確かにわかりにくくて、できれば使わない方がいいなと思います。詳しくはまとめに書いてあります。
本番環境(Heroku)でのメール送信はSendGridアドオンを使いますが、凍結されるという問題がそこそこ起こってるようです。僕も遭遇して、なんとか解決しました。
実際は別の問題もあって、うまく動かなかったんですけどね。それについてもまとめてあります。
第12章 パスワードの再設定
第11章に続いて、第12章でもメールを使った実装です。第12章ではパスワードの再設定を実装します。
やってることは第9章、第11章と似てます。
ここでもunlessが出てきて、「&&」で3つの条件が書かれてます。その条件文の理解も苦労しました。
Herokuにデプロイして動作確認したら、またSendGrid凍結問題に遭遇しました。第11章と同じように直しましたが、これを最後にメール送信を触ってないので、もしかしたらまた凍結されてるかもしれません。
第13章 ユーザーのマイクロポスト
第13章でマイクロポスト(Twitterでいうところのツイートのようなもの)を実装します。アプリケーションっぽくなります。
ユーザーとマイクロポストの関連付けが重要なところですが、ここで「has_many」と「belongs_to」が再登場します。
パーシャルを使って、マイクロポストの一覧を表示するという繰り返し処理を簡単に記述する方法が出てきます。どういう条件で何がどう処理されてくのかがわからなかったので、いろいろ検証しました。検証結果はまとめに書いてあります。
form_with内に出てくる「f.object」は便利なものですが、その挙動の理解に苦労しました。これもまとめてあります。
画像も投稿できるようにしますが、本番環境の設定が大変でした。AWSのS3を使いますが、悲しいミスをしてデバッグにものすごく時間がかかりました。
マイクロポストの投稿がバリデーションに引っかかった後にリロードするとエラーになる問題を発見しましたが、他でも同じエラーが出ることがわかり、第14章が終わってから修正することにしました。
第14章 ユーザーをフォローする
第14章がRuby on Railsチュートリアルで一番難しい章だと思います。1周目は何をやってるかほとんどわからないままでした。
フォローを実装するためにデータモデルを作るわけですが、そのモデルを理解してることが前提で進んでいきます。理解しないまま先に進むと苦労します。
理解できたとしても大変です。has_manyとbelongs_toが本来の姿を現しますが、それは「メソッドを生成するメソッド」という姿です。
さらに、has_many throughもなかなか難しく、だんだんわけがわからなくなっていきます。自分なりの理解を図にしてありますが、正確さは不明です。
ここまでを乗り切ることができれば、第14章はOKな感じだと思います。Ajaxも出てきますが、jQueryやJavaScriptの勉強をしたくなります。
僕はそこまで興味を持ちませんでしたが、SQL文の最適化を面白いと思う人もいると思います。Ruby on Railsの周辺技術(?)に関心が向くような作りになってるということかもしれませんね。
第14章は解説動画があるとかなり理解度が上がります。どうしても理解できない場合は、購入を検討するといいと思います。
最後に
Ruby on Railsチュートリアル第6版の簡単なまとめは以上になります。各章の詳細なまとめはリンクしてあるので、興味があったら見て頂ければと思います。
Ruby on Railsチュートリアルはこれで終わりですが、さらに機能を追加する形で学習を進めることもできます。ポートフォリオ作りに移ってもいいでしょうし、「プログラミングは合わない」とやめてしまってもいいと思います。
僕はまだ先に進みたいと思ってます。まずは第13章で気づいたリロード問題の修正をやり、1つ以上の機能追加をやろうと考えてます。
オリジナルで作ろうと思ってるアプリケーションもあるので、Ruby on Railsチュートリアルで作ったアプリケーションの機能追加に時間をかけすぎないようにするつもりです。
Ruby on Railsチュートリアル第6版のまとめは基本的に自分用に作りましたが、少しでも役に立てたら嬉しいです。