2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsチュートリアル(第4版) まとめ

Last updated at Posted at 2020-12-13

はじめに

プログラミング歴11ヶ月の私が、Railsチュートリアル(第4版)を6日間で完走した感想です。
1周では理解できない部分が多々あったので(特に9章以降)、2周目をやる前にまとめようと思い、備忘録を書きます。

ちなみに、Railsチュートリアルをやる前の私の状態は、下記の通りとなっています。

  • Progateで、Command Line / Git / HTML / CSS / Sass / JS / JS(ES5) / jQuery / Node.js / SQL / Ruby / Ruby on Rails5 を1周〜2周。
    (総演習クリア数992 / 修了レッスン数53 / Lv.296)
  • プログラミングスクールで、HTML / CSS / Ruby / Railsを使ってチーム開発でECサイト、ポートフォリオで投稿型Webアプリを作成。
  • PaizaでD・Cランクの問題をRubyで約100問解答。
  • Railsなどで作成したアプリケーション、ホームページ:3つ。
    (実装機能:投稿・いいね・コメント・フォロー等)

所感

1〜8章までは、全体的に理解しながら進むことができましたが、9章から難しくなり一度読むだけでは理解できないことが増えました。
それでも、やり切ることが大切かと思ったので、わからない部分はメモをして、グイグイ進めました。
勢いとやる気と体力が必要な教材でしたが、細かいところまで丁寧に書かれていて、非常にわかりやすかったです。

(例えば、コマンドで下記のように実行するよう書かれていた場合、「> はターミナル上自動で出力されるので、書かなくていいです。」と毎度丁寧に教えてくれる。)

ターミナル
% XXXXXXXX /
> XXXXXX

進め方

手を動かしながらやらないと頭に入らないので、開発環境・本番環境で動かしながら進めました。
また、演習も全て解きながら進めました。

各章まとめ

各章 タイトル かかった時間
1章  ゼロからデプロイまで 4h30m
2章 Toyアプリケーション 2h30m
3章 ほぼ静的なページの作成 2h
4章 Rails風味のRuby 11h
5章 レイアウトを作成する 3h
6章 ユーザーのモデルを作成する 5h
7章  ユーザー登録 4h
8章 基本的なログイン機構 3h30m
9章 発展的なログイン機構 3h30m
10章 ユーザーの更新・表示・削除 3h30m
11章 アカウントの有効化 3h
12章 パスワードの再設定 3h30m
13章 ユーザーのマイクロポスト 3h30m
14章 ユーザーをフォローする 3h

合計時間:55h30m (約9h/日)

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

最初のインストールで詰まってしまった。

  • 演習問題数:4題

【発生したエラー】
1.2.2 Railsをインストールするにて、Railsをインストールできなかった。
原因:下記のエラーから、rbenvのRubyではなく、システムのRubyのgemコマンドを実行している。

ターミナル
% gem install rails -v 6.0.3  
ERROR: While executing gem ... (Gem::FilePermissionError)
  You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

下記のコマンドを実行。

ターミナル
% rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:
eval "$(rbenv init -)"

~/.zshrcにeval "$(rbenv init -)"を追記するために、ターミナルで下記のコマンドを実行。
無事、インストール成功。

ターミナル
% echo 'eval "$(rbenv init -)"' >> ~/.zshrc

②gemのインストールができなかった
エラー文に書いてあるように、% bundle updateで解決。

ターミナル
Bundler could not find compatible versions for gem "selenium-webdriver":
  In Gemfile:
    selenium-webdriver (= 3.142.4)

    webdrivers (= 4.1.2) was resolved to 4.1.2, which depends on
      selenium-webdriver (>= 3.0, < 4.0)

Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 4.0.2)

  In Gemfile:
    sass-rails (= 5.1.0) was resolved to 5.1.0, which depends on
      sprockets (>= 2.8, < 4.0)

    rails (~> 6.0.3, >= 6.0.3.4) was resolved to 6.0.3.4, which depends on
      sprockets-rails (>= 2.0.0) was resolved to 3.2.2, which depends on
        sprockets (>= 3.0.0)

Running `bundle update` will rebuild your snapshot from scratch, using
only
the gems in your Gemfile, which may resolve the conflict.

