Railsチュートリアル要約「何を学んだのか」　前編（１〜７章）

## Railsチュートリアル前半で学ぶことを記述していきます
Railsチュートリアルは14章まであるので時間をあけてしまうと前にやった内容を忘れたまま次の章に行ってこんなのやったっけ？という状況に陥ってしまいます。Railsチュートリアルにもわかりやすく詳細な目次がありますが学んだことに焦点を当てて詰まった点も記述しました。つまり前半戦の内容を要約程度にざっと復習してこの章でこんなことやったから復習しようという目星になるように記述しました。
各章での最後に難しかった点を記述。ProgateからはじめてRailsチュートリアルをやってみて異なる点や環境構築など不慣れな点は一周目から理解するのは難しかったです。

##１章　準備
一章では環境構築をしてまずはアプリを作ってみる。その後の章でも役立つコードを保存する機能やWeb上に公開する方法を学ぶ。一章が以降の章の基礎になるためじっくり理解が重要。
#####開発環境の構築
・cloud9を使用するメリットについて
・railsのインストール

#####アプリの作成
・簡単なコマンドライン講座
・rails newでアプリを作成
・Gemとbundle
・rails serverでサーバーを起動

#####MVCフレームワーク
・View,Controller,routeを設定してブラウザで文字を表示

#####Gitでバージョン管理
・インストールとセットアップ（commitまで）
・Bitbucketを使ってみよう
・SSH鍵を作成
・リモートリポジトリ（remoteの登録とpush）
・Gitをより詳しく(ブランチ、マージ)

#####Herokuを使ってWeb上に公開しよう
・Herokuのセットアップ

