Progate「Ruby on Rails5」をやってみた感想と学習メモです。
プログラミング初心者がいきなりこの教材から学ぶと躓きそうです。
逆にプログラミング経験者がRailsをサクッと学ぶにはうってつけな気もします。
※Railsチュートリアルよりはカンタンです
以下、私が取り組んだ各コースの「学習時間」と「難易度(★が多いほうが難しい)」とメモ書きです。
※他のプログラミング言語を経験した私の所要時間などを書いています
目次
Ruby on Rails5Ⅰ【学習コース】 60m / ★★☆
Ruby on Rails5の学習コースⅠです。
- 学習時間:60m
- 難易度:★★☆ ※MVCの知識がないと大変かも
- 学習方法:雰囲気でできそうだったので課題は行わずスライドだけ見た
学んだコマンドはこちら
- rails new アプリケーション名
- rails serverでサーバー起動
- 「rails generate controller home top」でトップページ作成(既にコントローラがある場合は使えない) ※generateはgと省略可能
RailsのView Controller Routingについての学習内容
[View][Controller][Routing]
- ページに必要なのは「View, Controller, Routing」の3ファイル
- ブラウザ→ルーティング→コントローラ→ビューの順番で処理が行われる
- Viewファイルは「~.html.erb」という拡張子
- Controllerファイルは「rb」拡張子。ApplicationControllerを継承したクラス
- コントローラ内のメソッドをアクションと呼ぶ
- アクションは、コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探してブラウザに返す
- ルーティングは対応表。URL、コントローラ、アクションの結びつきを決める
- ルーティングの文法「get “URL” => “コントローラー名#アクション名”」
その他の知識
- 「rails generate controller home top」で作られるトップページのURLは「localhost:3000/home/top」です
- CSSファイルは「app/assets/stylesheets」フォルダにある。CSSの記述は全てのビューに適用される
- 画像は「public」フォルダに配置する
レッスン1から意外と重めの内容でした!
この辺りの全体像が分かるのは非常にありがたいですね。
Ruby on Rails5Ⅱ【学習コース】 30m / ★☆☆
Ruby on Rails5の学習コースⅡです。
- 学習時間:30m
- 難易度:★☆☆ ※DBの基礎知識があれば簡単です
- 学習方法:雰囲気でできそうだったので課題は行わずスライドだけ見た
学んだ内容はこちら
[View][Controller][Routing]
- コマンド「rails g model Post content:text」(text型の列content作成)を使うことでモデルを作成可能
- <% @posts.each do |post| %>
- erb(Embedded Ruby)ファイルは<% %>でHTMLの中にRubyコード記述可能
- 変数の値を表示したい場合は「<%= %>」を用いる
- Railsでは、「views/layouts/application.html.erb」に共通のHTMLを書く
- 「views/layouts/application.html.erb」の<%= yield %>に、各ビューファイル(top.html.erbなど)の内容は表示される
- 一覧ページのアクション名はindexが一般的
- link_toというメソッドを使うと<a>タグ(リンク)を作成できる。第一引数は表示文字、第二引数はURLを書く(”/posts/#{post.id}”みたいな感じ)
- 「モデル名.find_by(カラム名: 値)」がCRUDのRead(SQLのSELECTみたいなもの)
- Controllerの変数宣言時の変数名は@をつける 例:@post = ~~
- ルーティング「posts/:id」と書くと「/posts/◯◯」のような全てのURLが該当する
レッスン2は意外と簡単(他の言語をやっていれば)
Rubyならではの書き方はlink_toくらいで、残りはDBを扱うための基本クラスが用意されているという風に考えればOKそう
Ruby on Rails5Ⅲ【学習コース】 53m / ★★☆
Ruby on Rails5の学習コースⅢです。
- 学習時間:53m
- 難易度:★★☆ ※慣れるまで時間がかかる
- 学習方法:そろそろ手を動かしたくなったので一つ一つの課題に取り組む
学んだ内容はこちら
[View][Controller][Routing]
- ルーティングのURL部分に「:」を用いて「posts/:id」と指定すると「:id」部分が任意の数字扱いになる
- ルーティングは合致するURLを上から順に探すので、抽象度が高いものは下の方に書く必要がある
- コントローラのアクション内では、ルーティングで設定したURLの「:id」の値をparams[:id]を使って取得可能(変数paramsにハッシュとしてデータがある。paramsに注意)
- ルーティング指定時に、postメソッドを使う時は、getルーティングではなくpostルーティングを使うこと
- form_tagメソッドで、「form_tag(送信先のURL) do」と書くことで、フォームに入力されたデータを送信可能。URLの例は「”/posts/create”」で、「/」を忘れないようにすること
- form_tagメソッドを使うときには<%= %>と書く。閉じタグは<% end %>と書く(=は付かない)
- postした後のビューは既存のものにリダイレクトでもOK。redirect_to(URL)メソッドを使うと良い
- <textarea>タグにname属性を指定することで、name属性の値をキーとしたハッシュをRails側に送れる(name属性は裏側で決まり、値はユーザ入力)
- controllerの変数paramsは①「:○○」で指定したルーティングのURLから値を取得する(routeファイルから) ②「name=”○○”」が付いたフォームの入力内容を受け取る(viewファイルから)
- order(カラム名: 並び替えの順序)メソッドでselectが可能(昇順は:asc、降順は:desc)
自分の手で動かすとやっぱりちょっと難しいw
今触っているファイルが何なのか(ルーティングなのか、ビューなのか、コントローラなのか)という所の意識が重要ですね。
Ruby on Rails5Ⅳ【学習コース】 30m / ★☆☆
Ruby on Rails5の学習コースⅣです。
- 学習時間:30m
- 難易度:★☆☆
- 学習方法:普通に課題をコツコツやってます
学んだ内容はこちら
[View][Controller][Routing]
- 投稿の削除には「destroyメソッド」を使う
- link_toメソッドの第3引数に「{method: “post”}」を使うことでpostに出来る(デフォルトはgetということ)
このコースは簡単です!
ちなみにRubyっぽい <%= form_tag(“/AAA/#{@インスタンス.変数名}”) do %> みたいな書き方に慣れてません、よく間違えます…。
Ruby on Rails5Ⅴ【学習コース】 30m / ★☆☆
Ruby on Rails5の学習コースⅤです。
- 学習時間:30m
- 難易度:★☆☆
- 学習方法:普通に課題をやってます
学んだ内容はこちら
[View][Controller][Routing][Model]
- Modelの中で「validates:カラム名, 内容」(例:存在確認の{presence: true})がバリデーション ※presenceはシンボルなので「:」を離して書かないように注意
- バリデーションの「内容」はハッシュになっている(複数書くためには、カンマで区切る)
- Controllerで「@post.saveメソッド」を呼び出し時、成功したらtrue、失敗したらfalseになる
- renderメソッドは、別のアクションを経由せず直接ビューを表示可能。この時、controllerが持っている値をそのままviewに渡せる。render(“フォルダ名/ファイル名”)とパスを指定する ※ファイル名というよりもView名(拡張子は不要)
- エラーメッセージを表示する時「@変数名.errors.full_messages.each do」のように書くことで、まとめて表示可能
- フラッシュとは「ページ上に1度だけ表示されるメッセージ」。
- フラッシュを使うには、Controllerのアクションで変数flash[:notice]に文字列を代入する。変数flashはViewで呼び出されると自動で削除される
- フラッシュを使うには、Viewでflash[:notice]と書く
このコースもそこまで難しくないです
バリデーションとかまで扱うんだというのが驚きでした。思ったよりもちゃんとしたものができそうです
Ruby on Rails5Ⅵ【学習コース】 8m / ★☆☆
Ruby on Rails5の学習コースⅥです。
- 学習時間:8m
- 難易度:★☆☆
- 学習方法:今までの知識と変わらなかったので手は動かさずスライドだけ見た
学んだ内容はこちら
[View][Controller][Routing][Model]
- 新たなバリデーション内容は「uniqueness: true」(重複確認)
- <input>タグでは、value属性の値が初期値。value属性の値としてRubyコードを使うには<input name=”AAA” value=”<%= @インスタンス.変数 %>”>
面倒だったので、手を動かさずスライドだけ見ましたw
まあ、大体Ⅰ~Ⅴの内容と一緒って感じですね。
Ruby on Rails5Ⅶ【学習コース】 23m / ★☆☆
Ruby on Rails5の学習コースⅦです。
- 学習時間:23m
- 難易度:★☆☆
- 学習方法:今までの知識と変わらなかったので手は動かさずスライドだけ見た
学んだ内容はこちら
[View][Controller][Routing][Model]
- マイグレーションファイルのみ作成するコマンドは「rails g migration ファイル名」。
- マイグレーションファイル内のchangeメソッドの中にDBへの変更指示を書く。カラムを追加なら「add_column :テーブル名, :カラム名, :データ型」
- Rubyの標準ファイルクラスを使ってファイル操作をする。File.write(ファイルの場所+ファイル名, ファイルの中身)で書き込み可能
- <input>タグに「type=”file”」でファイルのアップロードが可能になる
- 画像を送信したい時は、form_tagに{multipart: true}を追加する
- 画像ファイルは「コンピュータが読み解ける文字で書かれている」テキストファイル。params[:Viewで設定したinputのname]でcontrollerで読み込み可能。
- Controllerで読み込んだ画像ファイル(の文字情報)をFileに書き込むときには、「変数.read」というメソッドを使いテキストデータを受け取る。更にFileの書き込みメソッドもbinwriteを使う
画像の読み込み関係で1つの学習コースです
徐々に各論っぽい話が増えてきましたね、そこまで難しくないはず。
Ruby on Rails5Ⅷ【学習コース】 56m / ★★★
Ruby on Rails5の学習コースⅧです。
- 学習時間:56m
- 難易度:★★★
- 学習方法:手を動かしつつ勉強(これはスライドだけ見るよりも自分で書いたほうが良い)
学んだ内容はこちら
[View][Controller][Routing][Model]
- inputタグのtype属性をpasswordにすると、入力欄が「●●●●」と伏せ字になる
- 変数sessionをControllerで定義するときには「session[:キー名] = 値」と書く(session情報はブラウザが覚える)
- sessionにnilを入れることで、セッション状態を解除
- セッション状態を変えるときにはルーティングをpostにする!
- application.html.erbでアクション側の変数を使うには、application_controller(全コントローラの親)の中で、before_action(アクション呼び出し前の共通処理)に処理を追加すればOK ※before_action :メソッド名
- Controllerのbefore_actionで複数アクションを指定する場合は、before_action :メソッド名, {only: [:アクション名A, :アクション名B]}
- @変数で定義した変数は同じクラスの異なるメソッド間で共通して使用できる
- Controllerが、params[:変数]で取得できる値は文字列なのに注意
多分後半の1番の山場だと思います
セッション周り(WEBの基本処理)を先に理解したほうが良いかもしれませんね。
Ruby on Rails5Ⅸ【学習コース】 26m / ★☆☆
Ruby on Rails5の学習コースⅨです。
- 学習時間:26m
- 難易度:★☆☆
- 学習方法:手を動かしつつ勉強
学んだ内容はこちら
[View][Controller][Routing][Model]
- whereメソッドで、ある条件に合致する「複数の」データを取得する
クラスの理解さえできていれば、そんなに難しくないはず
今、どのインスタンスをいじっているのか、何をやりたいのか、データのつながりはどうなのか、さえわかれば大丈夫だと思います。
Ruby on Rails5Ⅹ【学習コース】 27m / ★★☆
Ruby on Rails5の学習コースⅩです。
- 学習時間:27m
- 難易度:★★☆
- 学習方法:手を動かしつつ勉強
学んだ内容はこちら
[View][Controller][Routing][Model]
- HTML要素にlink_toメソッドを使うには、<%= link_to(URL) do %>と<% end %>の間にHTML要素を書く
- countメソッドでDBのレコード数を取得可能
やっていることは今までの知識の延長!
この辺りになると、RoRの複雑さというよりは、システム設計の複雑さでつまずくことが多そうです。
DBについての説明スライドが無いまま進んでいくので、その辺りの整理ができていないと難しいと感じるかも
Ruby on Rails5Ⅺ【学習コース】 16m / ★☆☆
Ruby on Rails5の学習コースⅪです。
- 学習時間:16m
- 難易度:★☆☆
- 学習方法:手を動かしつつ勉強
学んだ内容はこちら
[View][Controller][Routing][Model]
- gem(ジェム)はツール(ライブラリ?)。gemfileに使いたいgemの名前を書く
- gem記述は「gem ‘ジェム名’ ‘バージョン’」という書き方。バージョンがない場合は、最新バージョンがインストールされる
- bundle installコマンドでgemをインストールできる
- bcryptは暗号化するためのgem。modelに設定するメソッドは「has_secure_password」である(validationの集まり&暗号化処理しているはず)。「password_digest」という列をDBに用意すること
- bcryptの「password_digest」列に、アプリからread/writeするときは、「password」列へのアクセスでOK(password_digestじゃなくて良い)
- 「authenticate」メソッドは、渡された引数(ユーザ入力のパスワードの値)を暗号化し、password_digestの値と比較し、真偽を返す
暗号化が簡単にできる!!
gemが超便利ということがわかりますね。最後はあっさりめの課題でした。
【Progate道場コース】Ruby on Rails5Ⅰ 45m / ★☆☆
Progate道場コースのRuby on Rails5Ⅰです。
学習コースのⅠ~Ⅲの復習ですね。
- 学習時間:45m
- 難易度:★☆☆
- 学習方法:学習コースのⅠ~Ⅲのメモを見ながら、実践
●ヘッダーを作る時はlayoutのviews/layouts/application.html.erbに書く
→共通部分を書くファイルのパスを忘れないようにする
●マイグレーションファイルの内容をDBに反映させるために「rails db:migrate」コマンドを使う
→全く覚えていないw
- 「rails g model ~」コマンドで、モデルファイルとマイグレーションファイルを作成する。
- そのマイグレーションファイルの中には、作成したモデルと紐づく形で「create_table」するコードが書かれている
- 「rails db:migrate」コマンドで、そのcreate_tableの処理が呼ばれて、DBにテーブルが作成される
という流れのようです。
●Viewで「link_to」を使う時は引数指定をするので呼び出し時にスペースではなくカンマを使う
→Viewファイル(HTMLファイル)の中に<% %>で、Rubyコードを呼び出している。
あくまでもRubyの「メソッド」なので、カンマが必要
●Viewでlink_to(post.content, “/posts/#{post.id}”)と書く(変数展開)
→文字列「”~~~”」の中で変数の値を呼び出したいときには、変数展開を使う。
#{式}という書き方をする。
【Progate道場コース】Ruby on Rails5 Ⅱ 30m / ★☆☆
Progate道場コースのRuby on Rails5 Ⅱです。
学習コースの4~6の復習ですね。
- 学習時間:30m
- 難易度:★☆☆
- 学習方法:詰まったらすぐに解答を見て大雑把に復習
解答を見まくったので、途中から手を動かしていませんw
route, view, controllerの関係と使い方が実践を通じて徐々に身についてきました。
この辺りは数をこなすのが大事っぽいです。
【Progate道場コース】Ruby on Rails5 Ⅲ 40m / ★★☆
Progate道場コースのRuby on Rails5 Ⅲです。
学習コースの7~8の復習ですね。
- 学習時間:40m
- 難易度:★☆☆
- 学習方法:詰まったらすぐに解答を見て大雑把に復習
画像ファイルアップロード時には
- form_tagに{multipart: true}引数を与える
- Controllerで、File.binwrite(“パス/#{@変数.画像名}”, image.read)
とする辺りの処理を忘れがちですね。
…って感じで、とりあえず大体できそうだったので、ここで辞めています。
続けて、無料で評判が良いRubyチュートリアルに挑戦し始めました
こちらの記事もどうぞ↓