rocky-engineer7の技術日記

webエンジニアを目指して奮闘中!!

【初学者向け】現場で使える Ruby on Rails5 速習実践ガイドを読んだ感想

はじめに

www.amazon.co.jp

現場で使える Ruby on Rails5 速習実践ガイドを読んだ感想をまとめを書いていきます。

よかったところ

  • rubyの基礎、ユーザー管理アプリケーション、todo管理アプリケーションを通じて一連の流れを体系的に学ぶことができる

  • 特に3章から7章までのtodoアプリケーションと追加機能の部分では、railsの機能面やどういう処理をしているのかを図やコードで解説がされているので、初学者でも食らいついて開発することができた。

学んだこと

今回のtodoアプリで参考にした環境構築記事はこちらです。

Ruby on Rails 7 with Bootstrap on Docker Compose 開発環境を簡単に構築する方法 #Ruby - Qiita

Ruby on Rails 7.1 with Bootstrap on Docker Compose 開発環境を構築する方法 #Ruby - Qiita

環境構築で詰まりまくって肝心の書籍の内容が全く進まずにどんどん進捗が遅れてしんどいぞ...という状況に陥ったので、もし記事を拝見された方に参考になれば幸いです。(自分は訳わからなくって再度環境構築し直しました...)


以降は章ごとでピックアップして学んだことをまとめていきます。

Chapter 2

RailsMVC(Model-View-Controller)アーキテクチャは、アプリケーションの設計を整理し、効率的に開発できるようになる。

  • モデル:アプリのデータとそのデータを操作するロジックを担います。主にデータベースとのやり取りを管理し、データの保存や読み込みを行います。

  • ビュー:ユーザーに表示される画面の部分で、HTMLで構成されます。コントローラーから受け取ったデータを元に、ユーザーが見るページを作り上げます。

  • コントローラー:ユーザーの入力を受け取り、それに応じてモデルを使ってデータを処理し、最終的にビューを介してユーザーに結果を表示します。つまり、モデルとビューの橋渡し役を果たします。

Chapter 3

paramsオブジェクトの活用

Railsでは、これらのメソッドから送られたデータをparamsオブジェクトを通じて受け取ります。

paramsはコントローラ内で使えるハッシュのようなオブジェクトで、フォームやURLから送られたデータにアクセスできる。

def search
  keyword = params[:keyword]
  # ここでkeywordを使った検索処理を行う
end

効率的なコントローラの設計

コントローラのアクションを定義する際、GETメソッドを使うアクション名を選ぶと、そのアクションは同名のビューファイルをレンダリングすることが多く、開発がスムーズに進む。

renderとredirect_to

  • レンダーとリダイレクト:データ送信後の処理には、レンダー(再描画)とリダイレクト(新しいリクエストの発行)の二つがあります。例えば、フォーム送信に失敗した時は同じフォームを再描画し、成功した時は別のページへリダイレクトします。

  • simple_formatメソッド:テキストに含まれる改行をHTMLの<br>タグに変換し、XSS攻撃を防ぐためのエスケープも行います。これにより、ユーザーが入力したテキストを安全に表示できます。

  • パーシャルインスタンス変数ではなくローカル変数を渡すことで、その再利用性と可読性を高めることができる。

Chapter 4

モデルの基本

モデルは、アプリケーションの「モデル層」を形成し、データとビジネスロジック(データに関する処理や規則)を担当します。具体的には、以下の二つの主要な要素から構成されます。

  • Rubyのクラス:データに関する操作やビジネスロジックを定義します。
  • データベースのテーブル:モデルが操作するデータを保持します。

Railsでは、モデルのクラス名はキャメルケースで表記され、対応するテーブル名はその複数形のスネークケースで命名されます(例:モデルクラスUserはテーブルusersに対応します)。

モデルの作成

モデルの作成には、Railsが提供するジェネレータコマンドを使用します。このコマンドは、モデルのクラスファイルとデータベースのマイグレーションファイルを自動で生成し、テストファイルなども同時に作成します。

bin/rails g model ModelName attribute:type

例えば、namecontent属性を持つTaskモデルを作成する場合、以下のようにコマンドを実行します。

bin/rails g model Task name:string content:text

マイグレーション

マイグレーションは、データベースのスキーマ(テーブルやカラムの構造)をバージョン管理する仕組みです。モデル生成時に作成されるマイグレーションファイルを用いて、テーブルの作成や変更を行います。マイグレーションファイルはRubyで記述され、bin/rails db:migrateコマンドでデータベースに適用されます。

class CreateTasks < ActiveRecord::Migration[6.0]
  def change
    create_table :tasks do |t|
      t.string :name, null: false
      t.text :content
      t.timestamps
    end
  end
end

マイグレーションを適用することで、モデルで定義された属性に対応するテーブルがデータベースに作成される。

また、マイグレーションロールバックが可能で、bin/rails db:rollbackコマンドで直前のマイグレーションを取り消すことが可能。

Chapter5

テストのメリット

  • 自動テストにより、動作確認の大部分を自動化し、テストコストを大幅に削減
  • 環境のバージョンアップやリファクタリング時に必須
  • テストを通じてシステム全体の影響を検討し、全体像を掴みやすくする
  • テストは開発チーム内で期待する動作の詳細を共有する手段
  • テストを書きやすいコードを意識することで、管理しやすいコード構成を促進
  • テストが仕様のドキュメントとして機能し、仕様書の役割を果たす
  • テスト作成過程で仕様バグや要件の詰め漏れを発見しやすくなる
  • テストの存在を意識することで、テストしやすいプロダクトコードに自然となる

Chapter 6: ルーティング

Railsのルーティングシステムは、RESTfulなウェブアプリケーションの設計に必要な要素。 resourcesメソッドを使うことで、CRUD操作に必要なルーティングを一括で生成できるため便利。 scope,namespace,controllerといったカスタムメソッドで、ルーティングを柔軟に行うことができる。

  namespace :admin do
    resources :users
  end

難しかったところ

  • 本書が2018年発行のため、rails7環境だとかなり頻繁にエラーが発生するのでそのエラーを解決しながら進むため体力と時間と根気の勝負だった。

  • また、今回はDockerを用いて環境構築していたためそのエラーも頻発してかなり苦労した。

  • slim形式でコードが書かれているのでerbに置き換えて実行していたので、読むのに苦労した。

終わりに

Docker × rails7 × bootstrap5で環境構築していて詰まる部分もたくさんあって、一時は1から環境構築までしましたが、先人たちの知恵と記事のおかげでたくさん学びがありました。 progateやドットインストールなどで予めある程度の基礎知識がある状態で、この本を読むとかなり効果的に学べると思うので、私と同じくWeb開発系に進むために勉強をされている方にはぴったりな一冊だと思いました。