####１章で詰まった点（１周目）
・BitbucketのSSH鍵を作成するという概念が理解できなかった。
　→Progateは環境構築が必要ないというメリットがあるが環境構築は避けては通れない。
　　これに関しては[「Webプログラミングが面白いほどわかる本　環境構築からWebサービスの作成まで、はじめからていねいに](https://www.amazon.co.jp/dp/B07DRB1JBS/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)」でcloud9ではなくVirtualMachineから環境構築を行う手順をわかりやすく解説してくれて環境構築やコマンドに慣れることができた。

・Herokuへのデプロイができなかった
　→そもそもHerokuの概念がわからなかった。
　　これはしっかりチュートリアル通りにやれば問題ないが、Herokuのアカウントを開いて現在の状況を確認しながら行うことでコマンドの意味が理解しやすくなる。

##２章　scaffoldという魔法を使ってアプリを作成
Progateを一通り学習した方は新規登録や一覧のページを一つずつ作成したと思います。
しかしrailsのscaffoldを使用すればこれらが一つのコマンドでできてしまう。最初にこれを知った時は「そんなことしていいの？」と疑問を持った。出来てしまうのです。まずはこれらの一通りの機能を作ってみて全体を把握することが目的だと思います。

#####まずはscaffoldでユーザー機能を作成
・scaffoldコマンドでUserに関する機能を作成
・ページを触ってみて出来上がりを確認
・この時内部でどんな動きが行われているのかMVCの図で理解

#####routing
・resourcesでroutingがまとめられていることを確認
・rootのrootingを設定する

#####scaffoldで投稿機能を作成
・投稿の文字数などの制限を加える

#####ユーザーと投稿を結びつける
・１対多の関係になっていることを明記して紐づける

#####DBの値を確認
・rails consoleで値を取り出す

#####継承関係
・各クラスの大元を辿って構造を確認

####2章で詰まった点（１周目）
・scaffoldが便利すぎる反面、そんなこともできるのかと信じられなかった。
　→これはrailsに感謝して使いこなすしかない。
・resoucesでrouteがまとめられていることに気がつかなかった。
　→railsで自動生成されたrouteはrails routesのコマンドでpathを確認する。
  ```
　　$ rails routes
  ```

##３章　手動で機能作成とはじめてのテスト
３章ではscaffoldを使わずにgenerateや手動で機能を作成します。
初めてテストコードを記述します。
#####homeページとhelpページを作る
・rails generateでcontrollerを作成
・rails destroyでcontrollerの作成を取り消す
・その他巻き戻す方法を解説
・generateでview,controller,routingが作られていることを確認

#####初めてのテスト
・自動化テストの意義について
・実際にテストを作成
・成功を確認
・失敗を確認
・aboutページを手動で作成

#####タイトルをページごとに動的に作成
・特定のHTMLタグが存在するかのテストを記述
・setupクラスでテストの文字を共通化
・priveメソッドをyieldに埋め込む
・application.html.erbに共通部分を移行

####３章で詰まった点（１周目）
・テストコードという概念にカルチャーショックを覚えた。
　→当方SIer企業に勤務しているためテストといえば画面のスクショをエクセルに貼り付ける行為をテストと認識していた。テストコードを知った時は驚愕した。
　　SIer勤務の方は概念を切り替えてテストコードを理解する必要がある。

##４章　そもそもRubyを学ぼう
４章のRuby基礎は不明な点はProgateやドットインストールで解決
#####ヘルパーで煩わしい処理をまとめる
・ヘルパーに処理部分を移して、取り込みたい部分で埋め込み

#####Ruby基礎
・文字列など文法の基礎
・オブジェクトとメソッド
・配列とハッシュ
・クラス
・継承

##５章　見た目を整える、HTMLを綺麗に
５章では今までの章で書いていたHTMLを共通化したり、画面の見た目を整えます。
#####HTMLの構造整理
・HTMLにheadも含めて記述
・Bootstrapでclassを記述
・Bootstrapを使うための環境設定(Gemやimport)
・linkの記述方法を理解
・画像のダウンロードと配置

#####パーシャルでHTMLを整理
・散乱したHTMLをパーシャルを使用してから本体に埋め込む

#####SassでCSSを拡張
・ネスト構造
・変数の使用

#####root
・名前付きルートの記述

#####リンクテスト
・リンクのテストを記述

####５章で詰まった点（１周目）
・linkの書き方がProgateと異なって戸惑った。
　　→()をつけない記述に慣れる。

##６章　ユーザー登録はじめの一歩
６章からユーザー登録を学んでいく。６章ではユーザのモデルを作り登録の際の制限を設けます。
　
#####ユーザの情報を格納するための準備
・controllerでユーザコントローラを作成
・rails g でユーザモデルを作成
・マイグレーションファイルからどのようなテーブルが作られるか判断

#####ユーザを登録
・rails consoleからUsew.newでユーザに情報を与えて登録していく
・DBから値を取得する

#####ユーザ登録のテスト
・validで有効性をテスト
・存在のバリデーションを作成しテスト
・エラー内容を確認する方法を学習
・長さとメールの有効性を確認
・すでに登録されたメールを登録できないようにする

#####セキュアなパスワード
・パスワードをハッシュ化する技術(Progateの最後の章をやると理解が深まる)
・文字数制限

####６章で詰まった点（１周目）
・テストコードの記述している具体的な値がなぜそうなるのかを考えてしまった。
　　→あくまで例を入れてテストしているという概念を持って理解する。


##７章　フォームを作成しユーザーを登録
７章ではユーザ登録フォームを作成しPOSTで送信する方法を学びます。セキュリティの強化もこの章で行います。

#####デバッグ
・開発環境にデバッグを表示して処理をわかりやすくする

#####特定のユーザー情報を表示するページを作成
・show.html.erbをviewとして用意
・コントローラーでパラメーターから特定のユーザーの値をDBから取得
・debuggerメソッドでデバッグ体験

#####プロフィール画像
・メールアドレスと写真をGravatarで結びつける

#####登録フォームを作成
・new.html.erbでviewを作成
・form_forを理解
・labelとtext_fieldを理解

#####Strong Parameters
・paramsの初期化の危険性
・priveteキーワードで安全性を確保

#####登録失敗時のエラーメッセージ表示
・パーシャルにエラーがあった場合のメッセージを記述
・pluralizeで単数複数を区別

#####無効なユーザー登録に対するテスト
・getで登録ページにアクセス
・user_pathにpost
・newアクションの再描画

#####登録成功時
・個人の詳細ページにredirect
・flashで成功メッセージを表示
・成功時のテストを記述

#####セキュリティを高めるSSL
・ユーザー登録フォーム送信の危険性
・SSLの概要理解
・本番環境用のWebサーバーの設定

####７章で詰まった点（１周目）
・formの書き方がProgateと違う
　→様々な書き方に対応する。
・StrongParameterを使用する意味が理解できなかった。
　→セキュリティ的な問題点を把握して、ドットインストールでもStrongParameterの講義があるので理解する。