Rails関連のことを調べてみた

Rails関連のことを調べてみた

MVCをレストランに例えてみた

# はじめに
今回はRubyonRailsなどで用いられているMVCというものについて解説していきたいと思います。Railsをはじめ、MVCを採用しているフレームワークは多くあると思います。RailsにおいてはRailsチュートリアルやProgateでも初めの方で解説していることからこの構造を理解しておくことは非常に重要です。今まであまり考えずに使用してきたのであれば、この際詳しく知っておくと良いでしょう。

## MVCとは
ソースコードをそれぞれ
**・モデル(Model)**
**・コントローラー(Controller)**
**・ビュー(View)**

の3つに分割して管理しようという考え方の1つです。それぞれの頭文字を取ってMVCとなっています。

*****
**モデル(Model)**
例えば投稿した人の名前や投稿したテキストなどを保存する際などにデータベースとのやりとりをします。データの登録・更新・削除などの処理を行います。

**コントローラー(Controller)**
モデルにデータ処理の指示を出したり、ビューに画面表示の指示を出したりする指示役です。

**

元記事を表示

HTML, Bootstrapを使ったタブの切り替え機能の実装

この記事はHTMLとBootstrapを使ってタブの切り替え機能を実装したので、実装方法を共有したいと思います。プログラミング学習者の実装なので、間違いなどありましたら教えて頂けると嬉しいです。

コードの全体像
おすすめとフォロー中の2つのタブを用意して、それぞれのタブを押した時にタブ以下の内容表示を切り替えるという機能です。
“`ruby:index.html.slim
.tabs
ul.nav.nav-tabs.nav-fill.sticky-top.blur-bg
li.nav-item
div class=”#{‘active’ if params[:tab] == ‘recommend’} text-center hover-bg py-3 px-2″ type=”button” data-bs-toggle=”tab” data-bs-target=”#for-you”
= link_to ‘おすすめ’, home_index_path(tab: ‘recommend’), class: ‘link’
li.nav-ite

元記事を表示

【Rails】Bulletの導入方法

## Gemをインストール

`Gemfile` に以下のように記述し、 `bundle install` します。

“`ruby:Gemfile

group :development do
gem “bullet”, “~> 7.2”
end

“`

## 設定する

ターミナルで以下のコマンドを実行し、設定を自動生成します。

“`terminal
$ bundle exec rails g bullet:install
Enabled bullet in config/environments/development.rb
Would you like to enable bullet in test environment? (y/n) y
Enabled bullet in config/environments/test.rb
“`

`config/environments/development.rb` と `config/environments/test.rb` に次のような設定が生成されます。

“`ruby:config/environmen

元記事を表示

ログアウトでルーティングエラー

# Routing Errorが起きた

deviseを導入して、ログアウトしようとしたところ、下記のエラーが発生しました

“`
ActionController::RoutingError (No route matches [GET] “/users/sign_out”):
“`

このエラーの原因はアプリを作成したばかりで、javascriptが正常に動作していないことが原因でした

# 原因の確認
ルーティングがあっているか確認
“`
destroy_user_session DELETE /users/sign_out(.:format)    public/sessions#destroy
“`

“`_header.html.erb
<%= link_to destroy_user_session_path, method: :delete, style: "display:flex; align-items: center; flex-direction: column;" %>
“`

path名も正しい、`method: :delete`と記述している

元記事を表示

【Rspec】綺麗に書くを意識し始めたら読んでほしい!

# はじめに

こんにちは、エンジニア3年目の嶋田です。
この記事を開いていただきありがとうございます!

今回の記事では、RSpecの基本的な構文と概念についてまとめました。
最近の業務ではRSpecを使用していますが、
どういうコードが読みやすく綺麗であるのかを最近意識するようになってきました。
(気にするのが遅いですし、まだまだですが…)

その中で、理解しておくといいなと思ったことを自分自身のために備忘録としてまとめました。
よろしければ、最後までお付き合い下さい。

