Ruby

はじめてのRailsアプリケーション開発 メモ

1+

Railsアプリケーションの簡単な開発の流れをすぐに思い出せるように、メモ書きとして残しておこう。

開発環境

Ruby2.3以上
Rails5.0以上
DB:MySQL5.7
GUIツール:Sequel Pro
開発環境:development

新規アプリケーション作成

ターミナルを起動して、「rails new」コマンドを入力

gemを追加したい場合は、Gemfileへ移動してgemを追加して、インストールする

新米ながら、当時使っていたgemをまとめてみた

データベース作成

Sequel Proでデータベースの中身を確認
※ソケット接続が失敗しました!とエラーが出た場合は、下記をターミナルでコマンドし、MySQLを再起動

モデル・テーブル作成

モデル作成

まずはモデルを作成

モデルやテーブルには命名規則があるので、モデルを作成する際はモデル名に注意する。

【モデルの命名規則】

種類 概要 名前
モデルクラス名 先頭は大文字、単数形 Tweet
モデルクラスのファイル名 先頭は小文字、単数形 tweet.rb
テーブル名 先頭は小文字、複数形 tweets

モデルを作成すると、migrationファイル(テーブルの設計図)が生成される。

テーブル作成

migrationファイル:テーブルの設計図。ここに必要なデータの属性等を定義する。

【データ型一覧】

データ型 役割
string 文字列型
text テキスト型(複数行に渡る長文に適している)
integer 整数型
float 浮動小数点型
decimal 固定長整数型
datetime 日時型
date 日付型
time 時刻型
binary バイナリ文字列型(テキストデータ以外のデータ)
https://wa3.i-3-i.info/word1146.html
boolean 真偽値型
references 外部キー

定義付けが完了したら、下記コマンドでmigrationファイルを実行する。

これでテーブルが完成

マイグレーションファイルの記述が間違えてしまった場合は、下記コマンドでmigrationの実行前に戻す。

ファイルを実行前に戻した上で、ファイルを編集し、「(bundle exec )rake db:migrate」をすればOK

ルーティングの設定

■ルーティング:ブラウザから送られてきたHTTPリクエストを、コントローラに送ることで、サーバー側での処理メソッド(アクション)を指定して、実行するよう促す。
⇒ HTTPについては、HTTPの仕組みで確認

routes.rbでリクエストに対するコントローラとアクションを指定

Railsでは、基本的に7つのアクション(処理)を使用する。このアクションの処理方法(メソッド定義)はコントローラーで行う。
HTTPリクエストを処理するということもあり、HTTPメソッドとアクションの役割が似ている。
https://qiita.com/r_fukuma/items/a9e8d18467fe3e04068e

【7つのアクション】

アクション 役割 扱いたいデータとインスタンス変数(Tweetテーブルを例に)
index リソースの一覧を表示する。 @tweets = Tweet.で一覧表示するデータを複数代入
show リソースの内容を表示する。 @tweet = Tweet.find(params[:id]) で表示したいリソースをピンポイントで(idを指定して)取得
new リソースを追加する。 @tweet = Tweet.new これはビュー表示によって変わるが、場合によってはなくても良い
create リソースを追加し、作成する。 Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id など、変数に代入する形ではなく、「.create」メソッドを使用することで、リソースの生成と保存まで完結させてしまう。
edit リソースを更新するためのフォームを表示する。 @tweet = Tweet.find(params[:id]) で編集したいリソースをピンポイントで(idを指定して)取得
update リソースを更新する。 editと同様に、tweet = Tweet.find(params[:id])で更新したデータを取得。条件分岐は自由だが、「.update」メソッドを使用して更新する。
destroy リソースを削除する。 editと同様に、tweet = Tweet.find(params[:id])で削除したいデータを取得し、.deleteで削除。

 

コントローラの作成

■コントローラ:ルーティングから受けたリクエストに基づき、サーバーで処理を実行。

コントローラはApplicationControllerを継承したクラスである。ここではコントローラのクラスに対するインスタンスメソッドを定義していくことになる。これが俗に言われる「アクション」である。

ビューの作成

■ビュー:サーバーで処理した内容をもとに、レスポンスでクライアントに返すHTMLファイルを作成する。つまり、ここにHTMLを記述していく。ユーザー目線で言うと、リクエストを出した後に画面に表れる表示がビュー。

