必須知識ノート【Ruby on Rails】
[ Updated at 2020/9/19 ]
Ruby on Rails

はじめに

この記事では、Railsに関わる必須知識を引き出し式でまとめていきたいと思います。

「あのコマンドでなんだっけ?」、「この言葉ってどういう意味なんだろう?」というようなことをまとめていきます。

また、知識を得たタイミングで少しずつ更新していきたいと思います。

コマンドリスト

1. Rubyのバージョン確認方法

$ ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-darwin18]
$ ruby --version
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-darwin18]

2. Railsのバージョン確認方法

$ rails -v
Rails 6.0.3.2
$ rails --version
Rails 6.0.3.2

3. Railsサーバー起動方法

$ rails server
=> Booting Puma
=> Rails 6.0.3.2 application starting in development 
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.5 (ruby 2.5.5-p157), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000
Use Ctrl-C to stop

4. Gemのイントール方法

例として、bundlerをインストールしてみます(バージョンは-vで指定)。

$ gem install bundler
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Done installing documentation for bundler after 4 seconds
1 gem installed

$ gem install bundler -v "2.1.4"
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Done installing documentation for bundler after 4 seconds
1 gem installed

5. 起動しているRailsサーバーを落とす方法

サーバーを起動した状態で、terminalを閉じてしまうと起動したままになってしまいます。

そのため、Ctrl-Cでサーバーを落とすことができなくなります、そこで、もう一度rails serverでサーバーを起動させようとすると、以下のようなエラーが出ます。

$ rails s
=> Booting Puma
=> Rails 5.2.2 application starting in development 
=> Run `rails server -h` for more startup options
A server is already running. Check /Users/xxx/yyy/zzz/tmp/pids/server.pid.
Exiting

こういう時は、以下のようにして起動しているRailsサーバーを検知して、落とす(kill)することができます。まずlsofコマンドで起動しているサーバーを表示します。そして、そのサーバーのPIDをkillすれば完了です。

$ lsof -i:3000
COMMAND   PID             USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ruby    19876 masumi.morishige    8u  IPv4 0x9r93h9dc4t82g67d      0t0  TCP *:hbci (LISTEN)
$ kill -9 19876

大切な用語辞典

1. Rakeとは?

Rakeとは、「Railsにおけるビルドツール」です。

この時、rakeコマンドを用いて、「設定ファイルに記述された作業の実行」を行なっています(rails v5以降のみ)。例えば以下のようなコマンドがあります。

$ rake db:create

ちなみに、上記のコマンドは、以下のコマンドで代替えすることも可能です。

$ ./bin/rails db:create

./binフォルダにあるrailsというファイルがビルドを行うための処理が記述されているため、ほぼ同義と考えていいでしょう。ただし、generateコマンドなどは、rakeでは実行できません。./bin/railsファイルの中身は以下の通りです。

#!/usr/bin/env ruby
begin
  load File.expand_path('../spring', __FILE__)
rescue LoadError => e
  raise unless e.message.include?('spring')
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'

【参考:Railsのrakeってなんぞ?】

2. Bundleとは?

Bundlerとは、「gemのバージョン管理gem」です。

以下のように導入とバージョン確認を行うことができます。

$ gem install bundler
Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Done installing documentation for bundler after 4 seconds
1 gem installed

$ bundler -v
Bundler version 2.1.4

【参考:Bundlerとは?】

3. Gemとは?

Gemとは、「Rubyにおけるパッケージ(ライブラリ)」です。

パッケージ管理システムのことをgemと言ったりすることもあります。

【参考:Rubyのgemとは?概要から使い方までの解説まとめ】

4. CRUDとは?

CRUDとは、「Create, Read, Update, Deleteの頭字語(Acronym)」です。

それぞれ以下のようにデータに対する処理になります。

・Create:作成

・Read:読み取り

・Update:更新

・Delete:削除

5. MVCとは?

MVCとは、「Model, View, Controllerの頭字語(Acronym)で、Webフレームワークの基本概念の一つ」です。

それぞれ以下のような役割を持っています。

Model(モデル)

システムの設計や機能の定義を行うグループです。

以下のような役割を持っています。

・データベースとやり取りを行う機能

・データの変換機能

View(ビュー)

ユーザーに対して情報を表示したり、ユーザーの入力を受け取るグループです。

以下のような役割を持っています。

・動的にデータをブラウザに表示する機能

・ユーザーに入力フォームを提示して、データを受け取る機能

Controller(コントローラー)

ユーザーの入力に基づきモデルとビューを制御するグループです。

以下のような役割を持っています。

・ユーザーから来たリクエスト(URLへのアクセス)を受け取る機能

・リクエストに応じて、Modelを経由して、データベースからデータを取得する機能

・Modelから受け取ったデータをViewへ渡す機能

・生成されたHTMLをクライアントへ渡す機能

全体のフロー

具体的なデータややり取りの流れは以下のようになっています。

MVC

【参考:MVCモデルとは!概念やそのメリットをわかりやすく解説!】

6. Scaffoldとは?

Scaffoldとは、「MVC(Model, View, Controller)とルーティングの作成などをまとめて行なってくれる超便利コマンド」です。直訳すると「建築現場における足場」のような意味になります。

正直開発現場ではあまり使われませんが、個人開発でサクッと作りたいときには大変便利です。以下のようなコマンドで生成することができます。

$ rails generate scaffold user name:string age:integer

7. ミドルウェアとは?

ミドルウェアとは、「アプリケーションとOSの中間に存在する処理を実行するサーバー」です。

まずコンピュータは、以下のような構成要素でできています。

MVC

具体的には、ミドルウェアとは、Webサーバ、アプリケーションサーバ、データベース管理サーバなどを表します。MVCのモデルを拡張した図は以下のようになります。

MVC

この他にも、システム運用ミドルウェア(バックアップ、ジョブ運用の効率化、システムの監視、高可用性クラスタによる冗長化など)が存在します。

【参考:ミドルウェアとは?役割や機能、種類をわかりやすく解説!】

umi-mori