はじめに
みなさん、こんにちは torihaziです。
今回は 2週間くらい前から Ruby on railsを学習しています。
ちゃんとしたフレームワークを学ぶのは
これが初めてになりますがなんとかノリでやっていこうと思います!
今回はいつもとテイストを変えて
授業のノートのように 不明点や詰まったところを中心に
1章1章まとめていこうかと思います。
丸パクリだけは気をつけて頑張ります!
それでは ltg
- はじめに
- 学習したこと
- 終わりに
参考書籍
現場で使える Ruby on Rails 5速習実践ガイド | 大場寧子, 松本拓也, 櫻井達生, 小田井優, 大塚隆弘, 依光奏江, 銭神裕宜, 小芝美由紀 |本 | 通販 | Amazon
学習したこと
1章 Rails の前に Rubyを学ぶ
全てがオブジェクト
オブジェクトとは、現実世界の物理的なモノから抽象的な概念をプログラミングで扱えるように考えだされたもので
データ(値)や処理(メソッド)を格納して随時呼び出すことができます。
Rubyでは オブジェクトの種類として 文字列、数値、配列、シンボル、範囲・・など多くのオブジェクトが元から用意されており
それぞれに固有のメソッドが付与されています。
メソッドとは
上でメソッドというものを前触れもなく記載しましたが、私は次のように理解しました。
メソッドとは対象の振る舞いを決めるもので、他言語でいう関数に相当するものです。
メソッドの中にも種類があり、Rubyがあらかじめ用意している組み込みメソッドや開発者が新しく作ったメソッドなどがあります。
Rubyにおいてメソッドは オブジェクトに作用させることで効果を発揮します。
使用方法は object.method
というように ".(ドット)"を付与することで機能します。
このメソッドを持つオブジェクトのことをレシーバと呼びます。
null ではなく nil
SQLでは何もないことを Nullと表現しますが、Rubyでは nilを使用します。
これもまたオブジェクトです。
if
Rubyにおける真偽を確かめる方法に if 文がありますが、
Rubyは 0 も true扱いになります。
falseになるのは nil か falseのみです。
間違えないようにしましょう。
キーワード引数
与える引数の意味を一目でわかるように設定するものです。
また与える引数の順番を気にしなくて良くなるので、
デフォルト引数を使用している際は、デフォルト引数をはじめの方に寄せなければならないということをしなくて良くなります。
クラスとモジュール
クラスもモジュールも何かをまとめたものでありますが、
クラスがオブジェクトのあれこれをまとめたもので
モジュールはメソッドをまとめたものになります。
ただモジュールはクラスのようにインスタンス化することはできず
用途としては複数オブジェクト間で共通の処理を使いたいときに使用します。
Rubyは複数の親を継承する多重継承をすることができないので
モジュールを使ってこの問題点を解決します。
使用する際は includeメソッドを使用します
& ぼっち
使用方法に癖がありますが、これを使用することで
レシーバがnilであってもエラーを返さなくなります。
ログイン時のcurrent_userなどを使用する際に真価を発揮しそうです。
2章 Rails アプリを覗く
Railsアプリの雛形作成
作業用のフォルダで下記コマンドを実行することで Railsアプリの雛形を作成することができます。
rails new アプリ名 [-d データベース名 ]・・・
データベースを作成
Railsアプリで使用するデータベースを作成するためには次のコマンドを実行します。
bin/rails db:migrate
rails ではなく bin/railsコマンドを使用することで、Gemfile通りのgemを利用できる環境でコマンドを実行できます。
開発用サーバ起動
Railsアプリをブラウザで確認するために使用する開発用サーバは下記コマンドで起動できます。
bin/rails s
MVC
MVCというのは Model 、View、 Controllerの頭文字をとったものです。
UIがあるアプリケーションを作る際の設計手法、概念のことです。
- データベースとのやりとりを司る Model
- モデルやビュー、リクエスト、レスポンスなど色々なところとのやりとりを司る Controller
- アプリの見せる部分の生成を司る View
3章 アプリ作成の準備
データベースは環境ごとにある
データベースとはデータを保存するところです。
しかし開発をする上でデータには複数の種類が存在します。開発用のデータ、テスト用に作ったデータ、本番運用していく中で蓄積されたデータです。
これらを分けるためにデータベースも分ける必要があります。Railsは3種類のデータベースがあります。
- 開発環境 - development
- テスト - test
- 本番 - production
テンプレートエンジン
アプリはユーザに見せる画面を最終的にHTMLで表現します。
Railsでのビュー開発はテンプレートエンジンを使用して行うと開発を進めやすくなります。
デフォルトは ERBですが、そのほかにもHamlやSlimがあります。
モデルの雛形作成
モデルを作成するためには下記コマンドを実行します。
bin/rails g model [モデル名] [属性名: データ型・・・]
マイグレーション
データベースへテーブルを追加するためにはマイグレーションを使用する。
データベースへの変更の1つ1つを rubyのプログラムとして行います。
また状態の履歴を追うことができます。
下記コマンドでマイグレーションを実行することができます。
bin/rails db:migrate
コントローラとビュー
モデル作成と同様にジェネレータを使用して下記コマンドで作成することができます。
bin/rails g controller コントローラ名 [アクション名 アクション名 ・・・]
このようにすることでアクション名と同名のビューが作成されます。
link_to メソッド
HTMLにおいてaタグの要素を出力するためのメソッドで下記の書式です。
link_to 'リンク名', リンク先のURL, a 要素につける属性指定
Flashメッセージ
redirect_toに渡すことができるメッセージのことです。
次のリクエストに対して少しのデータを渡すためにRailsが用意している仕組みです。
パーシャル
ビューファイルで重複しているレイアウトを部品化して使いまわせる仕組みのことです。
パーシャルテンプレートのファイル名は先頭にアンダーバーを付与します。
4章 現実の複雑さに対応する
モデルに制約を
データベースのカラムに制約をつけることができます。
非ヌル制約は null: falseを
文字列長さは limit: 長さを
一意制約は unique: trueをマイグレーションファイルに設定します。
バリデーション
データを保存するときに保存するデータを検証する必要があります。
その検証のことをバリデーションといい、モデルファイルに下記を追記することで設定できます。
- 必須か - presence: true
- 文字列の長さは - length { maximum: 30 } など
セッション
サーバ上に保存する小さな情報もしくはその領域のことです。
HTTPプロトコルはステートレスであるためCookieを使用してログインというものを実現することができます。
Cookie
セッションとは異なりブラウザ側に保存する小さな情報もしくはその領域のことです。
複数リクエストの間で状態の保存をすることができます。
5章 テスト
RSpec
Railsのminitestと同じようなテストフレームワークのことです。
動く仕様書という発想で作られているそうです。
Capybara
Rspecと組み合わせて使用します。ブラウザ操作をシュミレーションできたりjavascriptの動作までテストすることができます。
人が行う操作をコード化して実現するというイメージです。
FactoryBot
テスト用のデータを作成することができるgemです。
Fixtureという仕組みもありますが、Factorybotの方が便利だそうです。
ログインという操作をコード化
ログイン操作は下記のようなコードで実現可能です。
visit login_path fill_in 'メールアドレス', with: 'a@example.com' fill_in 'パスワード'm with: 'password' click_button 'ログインする
直感的に何をしているかがわかります。
6章 Railsの全体像を理解する
ルーティング
ルーティングとはクライアントからこのURLでリクエストが来たらどのコントローラのどのアクションを呼び出すかを決定させるものです。
書き方としては次のようなものがあります。
get '/login', to: 'sessions#new' resources : tasks
Strong Parameters
コントローラでリクエストパラメータを受け取る際に、想定外の値を受け取らずおかしい処理をしないようにするための仕組みです。
アセットパイプライン
Javascript、CSS 、画像を効率的に配信する仕組みです。
主な機能としてはコンパイル、アセットの連結、アセットの縮小圧縮、ダイジェストの付与です。
ブラウザにアセットを読み込ませる
Rails ではCSSを読み込むためにstylesheet_link_tag
を、Javascriptタグを読み込むにはjavascrupt_include_tag
というヘルパーメソッドを使います。
マニフェストファイル
アセットパイプラインにおいてファイルをどのように連結して出力するのかを記述したファイルです。
app/assets/application.cssやapp/assets/application.jsといったものが該当します。
sass-rails gemが有効なら Sassでマニフェストファイルを記述できます。
application.js
記載方法は次のようなものがあります。
- require 指定したjavascrptの内容を記述した位置に取り込みます。拡張子は省略可能です。
- require_tree 指定したディレクトリは以下の全ファイルの内容を結合し、記述した位置に取り込みます。
application.css
記載方法はSassということで @import で記述します。
プリコンパイル
production環境でアプリケーションを動かすために必要です。
あらかじめアセットパイプラインを実行して静的ファイルを生成する処理のことです。
下記コマンドで実行できます。
bin/rails assete:precompile
master.key
本番環境でアプリを利用する場合、Railsが同環境の秘密情報を複合するために利用する鍵です。
config/master.key もしくは 環境変数 RAILS_MASTER_KEYです。
本番環境でサーバ起動
下記コマンドです。
bin/rails s --environment=production
credentials.yml.enc
マスターキーによって暗号化された秘密情報のことです。
実物は config/credentials.yml.encにあります。
参照する場合は bin/rails credentials:show
です。
編集する場合は bin/rails credentials:edit
です。
絶対に紛失しないようにしましょう。
7章 機能追加
ransack
検索機能を追加するためのgemです。ransackメソッドが追加され検索することができます。
search_form_forメソッドを使って、検索用のフォームを追加できます。
またソート機能もついており、sort_linkヘルパーを使うことで可能になります。
メーラー
Railsではメールを送るためにAction Mailerという機能があります。
メーラーを作成するには下記コマンドです。
bin/rails g mailer メーラー名
deliever_nowメソッドを使うことで即時送信を行うことができます。
メーラーの動作確認
mailcatcher というgemを利用します。
使用方法は mailcathcer というコマンドを実行してから実際にメールを飛ばすという感じです。
Active Storage
画像ファイルを管理するために必要なgemです。
クラウドストレージへファイルをアップロードしてActiveRecordに紐づけることをしています。
下記コマンドでインストールできます。
bin/rails active_storage:install
そのあとマイグレーションファイルが作成されるので db:migrateします。
ページネーション
ページネーションは kaminari というgemをインストールします。
8章 javascript
こちらは後日学習するので飛ばします。
9章 チーム開発
こちらは gitに関することだったので飛ばします。
終わりに
かなり超大作でした。
この書籍は rails 5対応なので、個人環境でrails 7で書き直してみましたが
bootstrapの箇所など 挙動が異なる箇所が多かったので
詰まりながら調べながらでなかなか苦戦しました。
これからのアウトプットで入れたものを出して、
足りなければまた入れてを繰り返して定着を図っていきたいと思います。
まだまだ道は長いですが、頑張りましょう。
僕も頑張ります。