ビューファイルはapp/views/コントローラー名/で新しいファイルを自分で作成する。
→ビューファイルは「コントローラと同じ名前のフォルダ」内にある「アクション名と同じファイル名」のものが適用されるというのがRailsのルールなので作成場所・ファイル名のスペルミスには注意。

レイアウトファイル(views/layouts/application.html.erb)

ビューファイルの中でも一番先に読み込まれるファイル。ヘッダー・フッター・メタデータなど、全てのビューファイルで共通して使用する記述をここで定義しておくことで、同じコードを省略することができる。

<%= yield %>
これはこの部分をlayout以外のディレクトリで記述したビューファイルの内容に置き換えるという意味。

ここまで出来たらrails sでサーバー機動して、動作確認。この状態ではまだHTMLを記述していないので、何もブラウザには出てこないはず。

データをWeb上に表示する

コントローラにビューに表示したい情報を定義する。
→コントローラでよくインスタンス変数(@変数名)が使われるが、これは紐づくモデルクラス・テーブルの中にあるデータ・情報を変数として抽出するために使う特殊な変数。この変数をビューファイルで表示させる際は、HTMLの記述の際に、Rubyタグ(<%= %>)を使って記述する。

【indexアクション(メソッド)のインスタンス変数】

ここでallメソッドが使えるのは、TweetというActiveRecordクラスを継承したモデルクラスに対して
使用するインスタンスメソッドだから。当たり前だが、find/new/save/createといった他のメソッドもTweetというモデルクラスに対してしか使えないメソッド。

【Rubyタグの記述例】

■プロパティ値
=各カラムに保存されている値
「変数.カラム名」でそのインスタンスのプロパティ値を取り出すことができる
上の例でいうと、@tweetというTweetモデルのインスタンスのうち、textカラムに保存されているプロパティ値を取り出している。

複数のデータをビューで表示したい時は、eachメソッドを使って繰り返し処理を行う。

このようにすると、eachメソッドのdoとend(ブロック)で囲まれた<%= tweet.text %>の部分を、@tweetsのレコード(インスタンス)の数だけ繰り返し表示するようになる。

機能の追加(例:createメソッド)

作成手順


①ルーティングの設定
②コントローラで新しくアクション名を定義
③ビューファイルを作って表示させる。

<例(投稿機能の実装)>
①ルーティングの設定

ブラウザからサーバーに入力情報を送信する=postメソッド

②コントローラで新しくアクション名を定義
投稿機能=ユーザーがフォームで入力した情報をレコードとして作成し、テーブルに送り、保存する
作成&保存==createメソッド

これでTweetモデルクラスのインスタンス(レコード)を生成している。
ちなみにインスタンス(レコード)はハッシュの形をしているので、引数にキーと値がそれぞれ入っている

<ポイント>
ユーザーがフォームに入力した値は、コントロール内では「params」という変数に入っている。
ちなみにparamsはハッシュ型のオブジェクト。ゆえにハッシュ型と同様に[:キー名]で値を取得できる。

このparamsのキーは、ビューファイルで記入したinputタグ中のname属性で定義されている。
また、入力された値はパラメーターと、名前を変えてキーと一緒にparamsに入る。

パラメーターを受け取っているparamsから適切なキーを取り出すことで、ユーザーが入力する値をテーブルに保存することができる。

ストロングパラメータ

ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るようにするもの。
これを指定することで、保存したくないデータは保存されなくなる。セキュリティの観点でもストロングパラメータを使用しなければ、アプリケーションに必要ない、余計なデータを保存してしまうことになるので、良くない。permitメソッドで指定のキー名とそのバリューだけを残した新たなハッシュを作っている。

ストロングパラメータを使って、フォームに入力された情報をもとにインスタンス(レコード)を作成し、
テーブルに保存する。

1+
ABOUT ME
chopes
前職では、人材業界で法人営業・キャリアアドバイザー・大阪責任者をしていました。他にも、新入社員の研修策定と育成、面談者の集客におけるスカウト業務や中途採用の面接官、新卒採用の2次選考官、インターンシップのメンターとしてプログラムに参加していました。退職後は、未経験でエンジニアになるためにスクールに通学して勉強。2ヶ月の転職活動を経て、今春からRailsエンジニアとして第二のキャリアを歩むことになりました。主に学習記録や未経験エンジニアについてアウトプットしていきたいと思います! 以下、Twitterアカウントですので、気軽にフォローしてください! Twitter:@chopesu_se