現場で使えるRuby on Rails5速習実践ガイドを読んで

# はじめに
今回は[Ruby on Rails５速習実践ガイド](https://www.amazon.co.jp/gp/product/B07JHQ9B5T/ref=ppx_yo_dt_b_d_asin_title_351_o00?ie=UTF8&psc=1)を読んだので、読了したので、良かったところや悪かったところなどをまとめていこうと思います。
購入するか悩んでいる方やこちらの本を気になっている方の参考になれば良いと思います。

# 良かったところ
- railsの基礎を学べるところ。
    - 開発の全体像を掴むことができる。
        - アプリケーションの作成からCRUD機能を一通り学べること
        - Bootstrapを使って見た目も整えたアプリケーションを作ることができる
        - Rspecで自動テストについて学ぶことができる
        - チーム開発について学ぶことができる
        - バージョンアップへの対応を学ぶことができる
- コードのリファクタリングや共通化などのベストプラクティスなどを学ぶことができる


# 学んだこと
#### Chapter2
- RailsのMVC
    - MVCとは、UI（ユーザーインターフェース）を持つソフトウェアのアーキテクチャの1種。
    - モデルは、データとデータに関わるビジネスロジック（アプリケーション特有の処理）をオブジェクトとして実装したもの。データは多くの場合、データベースで永続化されるが、データベースへの保存や読み込みもモデルが担当する。

    - ビューは、ブラウザに表示する画面、すなわちHTMLなどのHTTPレスポンスの中身を実際に組み立てる部分。
必要に応じてコントローラーからモデルのオブジェクトなどを受け取り、画面表示に利用する。

    - コントローラーは、ユーザーが操作するブラウザなどのクライアントからの入力（リクエスト）を受け、適切な出力（レスポンス）を作成するための制御を行う部分。必要に応じてモデルを利用したり、ビューを呼び出したりして、レスポンスを作り上げる。

#### Chapter3
- アクションへデータを送る「リクエストパラメータ」
    - Webアプリケーションでは、リクエストにデータを添えることができる。
    このデータを「リクエストパラメータ」と呼ぶ。
        - リクエストパラメータの送り方は、HTTPの仕組みの上で、2通りに分かれる。
1.POSTで送る。基本的にはHTMLのform要素をsubmitすることで送られる。
2.GETで送る。基本的にはURLの?以降に情報を含めることで送る。普通に?のついたURLにブラウザからアクセスするほか、form要素のmethod属性にgetを指定して、form要素のsubmitを通じてそのようなリクエストを送ることもできる。
コントローラーにおいてparamsというメソッドを利用することで、POSTかGETかに関係なく、送られてきたリクエストパラメータをHashのような感覚で取得することができる。

#### Chapter4
- マイグレーションの適用
    - 1.DBの構造（スキーマ）を変更するコードをRubyで記述した「マイグレーション」ファイルを作成する。
2.作成した「マイグレーション」ファイルをrails db:migrateコマンドを使ってデータベースに適用する。（migrateする）
    - 1つのマイグレーション（ファイル）が1つのバージョンとして扱われる。
つまり、1つのマイグレーションを適用することでデータベーススキーマのバージョンを1つ上げることができ、適用済みのマイグレーションを1つ取り消すことでバージョンを一つ下げることができる。
    - マイグレーションファイルを作成しただけではデータベースは変更されない。マイグレーションを適用してはじめて、マイグレーションファイルに書かれたRubyコードが実行され、データベースが実際に変更される。
逆に、使用済みのマイグレーションを取り消す際も、ただマイグレーションファイルを削除するだけではデータベースは変更されない。
マイグレーションを取り消すコマンドを実行して、マイグレーションファイルに書かれた取り消し操作を適用する必要がある。
    - マイグレーションファイルはRubyプログラムなので、コードに不備があれば、適用中にエラー（例外）が出てマイグレーションが止まってしまう可能性がある。
エラーでマイグレーションが中止された場合は、問題の起きたマイグレーションで適用しかけた変更はロールバックされ、それ以降のマイグレーションも適用されない。
つまり、問題の起きたマイグレーションを適用する前の状態のままとなる。

#### Chapter5
- テストを書くことのメリット
    - 自動テストを備えていれば、動作確認の大部分を自動テストにまかせるとができ、テスト全体にかかるコストを大幅に削減できる。
    - 環境のバージョンアップやリファクタリングの必須条件。
    - 十分な量のテストが書かれていれば、テストを変更せずに本体コードだけを変更してテストを流すことで、その変更がシステム全体にどのような影響を与えるかを、テストの落ち方から検討することができる。これによって、影響の全体像が掴みやすくなることがある。
    - 動作確認だけでなく、期待している動作の詳細を開発チーム内で共有する手段でもある。
    - テストを書きやすいプロダクトコードを作ることを意識することで、おのずと、管理しやすい粒度で構成されたコードにしていけるという性質がある。

#### Chapter6
- ルーティングについて
    - resourcesはあくまでも典型的なCRUDを簡単に定義するための仕組みに過ぎず、何もかもをresourcesを使って定義しなければならないわけではない。

- 日時の扱い方
    - Rubyには日付や時刻を扱うためのDateやTimeといったクラスがある。Railsアプリケーションで日付や時刻を扱う際にもただこれらのクラスを使えばいいと思うが、タイムゾーンという課題がある。
    - もし、モデルのcreated_atなどを日本時間で時間オブジェクトとして取得したいのであれば、Time.zoneを日本時間に指定してからオブジェクトを取得すれば良いということになる。

#### Chapter10
- バージョンアップにどう取り組むか
    - Railsは変化の早いフレームワークであるため、アプリケーションを放棄しない限り、ずっとバージョンアップをし続ける必要がある。
    - 開発現場だけでなく、事業計画のレベルでも、バージョンアップの費用を常に計画に織り込むことが重要。



# 難しかったこと
- 今回読んだ本のバージョンがRails5が基準の内容だったので、現在最新のRails７では非推奨になっていて使えない記法やエラーが発生してしまうということが頻繁に起こりました。
個人でこちらのエラーなどを解消するのはとても難しかったです。
現在Rails7で今回読んだような内容の本が少ないのでぜひ新版が出たら読みたいと思いました。

# 最後に
今回本を読んでいてエラーが起こることが何度もありました。
今後課題などを行う上で、何度もエラーに遭遇し苦しむと思いましたが挫けずに進めていきたいと思います。
Chapter１０にもあったようにバージョンアップは日々行われているので、今後もバージョン違いで悩むこともあると思いますが、柔軟に対応できるようになりたいと思いました。