## 目次
– [RSpecとは](#RSpecとは)
– [describe, context, it の使い分け](#describe-context-it-の使い分け)
– [let と let! の違い](#let-と-let-の違い)
– [テストデータと変数の管理](#テストデータと変数の管理)
– [shared_examples の使い方](#sharedexamples-の使い方)
– [まとめ](#まとめ)
– [参考文献](#参考文献)

## RSpecとは
RSpecはRuby言

元記事を表示

【Rails6】[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts:の対処法

## 問題
Rails6で任意のhost名でアクセスしようとした時に、以下のエラーがでます。
“`ruby
[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts: example.com
“`

## 解決方法
Rails6で追加された、ActionDispatch::HostAuthorizationによるものです。
https://github.com/rails/rails/pull/33145

対応方法は以下の3つがあります。
### 1. Rails.application.config.hostsにhostを追加する
development環境では、デフォルトで以下のhostが登録されています。
これ以外で接続しようとするとブロックされるため、必要なhost名を追加します。
“`ruby
Rails.application.config.hosts = [
IPAddr.new(“0.0.0.0/0”), # All IPv4 addresses.
IPAddr.new(“

元記事を表示

[実装のヒント] true / false を返すメソッドをシンプルに実装する

最近自分が実装しているのを見せながらペアプロしたりする時に『こういう実装はダメなんですか?』って質問を受けることがある。

そんな中からとして **『こうあるべき実装』** と、 **『動くかもしれないけど望ましくない実装』** とかをサンプルや実装していく順序なども交えながら記事にして残しておこうかなと思う。

## true / false を返すメソッドを実装する

まずは実装の前提となるクラスの初期化用のコードを貼っておく。

“`ruby
class SomethingOutputService
include ActiveModel::Model
attr_accessor :date_from
attr_accessor :date_to

def initialize( date_from, date_to )
begin
self.date_from = Time.parse( date_from )
self.date_to = Time.parse( date_to )
rescue ArgumentErr

元記事を表示

[実装のヒント] Rails での開発の時は blank? と present? を使いこなす

Rails用に条件分岐のコードを書く時、`blank?`メソッドと`present?`メソッドを効率的に組み合わせるだけですごく可読性のいい式が書ける。特に最近、緩やかなコード規約というものを開発チームと共有していて、その中で`unless`文の使用はよっぽどのことがない限り避けるように記載していたりする。で、実例だ。今回は haml で書かれたファイルの中に条件分岐のコードがあるってサンプルでサクッと解説する。

“`haml
– unless name.blank?
= name
“`

**『name が空じゃなかったら表示する』** ってだけのすごいシンプルなコード。ただこのコードは`unless`文を使う必然性がない典型的な例だ。`if`文に置き換えても否定式にすることもなく、以下のように書くことがでける。

“`haml
– if name.present?
= name
“`

**『name が空じゃなかったら表示する』** は __『name が存在したら表示する』__ と読み替えることができる。それをそのままコードにしただけ。他の言語だとあまり見かけ

元記事を表示

エンジニア初心者が感動したCursor vs. VS Code: AIで簡単にコードを書く方法

## はじめに
エンジニアとして効率的にコードを書くことは、開発スピードや品質を向上させるために非常に重要だと思っています。私はエンジニア初心者のため、コードエディタは初めて触りますが、CursorのAI機能はまさに初心者のためにあるようなもので。とても感動しました!
 この記事では、人気のあるコードエディタであるVS Codeと、AIを用いて簡単にコードを書くことができるCursorを比較し、特にAIによる質問機能について詳しく説明します。

## VS Codeとは
Visual Studio Code(VS Code)は、Microsoftが開発した無料のソースコードエディタです。以下の特徴があります:

– **拡張機能**:膨大な数の拡張機能が提供されており、言語サポートやデバッグツールを簡単に追加できます。
– **統合ターミナル**:エディタ内でターミナルを開くことができ、コマンドライン作業を効率化します。
– **Git統合**:Gitリポジトリとの統合が強力で、バージョン管理が容易に行えます。
https://www.cursor.com/

## Cursorとは

元記事を表示

パーフェクトRubyonRails備忘録1

# find,find_by,whereの戻り値の違い

– find
– ActiveRecord::RecordNotFound例外
– find_by
– nil
– where
– 空のActiveRecord::Relationインスタンス

# ActiveRecord::Relationについて

– ActiveRecord(モデル)に対してQueryInterface(select,where,etc)が呼ばれることでActiveRecord::Relationのインスタンスが作成される
– ActiveRecord::Relationインスタンスに対してQueryInterfaceを繰り返し呼び出せる
– 実際にデータが必要になった時点でSQLが発行され、それまではActiveRecord::RelationにSQLの情報が蓄積される。
– ただし、 `to_a`メソッドにより、明示的にSQLを発行することもできる。

# scopeについて

– スコープとは?
– よく使う検索条件に名前をつけて再利用しやすくする仕組み
– スコー

元記事を表示

誰も使わなかった奇妙な設定

> こちらは「Ruby on Rails パフォーマンスアポクリファ」のサンプル章です。[日本語での完全版が現在Gumroadで入手可能です](https://nateberk.gumroad.com/l/apocrypha_ja)。

Rails のバックグラウンドジョブの多くには、一般にパフォーマンスの問 題があります。
バックグラウンドジョブでは、しばしば大きなデータセットを処理しま す。そして、その際に User.all.each(&:send_daily_newsletter) のよ うな愚かなことをしてしまいます。

開発環境やテスト環境では、User.all が返すのは、おそらく数行、多くて も十数行でしょう。開発者の多くは、自分のローカルマシン上の seed デー タを極端に限定しています。

しかし、プロダクション環境では、User.all はおそらくかなりの数の行 を返します。開発するアプリケーションによっては、数十万行になるかもし れません。

10 万行を返す結果セットには、ほんのわずかばかり問題があります。それ は SQL クエリーが返すのに時間がかかると

元記事を表示

Basic認証の導入ガイド

### 概要
Basic認証とは、HTTP通信の規格に備え付けられているユーザー認証の仕組みです。サーバーと通信できるユーザー名とパスワードをあらかじめ設定し、それに一致するユーザーのみがWebアプリケーションを利用できるようにします。この記事では、RailsアプリケーションにBasic認証を導入する方法を簡単に説明します。

### 1. Basic認証の設定方法

#### 1.1 コントローラーでの設定
`authenticate_or_request_with_http_basic`メソッドを使用して、開発中のRailsアプリケーションにBasic認証を導入します。以下の例では、ユーザー名`admin`とパスワード`password`で認証を行います。

“`ruby
class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do

元記事を表示

素朴な疑問 ~ シリアライザーって何? ~

# 素朴な疑問
筆者が新人教育する中で、プログラミング実務未経験者がよくされる質問を紹介します。
未経験者に限らず、「そういえば何のために使っている技術(ツール)なんだっけ?」とよく理解していないまま利用しているケースも少なくありません。
この記事で、その純粋で素朴な疑問を改めて明確にして理解を深めていきましょう!

# 今回の疑問
今回の疑問は表題通り、

**シリアライザー** って何?」 です!

実務未経験者のポートフォリオレベルでは、シリアライザーを [ActiveModelSerializers](https://github.com/rails-api/active_model_serializers) などのライブラリを使って導入されておらず、実務で初めてシリアライザーの存在を認識するケースが多いようです。
そこで、本記事で取り上げたいと思います!

# シリアライザーって何?
Railsのシリアライザーは、データをJSON形式に変換するためのツールです。
簡単に言うと、**データベースから取り出した情報

元記事を表示

Devise のモジュール(confirmable, lockable, omniauthable 等の機能)を後から有効化する

成り行き任せで作っていない限りそんなことはあまり起こらないかとは思うのですが、
成り行き任せで作っていてデフォルト(`rails g devise:install` しただけ)では有効化されていない Devise の下記モジュールを後から有効化することになったのでその顛末を記しておきます。

“`
:confirmable, :lockable, :timeoutable, :trackable, :omniauthable
“`

環境は Windows 10 Pro、Ruby3.2.2、Rails7.1.2、devise4.9.3。
認証機能を入れる(`rails g devise` する)モデルは本稿では `User` としていますので異なる場合は適宜読み替えてください。

## 通常(Devise導入時に同時に有効化)との比較

Devise を導入する際の手順は大雑把に以下のような感じですが(Devise導入手順を仔細に解説した記事はごまんとありますので詳細はそれらをご覧ください)、

> 1. gem を `bundle install`
> 2. インストール(`$

元記事を表示

Rails Next.jsでsessionを用いた認証機能を実装する (初期設定編)

# はじめに
この記事はRails、Next.js利用したSPAでsessionによる認証機能を実装する記事の、初期設定編です。
ブラウザからtestボタンを押すと、Railsバックエンドにリクエストが送信されて、簡単なレスポンスをコンソールに表示するところまでを扱います。
読者はRailsとNext.jsを単体では触ったことがあるものの、SPAを実装したことがなくCORSの知識が0の人を対象にしています。

# 開発環境
Rails 7.1.3.4
Next.js 14.2.5

# 手順概要
1. RailsのAPIモードで新プロジェクトを立ち上げる
1. Next.jsで新プロジェクトを立ち上げる
1. Next.jsとRailsを接続して”hello world”ページを表示させる
1. RailsとNext.jsのサーバを起動させる
1. RailsとNext.jsサーバ間でのCORSを設定する
1. Railsのルーティングとコントローラーを設定する
1. Next.jsサーバからRailsサーバにgetリクエストを送信する
1. 最終確認

# 本編
#### Rails

元記事を表示

GitHub Actionsでテストを自動化させてみた(Rspec ,Rubocop)

## はじめに
個人開発にて、`GitHub Action`を使用して`Docker`環境下におけるテストの自動化を行いました。
自動テストを書いた後に、「なんか便利そう」という気持ちで実装を始めましたが、必要な設定の全貌が掴めず、時間を大幅に溶かしてしまいました…💦
これから実装する方に向けて、コードを見ながら流れを掴んでいただけるように記載していきます!

:::note warn
私はプログラミング学習中で、初学者です。
内容に間違いがあるかもしれませんので、もし間違いがあれば教えていただけると幸いです。
:::

## GitHub Actionsとは
GitHub Actionsは、あらかじめ定義した処理と条件の組合せを自動化するGitHubの機能です。
今回は、リポジトリへのプッシュをトリガとして、YAML ファイルに定義したテスト(Rspec)と体裁チェック(Rubocop)を自動で実行します。

https://docs.github.com/ja/actions/about-github-actions/understanding-github-actions

##

元記事を表示

ssh-agentの設定

# はじめに
前回のrailsのDevcontainerでsshが組み込まれてないので、git関係が利用できていなかったので、それを対応した備忘録です
似た記事がたくさんあるので、詳細な説明は割愛します

# 確認
以前利用した環境は、こちらになります

https://qiita.com/youfuku/items/797cf0f745c7c7bbf0f6

コンテナ内でgitコマンドを実行するとこんな感じになります
“`
$ git pull
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
“`

# 確認
こちらを利用させていただきました(ありがとうございます)

https://zenn.dev/nayushi/articles/5d577c93e03a9b#keychain%E5

元記事を表示

RSpecでインスタンスの無効な状態を検知するためにvalid?メソッドが必要な理由

# 通らなかったテスト
RSpec でテストを学び始めたが、

“`ruby
it “nicknameが存在しなければ無効な状態であること” do
user = User.new(nickname: nil)
user.valid?
expect(user.errors[:nickname]).to include(“can’t be blank”)
end
“`

このコードで、なぜ

“`ruby
user.valid?
“`

の部分が必要になるのかわからなかった。ただ単に expect()メソッドに引数を渡してあげればいいのでは?と思い user.valid?を省略したらテストが通らなかったのでその理由を調査。

# valid?メソッド

そもそも valid?メソッドは Rails ガイドによると

> Rails は、Active Record オブジェクトを保存する直前にバリデーションを実行します。バリデーションで何らかのエラーが発生すると、オブジェクトを保存しません。
> valid?メソッドを使って、バリデーションを手動でトリ

元記事を表示

開発前に知りたかった!アプリ開発の注意点とポイント

# はじめに
アプリ開発を進める上で、考慮すべきことややるべきことは多く、悩むことも多いと思います。私自身もあまり考えずに突っ走ってしまったことで後悔した経験がありますが、その中で得た知見も多くあります。

そこで、開発を進める前に考えておくべきことをまとめました。これは、私が開発する前に知りたかったことを中心に、新たに個人開発をする際の参考にするための備忘録です。

# 対象読者
– Ruby on Rails7で開発しようとしてる方
– フロントエンドに迷っている方
– Dockerを使おうとしている方
– 一通り学習を終えて、これからポートフォリオ作成に取り掛かろうとしている人
– 開発環境の構築方法を知りたい方

# 環境構築

開発前に開発環境を考えることは非常に重要です。

特に、バックエンドだけで開発を行う場合と、バックエンドとフロントエンドを分けて開発を行う場合では、それぞれのメリット・デメリットが異なるため、それらを考慮しながら進めるのが良いと思われます。

### バックエンドのみで構築

#### メリット
– 開発環境の構築が比較的容易
– バックエンド技術に集

元記事を表示

【Ruby】eachメソッドで便利なやつ

## 概要
eachメソッドで使える便利なものをまとめました。
配列のメソッドがほとんどなのでそっち調べたほうが早いかも。

https://qiita.com/yyykms123/items/e1bcb838f56100d12025

## 起点、回数の指定
### **`first(n)`**
* 先頭からn個の要素分まで実行する(回数指定)

~~~ ruby
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 先頭から3回まで
num.first(3).each do |num|
puts num
end

# result
1
2
3
~~~

### **`last(n)`**
* 末尾n個の要素分、実行する(起点指定)

~~~ ruby
alphabet = [“A”, “B”, “C”, “D”, “E”,]

# 末尾3回分まで
alphabet.last(3).each do |num|
puts num
end

# result
“C”
“D”
“E”
~~~

### **`list[n1..n2]`**
* n1個目からn2個

元記事を表示

OTHERカテゴリの最新記事