0
3

More than 3 years have passed since last update.

【さちゃでもわかる】Ruby on Rails 入門1

Posted at

はじめに

1年くらい前にProgateでRubyを少しだけ触っていた自分が,バイトで1ヶ月バリバリのRubyの環境で(知らなかった)学んだ話の備忘録.

実装環境

macOS Catalina 10.15.4
ruby 2.6.3
Rails 6.0.2.1

参考リンク

Railsガイド

Railsとは?

Railsガイドを軽くまとめると

  • Rubyプログラミング言語で書かれたWebアプリケーションフレームワーク
  • Railsは、最善の開発方法というものを1つに定めており,それに沿った開発を全面的に支援する
  • コード量がより少なくて済むにもかかわらず、より多くの機能を実現できる

というものです.そしてRailsの哲学には

同じことを繰り返すな (Don't Repeat Yourself: DRY):

DRYはソフトウェア開発上の原則であり、「システムを構成する知識のあらゆる部品は、常に単一であり、明確であり、信頼できる形で表現されていなければならない」というものです。同じコードを繰り返し書くことを徹底的に避けることで、コードが保守しやすくなり、容易に拡張できるようになり、そして何よりバグを減らすことができます。

設定より規約が優先される (Convention Over Configuration):

Railsでは、Webアプリケーションで行われるさまざまなことを実現するための最善の方法を明確に思い描いており、Webアプリケーションの各種設定についても従来の経験や慣習を元に、それらのデフォルト値を定めています。このようにある種独断でデフォルト値が決まっているおかげで、開発者の意見をすべて取り入れようとした自由過ぎるWebアプリケーションのように、開発者が延々と設定ファイルを設定して回らずに済みます。

というものがある.

セットアップ

Rubyのインストール

既存でインストールしている場合もあるので確認してみましょう.

$ ruby -v

以下のような表示があればインストールされています.

ruby 2.5.0

大体のmacユーザー(Homebrew)は以下のコマンドでインストールができます.

$ brew install ruby

それ以外の方や,わからない方は以下の参考リンクから調べてみてください.

参考:Rubyのインストール

※Windowsで作業する場合は、Ruby Installer Development Kitもインストールすべきだそうです.また,SQLite3データベースのインストールも必要です。

$ sqlite3 --version

これでRubyのインストールはできたと思います.続いてRailsのインストールをしていきます.

Railsのインストール

Railsをインストールするには、gem installコマンドを実行します.以下のコマンドで実行可能です.

$ gem install rails

正常にインストールできたか確認するために以下のコマンドを実行しましょう

$ rails --version

実際にプロジェクトを作成してみる

Railsガイドにしたがってアプリケーションを作成していきましょう.
詳細はリンクから確認して,実際に試してみてください.
以下では自分が気になったことや,つまりそうなポイントを説明していきます.

Railsの基本要素(MVC)

アプリケーションを作成する上で基盤となる3つの要素についておさらいします.
3つの要素は,
Model : データ周り,データベースとのやり取り
View : 見た目(UI),ユーザーの見える部分を管理
Controller : ModelとViewのやりとり,ユーザーからのリクエストを受け取り、モデルとビューに役割分担する

参考:RailsにおけるMVC(モデル/ビュー/コントローラ)
参考:RubyOnRailsにおけるMVCの流れ

Controllerを介して,Viewの表示が決められます.
したがって,ControllerとViewは最低限必要で,Modelはなくても表示を行うことが可能です.

ルーティング

ルーティングとは,簡単にいうとURLの割り振りです.
他のQiitaでは以下のように紹介されています.

Railsアプリケーションのコントローラへ指示を出すための道筋

config配下にあるroutes.rbに記述することで設定が可能です.
ルーティング時に覚えておきたいことは主に3つあります.

  • resourcesという概念
  • 1つのコントローラに対して複数のルーティングがあるのはよくあること
  • Controllerは複数形で,Modelは単数形で定義する
  • 各コントローラに対してアクションを定義する
  • root:アクセスして一番最初のコントローラへの指示

以下に詳しい説明をしていきたいと思います.

Resourcesとは

Resourcesの前にまずRESTという概念を理解する必要があります.

RESTとは

他のQiitaでは以下のように紹介されています.

REST(REpresentational State Transfer)の略称で、Webサービスの設計モデルです。RESTなWebサービスは、そのサービスのURIにHTTPメソッドでアクセスすることでデータの送受信を円滑に行います。

また別の他のQiitaでは以下のように紹介されています.

RESTとは、アプリケーションを構成するコンポーネント(Userなど)を、
・RDBMSのCRUD(Create/Read/Update/Delete)
・HTTPRequestの各メソッド(GET/POST/PUT/DELETE)
に対応させて、自由に作成/読み出し/更新/削除できるもの(リソース)として扱うアーキテクチャ。

本題のresourcesについてですが,resourcesはRailsで基本となる7つのアクションへのルーティングを定義する際に用います.
実際の例をみてみましょう.

routes.rb
Rails.application.routes.draw do
  resources :コントローラー名
  resources :コントローラー名, only: [:アクション名, :アクション名, ...]
  resources :コントローラー名, except: [:アクション名, :アクション名, ...]
end

resourcesを使えば基本アクションの7つ(index/new/show/create/edit/update/delete)を一括に定義できます.
また,onlyexceptを使って指定したアクションだけを指定することもできます.
resourcesの仕組みがRESTの考え方に一致したものとなっています.

Controllerについて

先ほども述べましたが,Controllerは複数形でファイルを作成します.
以下のコマンドでターミナルなどからも簡単に作成できます.

$ rails generate controller Hoges

コントローラでは,アクションの定義を行ったり,必要なデータの取得や変数の定義を行います.
簡単な例を見てみましょう.

class HogesController < ApplicationController
  def show
    @インスタンス変数 = ...
  end

  def new
  end
end

上記の例だとViewは以下のようなディレクトリ構成になります.

Views
  ┗ Hoges
    ┗ show.html.erb
    ┗ new.html.erb

(余談ですが,ここのerbとはERB言語を表しており,HTMLにRubyを埋め込むよう設計されています.)
routes.rbで以下のようにルーティングがされていれば

routes.rb
Rails.application.routes.draw do
  // hogesのルーティング
  resources :hoges
end

ローカルサーバー(http://localhost:3000/hoges/show or http://localhost:3000/hoges/new)で動作が確認できるはずです.

Modelについて

Railsのモデルは,単数形の名前を持ち,対応するデータベーステーブル名は複数形で表されるというルールがあります.
コントローラ同様,以下のコマンドでターミナルなどからも簡単に作成できます.

$ rails generate model Hoge [カラム名]:[データ型] [カラム名]:[データ型]

モデルではデータベースとのやり取りを行うので,データベース用のテーブル作成が必要であり,コマンドの後半がそれにあたります.
データベースへの追加,更新をするのがマイグレーションです.

モデルにまつわる参考記事を以下に置いておきます.

参考:Railsのmodelを徹底解説!知っておくべき3つの知識も紹介

マイグレーションとは

rails generate modelを実行すると、データベースマイグレーションファイルがdb/migrateの配下に作成されます.
マイグレーションを実行するには以下のコマンドを実行する必要があります.

$ rails db:migrate

Railsをやっていると,よく以下のようなエラーに出くわします.

bin/rails db:migrate RAILS_ENV=development

Error:[rake --tasks] rake aborted!
Gem::LoadError: You have already activated rake 12.0.0, but your Gemfile requires rake 13.0.1. Prepending `bundle exec` to your command may solve this.
    ・
    ・
    ・

これは,マイグレーションができておらず,データの不整合がある時に出るエラーのようで,マイグレーションを実行することでエラーを取り除くことができます.

ViewとLayoutの概念

Viewは静的で問題なければ,HTML/CSSがかければ問題ない気もします.
ただ,データのやりとりなど動的な仕組みが必要であれば,rubyをうまく使って書くほかありません.
この時,よく利用するのがrenderというメソッドです.
renderについては以下の記事が参考になると思います.

参考:忘れがちなrenderメソッドの使い方まとめ [Rails]

HTMLのなかにrubyを記述する際は

index.html.erb
<%= 〜 %>
<% ~ %>

が基本となります.詳しくは以下の記事が参考になると思います.

参考:テンプレートの中でRubyコードを使う

また,layoutという概念があり,とても便利になっています.
コントローラ内でlayoutを指定することで,Viewの基盤を作成することができます.
簡単な例を見てみましょう.

hoges_controller.rb
class コントローラ名 < ApplicationController
  layout 'レイアウトファイル名'

  def アクション名
  end
end

指定するlayoutの定義はapp/views/layouts/任意の名前.html.erbでレイアウトを用意し、コントローラ毎にどのレイアウトを使用するのかを指定することができます.

こちらも詳しくは以下の記事が参考になると思うのでよかったら見てみてください.

参考:コントローラやアクション毎に使用するレイアウトを切り替える

個人的にRubyでつまづいたところ

  • web開発ならではのルーティング処理(ファイル名の命名規則とディレクトリ構成で勝手に決まっているのが理解できなかった)
  • 変数の定義と宣言が一律(C#のように宣言と定義とかが明言されていない気がして困惑した)
  • synbolという概念(別記事で書きたいが変更不可能な1つのオブジェクト)(参考リンク)

おわりに

最後まで見てくだりありがとうございます.
本当はまだまだ書き足りないのですが,1つの記事にしては長くなりすぎている気がするので続きは別記事に書きたいと思います.
振り返ってみるとRubyってめっちゃ理にかなっているものだなと思いました.
最近Nuxt/Vue.jsでの短期開発もしたので今度比較した記事も書いてみたいと思います.

参考になりそうなリンク集(別記事で紹介したい記事一覧)

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3