🙌

Railsチュートリアルを終えた感想

に公開

はじめまして。今回はRailsチュートリアルをひと通り最後までやり切ることができたので、その感想をまとめてみます。

私のプロフィール

情報系専門学校の2年
web系はフロントエンドだとReactやNext.jsを使ったことがある。
バックエンドは最近勉強し始めたばかり(PHPとGoを少し)

学んだこと・気付き

TDD(テスト駆動開発)の重要性

まず印象に残ったのは、テスト駆動開発です。
最初は「なぜテストを書きながら進めるのか」と思いましたが、実際に進める中でその便利さを実感することができました。

Railsチュートリアルでは、「red・green・REFACTOR」というテスト駆動開発のサイクルを繰り返します。まず、新しく追加したい機能のテストコードを先に書き、最初はテストが失敗する状態(red)にします。次に、そのテストが通るように最小限のアプリケーションコードを書き、テストを成功(green)させます。
最後に、書いたコードをもっときれいに、分かりやすくするために修正(REFACTOR)する、という流れです

この体験を通じて、コードが正しく動いているという安心感が得られるだけでなく、あとから変更した際に不具合をすぐ検知できることが分かりました。Webサービスを継続的に改善していく上で有効な手法だと感じました。

Active Record

Active Recordは、SQLを直接書かなくてもRubyのオブジェクトとしてデータを扱えるようにするORM(Object Relational Mapping)の仕組みを備えており、アプリケーションとデータベースを自然に結びつけてくれます。

例えばデータベースに新しいユーザーを追加したいときは、User.createのようなRubyのコードを書くだけで、データベースに追加することができます。
また、User.newで一時的にユーザーオブジェクトを作成したり、user.saveでそれをデータベースに保存したり、User.allでデータベースにいるすべてのユーザー情報を取得したりすることもできます。

また、アソシエーションを定義するだけで、テーブル同士の関係をオブジェクトとして直感的に扱えます。

class Micropost < ApplicationRecord
  belongs_to :user
end

このように書くとmicropost.userで投稿したユーザーを参照でき、逆にUser側で has_many :micropostsを書けばuser.micropostsで一覧を取得できます。
データベース操作をオブジェクトとして扱える点が便利だと感じました。

generateコマンドが便利

Railsで特に便利だと思ったのがgenerateコマンドです。例えば、

rails generate model User name:string email:string

と入力するだけで、ユーザーを管理するためのモデルやデータベースの構造を変更するマイグレーションファイル、さらにそれらをテストするためのファイルまで、自動的に生成してくれます。必要なひな形が一瞬で揃う点はとても便利だと思いました。

同様に、

rails generate controller StaticPages home help

と実行すれば、静的なページを表示するためのコントローラやビュー、テストコードが生成されます。
さらに、

rails generate scaffold Post title:string content:text

のように scaffoldコマンドを使えばこの一行で、モデル、コントローラー、ビュー、ルーティング、テストまで揃ってしまいます。
初めて使ったときは一瞬でCRUD操作が実装されたのでとても驚きました。
もちろんそのまま使うと冗長な部分もありますが、最初に全体像を把握するには非常に役立ちました。

ただし、チュートリアルでは、自動生成されたコードが量が多く複雑になるため、初学者には向いていないと説明されており、深い理解を促すためにほとんどscaffoldコマンドを使わずに手動でコードを書いていくようになっていました。
これにより、各機能がどのように構成されているかを段階的に学ぶことができました。

苦労したこと

環境構築

RailsチュートリアルではGitHub Codespacesというオンライン上で使えるIDEの利用を推奨していましたが、ローカル上で開発がしたかったので環境構築から始めました。

案の定すぐには終わらず、チュートリアルに書かれているrubyとrailsのバージョンだと上手く動作しなかったので、何回か組み合わせを変えてなんとか動作させることが出来ました。Rubyはrbenvでインストールしましたが、今振り返るとDockerで構築しても良かったかもしれません。(あとからDockerで構築する方法が載ってるのを知った...)
https://railstutorial.jp/help#devcontainer

ERBの書き方

Railsチュートリアルではビューの記述にERBが使われていました

<h1><%= @user.name %></h1>
<p><%= @user.email %></p>

私はフロントエンドでReactやNext.jsを触ったことがあり、JSXの書き方に多少は慣れていました。
そのため、HTMLにRubyを埋め込むERBの記法は似ているようで少し違う部分が多く、最初は区切りや書き方の感覚がつかみにくかったです。ただ、繰り返し書くうちに徐々に慣れ、基本的な書き方は理解できたかな...って思います。

まとめ

Railsチュートリアルを通じて、テスト駆動開発の流れやActive Record、generateコマンドによるコード生成など、Railsでの開発の基礎を一通り体験することができました。

一方で、まだ十分に理解しきれていない部分も多くあります。今回のチュートリアル完走はゴールではなく、これから学びを広げていくためのスタートなので、今後は内容を適宜復習しつつ、自分でアプリケーションを一から作りながら、Railsを扱えるようになっていきたいと思います。

Discussion