もしGemfileで指定されているのと異なるバージョンのgem (Rails自身のgemなど) をインストールしていた場合は、bundle updateを実行してgemを更新 (update) し、gemのバージョンを合わせておくとよいでしょう。

チュートリアル 3.1 セットアップより

2章:Toyアプリケーション

バージョン指定のアプリ作成ができず詰まってしまった。

  • 演習問題数:7題

【発生したエラー】

% rails _5.1.6_ new toy_app ができなかった
原因:環境に指定したrailsのバージョン( 5.1.6 )が入っていなかった。
下記のコマンドで指定のバージョンをインストールして解決。

ターミナル
% gem install rails -v 5.1.6
% rails _5.1.6_ new toy_app

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

HTMl / CSS / テストがメイン。特に詰まることなく進んだ。

  • 演習問題数:5題

4章:Rails風味のRuby

オブジェクト・クラス・インスタンス・シンボルなど、完全に理解してない部分がたくさん出てきて、
一度で全てを理解しきれず進みが一番遅い章だった。

  • 演習問題数:11題

【発生したエラー】
4.4.5 ユーザークラスで使用するアプリがtoy_appからsample_appになっていたので、エラーが発生していた。toy_appに変更したら解決した。

【理解が難しかったところ・調べた用語・参考記事】

  • モジュールについて
  • 破壊的メソッドについて
  • リテラルコンストラクタがいまいちわからない(4.4.1 コンストラクタ が理解難しい…)

