はじめに
1年くらい前にProgateでRubyを少しだけ触っていた自分が,バイトで1ヶ月バリバリのRubyの環境で(知らなかった)学んだ話の備忘録.
実装環境
macOS Catalina 10.15.4
ruby 2.6.3
Rails 6.0.2.1
参考リンク
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つのアクションへのルーティングを定義する際に用います.
実際の例をみてみましょう.
Rails.application.routes.draw do
resources :コントローラー名
resources :コントローラー名, only: [:アクション名, :アクション名, ...]
resources :コントローラー名, except: [:アクション名, :アクション名, ...]
end
resources
を使えば基本アクションの7つ(index/new/show/create/edit/update/delete
)を一括に定義できます.
また,only
やexcept
を使って指定したアクションだけを指定することもできます.
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
で以下のようにルーティングがされていれば
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
を記述する際は
<%= 〜 %>
<% ~ %>
が基本となります.詳しくは以下の記事が参考になると思います.
また,layout
という概念があり,とても便利になっています.
コントローラ内でlayoutを指定することで,Viewの基盤を作成することができます.
簡単な例を見てみましょう.
class コントローラ名 < ApplicationController
layout 'レイアウトファイル名'
def アクション名
end
end
指定するlayout
の定義はapp/views/layouts/任意の名前.html.erb
でレイアウトを用意し、コントローラ毎にどのレイアウトを使用するのかを指定することができます.
こちらも詳しくは以下の記事が参考になると思うのでよかったら見てみてください.
参考:コントローラやアクション毎に使用するレイアウトを切り替える
個人的にRubyでつまづいたところ
- web開発ならではのルーティング処理(ファイル名の命名規則とディレクトリ構成で勝手に決まっているのが理解できなかった)
- 変数の定義と宣言が一律(C#のように宣言と定義とかが明言されていない気がして困惑した)
- synbolという概念(別記事で書きたいが変更不可能な1つのオブジェクト)(参考リンク)
おわりに
最後まで見てくだりありがとうございます.
本当はまだまだ書き足りないのですが,1つの記事にしては長くなりすぎている気がするので続きは別記事に書きたいと思います.
振り返ってみるとRuby
ってめっちゃ理にかなっているものだなと思いました.
最近Nuxt/Vue.jsでの短期開発もしたので今度比較した記事も書いてみたいと思います.