Ruby on Rails まとめ①
フレームワーク
Webアプリケーションを作成する際に用いられる枠組み。フレームワークでアプリケーションの雛形を作成し、必要なファイルをカスタマイズして、
アプリケーションを作成する。必要なファイルやデータの流れを既に一つのセットとして用意してくれているフレームワークを用いれば、素早く、
Webアプリケーションを開発できる。
フレームワークの種類
Ruby: Ruby on Rails(ルビーオンレイルズ)、Sinatra(シナトラ)
PHP: Laravel(ララベル)、CakePHP(ケイクピーエイチピー)
Java: Spring Framework(スプリングフレームワーク)
Ruby on Railsの特徴
RailsはRubyにおける最大シェアのフレームワーク。
コードの調査も非常に容易、記述量が短くシンプル、メンテナンスが容易。
処理速度は速くないため、大規模サービスには不向き。
・rails new コマンド
Railsで新規アプリケーション作成時に使用。
# オプションを付けてアプリケーションを作成
$ rails new アプリケーション名 -オプション名
・MySQL
データを保存するデータベースの一種。rails newコマンドに「-d mysql」
というオプションを付けて、「MySQL」というデータベースに最適化された設定でアプリケーションを生成。
ターミナル
# projectsディレクトリの作成
$ mkdir ~/projects
# projectsディレクトリに移動
$ cd ~/projects
# Railsのバージョン5.2.3を用いて、「アプリ名」を「-d」オプションでMySQLを指定して作成。
$ rails _5.2.3_ new アプリ名 -d mysql
# 作成したディレクトリに移動
$ cd アプリ名
# 現在のディレクトリのパスを表示
$ pwd
# 関連ファイルが読み込まれていることを確認する
$ bundle install
データベースを作成
・rails db:createコマンド
新しくデータベースを作成。database.ymlというファイルの内容に基づいてデータベースを新規作成するという機能。
・database.ymlファイル
database.ymlにはデータベースの設定を記述します。
config/database.yml を確認。
~省略〜
# 開発環境。通常、開発をする際に使用する。
development:
<<: *default
database: second_app_development
~省略~
# テスト環境。アプリケーションの動作をテストする際に使用する。
test:
<<: *default
database: second_app_test
~省略~
# 本番環境。アプリケーションを実際にリリースする際に使用する。
production:
<<: *default
database: second_app_production
username: second_app
password: <%= ENV['SECOND_APP_DATABASE_PASSWORD'] %>
ターミナル
# データベースの作成。開発環境用とテスト環境用のデータベースが作成される。
$ rails db:create
Sequel Pro(シークエル・プロ)
データベースの中身をわかりやすく視覚化して表示するアプリ。
データベースをより簡単に管理できる。Sequel Proダウンロード。
Sequel Proをアプリケーションフォルダにドラッグ&ドロップ。
Sequel Proを起動後、接続をクリック。
左上の データベースを選択 をクリック。
作ったアプリ名を確認。
・rails s コマンド
アプリケーションのディレクトリで実行すると、サーバーが立ち上がる。
開発者がPC上でアプリを利用するためのもので、ローカルサーバーと呼ぶ。
ターミナル
# ローカルサーバーを起動
$ rails s
# ターミナルの表示一番下に Use Ctrl-C to stop が記述。
# サーバーを停止・終了させるコマンド。
ターミナル:command[⌘] + Tを同時押しで、新規タブを開く。
別タブでサーバーを起動しながらもう一つのタブでコマンドを実行できる。
・localhost:3000
localhostとは「自分のPC」。
開発中なので自分のPC内にサーバーを立ち上げている。
Google Chromeで開く。http://localhost:3000。下記で成功。
・MVC(エム・ブイ・シー)
モデル・ビュー・コントローラーの頭文字。
Webアプリケーションシステムの処理の流れの総称。
・ルーティング
リクエストの行き先を指定する「道しるべ」。
リクエストに対応した行き先を定義します。
トップページへのルーティングを作成
config/routes.rb
Rails.application.routes.draw do
[HTTPメソッド] '[URIパターン]', to: '[コントローラー名]#[アクション名]'
end
・HTTPメソッド
GET ページを表示する操作のみを行う時
POST データを登録する操作をする時
PUT データを変更する操作をする時
DELETE データを削除する操作を行う時
・URIパターン
URLのようなもの。URL等の総称。
・コントローラー
ルーティングの次にやってくる処理。
・アクション
コントローラー内の、処理のカテゴリー。ルーティングは「何のリクエスト」=>「どのコントローラー・アクション」に繋げるのかを設定するもの。
config/routes.rb
# 下記に編集。URLは http://localhost:3000/posts になる。
# postsコントローラーのindexアクションへ。
Rails.application.routes.draw do
get 'posts', to: 'posts#index'
end
・rails routes コマンド
アプリケーションのルーティングを確認できる。
ターミナル
# アプリのディレクトリにいることを確認
$ pwd
# ルーティングを確認
$ rails routes
rails routesの実行結果
Prefix Verb URI Pattern Controller#Action
posts GET /posts(.:format) posts#index
アクセス
rails s でサーバを立ち上げ、 http://localhost:3000/posts にアクセス。
uninitialized constant PostsController とエラーになる。
ルーティング後のコントローラーが設定されてないというエラー。
コントローラー設定
・7つのアクション
index 一覧表示ページを表示
new 新規投稿ページを表示
create データの投稿を行う
show 個別詳細ページを表示
edit 投稿編集ページを表示
update データの編集を行う
destroy データの削除を行う
・rails g controller コマンド
# gは英語で生成するを意味するgenerate。
$ rails g controller コントローラー名
# コントローラーを作成。app/controllers/posts_controller.rbを確認。
$ rails g controller posts
indexアクションを定義
app/controllers/posts_controller.rb を編集
class PostsController < ApplicationController
def index # indexアクションを定義
end
end
再度 http://localhost:3000/posts にアクセスするとビューファイルが無いエラー。ActionController::UnknownFormat in PostsController#index が出る
・ビュー
ビューはレスポンスとして返す見た目を設定する。コントローラーのアクションで処理された後に、対応するビューを探しレスポンスとして返す。
・ビューファイル
app/views/コントローラー名に、アクション名.html.erbのファイル名で作成
・○○.html.erb ファイル
HTMLの記述方法に加え、Rubyのコードを埋め込むことができるファイル。
コントローラーからビューファイルへデータを渡す仕組み
コントローラーで定義したインスタンス変数は、ビューファイルで使用できる。postsコントローラーのindexアクションでのインスタンス変数であれば、postsディレクトリのindex.html.erbでインスタンス変数を使用できる。
・ERBタグ
ERBファイルでRubyの記法を使用するためのタグ。 <%= %> で囲う。
画面上に非表示で良い記法(if文など)は、=を抜いて <% %> で囲う。
・モデル
データベースへアクセスをはじめとする情報のやりとりに関する処理を担当
テーブルの分だけ、モデルが存在します。
・テーブル
データベース内に作成される、表形式の収納場所。
・レコードとカラム
行はレコード、列はカラム
モデル作成
・rails g model コマンド
ターミナル
# モデルやそれに付随するファイルを一度に作成してくれる。
$ rails g model モデル名
$ rails g model post # モデルを作成する
・マイグレーションファイル
テーブルの設計図・仕様書
・カラムの「型」
カラム名を指定し、どんなデータが入るのかを示す「型」も指定する。
どのような型か 用途
integer 数字 金額、 回数など
string 文字(短文) ユーザー名、メールアドレスなど
text 文字(長文) 投稿文など
boolean 真か偽か はい・いいえの選択肢など
datetime 日付と時刻 作成日時、更新日時など
・rails db:migrate コマンド
マイグレーションファイルの記述内容を、データベースに適用するコマンド
ターミナル
# マイグレーションを実行する
$ rails db:migrate
Sequel Pro 内でpostsテーブルを作成できたかを確認。
マイグレーションファイルに記載した、contentカラムが追加されたか確認。
手動でデータの入力もできる。
テーブルからのデータ取得
・ActiveRecord クラス
all テーブルの全てのデータを取得する
find テーブルのレコードの内、ある1つのデータを取得する
new クラスのインスタンス(レコード)を生成する
save クラスのインスタンス(レコード)を保存する
create テーブルにレコードを追加する
Post.all
# => Postモデル(postsテーブル)の全てのデータを取得
Post.find(2)
# => Postモデル(postsテーブル)の2番目のデータを取得
・rails c コマンド
実際に記載するメソッドを練習できる機能。rails cを起動すると、
コンソールで操作が可能になります。rails cのcはconsoleのc。
irbが起動して、Rubyのコードが書ける。
コンソール終了は、exitと入力してenter。
# コンソールの起動
$ rails c
# Postモデルから全てのデータを取得
irb(main):001:0> Post.all
# Postモデルから1番目のデータを取得
irb(main):002:0> Post.find(1)
# 代入も可能。変数postに1番目のデータを代入
irb(main):003:0> post = Post.find(1)
# post実行で、代入したデータが表示
irb(main):003:0> post
# contentカラムのみを表示
irb(main):003:0> post.content
app/controllers/posts_controller.rb を編集。
class PostsController < ApplicationController
def index
@post = Post.find(1) # 1番目のレコードを@postに代入
end
end
app/views/posts/index.html.erb を編集。
# postテーブルの一番目のレコードのcontentカラムの値を表示する。
<h1>トップページ</h1>
<%= @post.content %>
app/controllers/posts_controller.rb を編集。
class PostsController < ApplicationController
def index
@posts = Post.all # 全レコードを@postsに代入
end
end
app/views/posts/index.html.erb
# postデーブルの全レコードからcontentカラムの値を順番に表示
<h1>トップページ</h1>
<% @posts.each do |post| %>
<%= post.content %>
<% end %>