(参考記事:Railsチュートリアル 第4章 - Rails風味のRubyを学ぶ…クラス

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

特に詰まることなく進んだ。実際の画面を確認しながら進められるので、やっていて楽しかった。

  • 演習問題数:9題

【理解が難しかったところ・調べた用語・参考記事】

  • アセットパイプラインについて

(参考記事:Rails初学者がつまずきやすい「アセットパイプライン」

  • マニフェストファイルについて
  • RESTの考え方

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

正規表現が出てきた。一度、正規表現に関する記事を読んだだけだったので、再度復習しなければと思った。
演習を結構間違えてしまった。

  • 演習問題数:13題

【理解が難しかったところ・調べた用語・参考記事】

  • リレーショナルデータベース
  • マイグレーション
  • sandboxモード
  • valid?メソッド
  • assertメソッド
  • :uniqueオプション
  • dup(同じ属性を持つデータを複製するためのメソッドです)
  • コールバック (callback) メソッド
  • digest(暗号化用ハッシュ関数という用語が語源です)
  • bcrypt gem
  • authenticateメソッド

7章:ユーザー登録

理解が難しい文章が出てくるようになった。

  • 演習問題数:14題

【理解が難しかったところ・調べた用語・参考記事】

  • ハッシュ化
  • hexdigestメソッド
  • asideタグ
  • pluralizeという英語専用のテキストヘルパー

8章:基本的なログイン機構

タイプミスでのエラーが多かった。

  • 演習問題数:10題

【発生したエラー】
①下記のエラーが発生していた。
原因:path名を間違えていた。

ターミナル
ActionController::RoutingError:         ActionController::RoutingError: No route matches [POST] "/signup"
            test/integration/users_signup_test.rb:7:in `block (2 levels) in <class:UsersSignupTest>'
            test/integration/users_signup_test.rb:6:in `block in <class:UsersSignupTest>'
  19/19: [=====================================================================================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.61060s
19 tests, 39 assertions, 0 failures, 1 errors, 0 skips
test/integration/users_signup_test.rb
post users_path, params: {user: {name: "", email: "user@invalid", password:    "foo", password_confirmation: "bar"}}

なのに、

test/integration/users_signup_test.rb
post signup_path, params: {user: {name: "", email: "user@invalid", password:    "foo", password_confirmation: "bar"}}

としていた。

②下記のエラーが発生していた。
原因:current_userがcuttent_userになってただけだった。

app/views/layouts/_header.html.erb
NameError in Users#show
Showing /Users/XXX/Desktop/Rails_tutorial/environment/sample_app/app/views/layouts/_header.html.erb where line #8 raised:
undefined local variable or method `current_user' for #<#<Class:0x00007fe0eb540190>:0x00007fe0f2883f58>
Did you mean?  cuttent_user

【理解が難しかったところ・調べた用語・ふとした疑問・参考記事】

  • fixture (フィクスチャ)
  • bcrypt
  • digestメソッド
  • app/helperってどんな役割だったけ、と。

(参考記事:rails helper 基本

9章:発展的なログイン機構

ここから、1〜8章でなんとか覚えた用語が多発する。

  • 演習問題数:7題

【理解が難しかったところ・調べた用語・ふとした疑問・参考記事】

  • 記憶ダイジェスト
  • 記憶トークン
  • model とhelperの違いってなんだっけ、と。

10章:ユーザーの更新・表示・削除

演習がほぼミスだったし、解答をみても1回で理解できなかった…。

  • 演習問題数:15題

【発生したエラー】

①ドキュメント通りやってたら、userないよってエラー!
すべてに、@をつけたら解決。
(参考記事:Rails Tutorial10章 10.32のテストが通りません

def create
    @user = User.find_by(email: params[:session][:email].downcase)
    if @user && @user.authenticate(params[:session][:password])
    log_in @user
    params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
    redirect_back_or @user
    else
(略)

@なしでやると下記のエラー発生。

ERROR["test_login_with_remembering", UsersLoginTest, 0.6073389999801293]
 test_login_with_remembering#UsersLoginTest (0.61s)
NoMethodError:         NoMethodError: undefined method `remember_token' for nil:NilClass
            test/integration/users_login_test.rb:43:in `block in <class:UsersLoginTest>'

  30/30: [=====] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.80407s
30 tests, 82 assertions, 0 failures, 1 errors, 0 skips

【理解が難しかったところ・調べた用語・ふとした疑問・参考記事】

  • controllerは_pathではなく_urlなのはどうして??
  • toggle!メソッド

11章:アカウントの有効化

メールの部分、一度で理解できずに進めていたが、12章で動作確認する際に、再度11章を読み直したら1回目よりも理解できた。
2回・3回やることの大切さを実感。

  • 演習問題数:9題

【発生したエラー】

① <%= form_for(@user, url: yield(:url)) do |f| %> 
としていたところ、ユーザー新規登録で下記のエラー発生。

image.png

参考記事

→Routes.rb で postの/signupを作成するのはチュートリアルではそうしていないため、違うのではないかと。

image.png

12章:パスワードの再設定

herokuでメール送信のための設定を行わなかった。
何十分も悩むエラーは発生しなかった。

  • 演習問題数:9題

13章:ユーザーのマイクロポスト

最後の演習がすごく難しかった。解けなかった。

  • 演習問題数:15題

【理解が難しかったところ・調べた用語・ふとした疑問・参考記事】

  • default scopeの使い方
  • find と find_by の違いってなんだっけ、と。

14章:ユーザーをフォローする

フォロー・フォロワーの関係は一度調べて図に書くと整理できます。

  • 演習問題数:14題

【発生したエラー】

①herokuでApplication error。
原因:13.4.4 本番環境での画像アップロードにて、中途半端に下記のコードを追加していたのでエラー発生していた。その部分を削除したら、無事にデプロイできた。

app/uploaders/picture_uploader.rb
class PictureUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_limit: [400, 400]

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

下記が発生したエラー。

Application error
An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details. You can do this from the Heroku CLI with the commandheroku logs --tail

【理解が難しかったところ・調べた用語・ふとした疑問・参考記事】

  • 複合キーインデックス
  • :memberメソッド
  • JavaScriptを前面に出すべからずという哲学
  • ステータスフィード

終わりに

「プログラミングを勉強しよう!言語は、Ruby・Railsにしよう!まずは公式っぽいRailsチュートリアルからやろう!」としてる方は、挫折しそうだなって思いました。
Progateをやって、1つRailsでアプリを作成してデータの受け渡しなどをある程度理解できてからやると、非常に勉強になるなと思いました(それでも、後半挫折しそうでした)。

2周目できたら、「Railsチュートリアル(第4版) まとめ 2」として記事を書きたいと思います。
まとめ2 では後半の章について詳しくかけたらいいなと思います。

参考記事(まとめ)

演習の解答答え合わせで、非常にお世話になった記事

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?