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

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

マイグレーションで使用するadd_indexの役割について

## 経緯
Railsチュートリアルを進めていく中で、マイグレーションファイルにadd_indexという記述を行なっていましたが、具体的に使い方がいまいちわからなかったため、調べた結果をまとめます。

## add_indexがなぜ必要なのか
結論から言うと、データベースの処理を高速化できるから。
通常該当のデータをデータベースから検索する際には、DBは1から10まで全てのデータを検索し、該当のデータが存在するかどうかを検索します。(フルスキャン)
add_indexがあると、検索しやすいようにデータを並び替え、必要なデータを取得しやすくできるようになります。(木構造という検索方法でデータを並び替えています。このあたりの説明は、アルゴリズムのお話になるので今回は省略します。)
Railsチュートリアルでは、Twitterのようなユーザーをフォローする機能、される機能を作成していますが、これらを登録するカラムを作成する際に、インデックスを設定しています。高い頻度でアクセスするこれらのデータに追加することで、DBにかかる負荷を軽減し、レスポンスを高速でできるようになります。
“`
cla

元記事を表示

Everyday Rails – RSpecによるRailsテスト入門を読んだ

# はじめに
今回railsの学習に伴いテストフレームワークの学習として
Everyday Railsを読みましたのでそのアウトプットとして本記事を作成しました。
# 学んだこと
* **意味のあるテストデータの作成**
* Factory Bot
* テストにおけるサンプルデータを作成するためのgem
* “`bin/rails g factory_bot:model モデル名“`でファクトリのファイルを作成
* 以下ファクトリの構成例。用意するとスペック全体でファクトリが使用可能になる。
“`
FactoryBot.definedo
factory :モデル名 do
//データを囲む中括弧({})は必須
カラム1 { “test1” }
カラム2 { true }
カラム3 { 1234 }
end
end
“`
* “`FactoryBot.build(:モデル)“`のような

元記事を表示

【紹介】「認可」を実装する方法3選_Rails

# はじめに
「認証」は、多くのRailsアプリケーションで、`devise`が使用されているかと思います。
ただ、「認可」に関しては、皆さんどのように実装されていますでしょうか?

今回実装するにあたって、考えた方法を3つご紹介いたします。

:::note warn
「認証」と「認可」の違いに関しては、本記事では解説いたしません。
詳しくは、以下の記事が参考になりますので、ご覧ください。
:::

今さら聞けない認証と認可の違い ゼロトラストセキュリティ対策

# 3選の紹介
## ① Pundit ・ cancancan
https://github.com/varvet/pundit

https://github.com/CanCanCommunity/cancancan

上記2つとも、認可周りをサポートしてくれるgemです。
ライブラリを使用すると、実装が楽になるのはとても良いですね。

昔からあるイメージですが

元記事を表示

【初心者向け】RailsアプリをRenderでデプロイする手順(mac)

## 背景
今回はRailsアプリを作ってデプロイする上で、
2024年7月時点において最も簡単かつモダンにデプロイする手順についてです:sunglasses:

当方、駆け出しエンジニアですがrailsデプロイに苦しんだため、
同じくデプロイで苦しんでおられる方の一助となればと思います:grinning:

webアプリは有料プラン(starter:月$7~)でないと動作が不安定なのでご注意ください。Freeプランだとエラーが出る場合があります。Freeで失敗したら有料プランの移行を検討してください:hushed:
データベースは90日まで無料で運用できますが、90日でデータベースは削除されるので継続運用される場合は有料プラン(starter:月$7~)に移行をお願いします:bow:

## 手順
大きく以下の流れで進行します。

1.PC上のアプリ内準備
2.Railsアプリのデプロイ
3.データベースのデプロイ
4.Railsアプリとデータベース接続

## PC上のアプリ内での準備

### Gemfileの編集

以下のような変更を加えてください。

“`diff_c:

元記事を表示

【Rails】カラムの確認と削除

## 環境
Docker Compose
## 確認手順
Railsコンソール起動
“`bash:コマンド
docker compose exec web rails c
“`

以下コマンド実行でusersテーブルのカラム名が表示
“`Ruby:コマンド
User.column_names
“`

## 削除手順

**構文**

“`ba:コマンド
rails g migration Removeカラム名Fromテーブル名 カラム名:型名
“`

以下は`users`テーブルの`role`カラムを削除するマイグレーションファイルを作成・実行
“`bash:コマンド
docker compose exec web rails g migration RemoveRoleFromUsers role:integer
“`


マイグレーションファイルを確認

**リセットとロールバック**
コマンド実行してマイグレーションファイルのステータスを確認する
“`bash:コマンド
docker compose exec web rails db:migra

元記事を表示

【Ruby】ちゃんと動かないcase/when

## はじめに:突然ですが、問題です
こんなメソッドがあります。

“`ruby
def role_name(role)
case role
when ‘Admin’
‘Administrator’
when
‘Member’
else
‘Guest’
end
end
“`

このとき、以下のコードの実行結果はどうなるでしょうか?

“`ruby
puts role_name(‘Admin’)
puts role_name(‘Member’)
puts role_name(‘Guest’)
“`

正解はCMのあとで!!

<CM>

Rubyを知れば、Railsはもっと楽しくなる。
「プロを目指す人のためのRuby入門 改訂2版」好評発売中!🍒

https://ruby-book.jnito.com/

<CMおわり>

では正解です。先ほどのコードを実行するとこうなります。
(おや、”Member”が出力されませんね :thinking: )

“`
Administrator

Guest
“`

あなたは正解しましたか!

元記事を表示

docker+vite+vue3環境のバックエンドにrailsを設定

# 想定
以下で構築したフロントエンドvite+vue3の環境にバックエンドとしてapiモードのrailsを追加します。

https://qiita.com/devzooiiooz/private/45079e52d4a7d4d25d40

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/899f031c-276d-b6c0-38e4-f1d97066453a.png)

# 前準備
+ direnvのインストールと有効化
プロジェクトルート直下でに.envrcを作成する。
direnvはホスト側のみでよい。
“`sh:
touch .envrc
“`
+ .envrcに環境変数を設定
“`env:.envrc
# MySQL
export DATABASE_USERNAME=’root’
export DATABASE_PASSWORD=’password’
export DATABASE_HOST=’db’
“`
+ direnvの有効化
“`sh:
dire

元記事を表示

AWS ECS上からRailsアプリケーションにBedrock+Claude 3 Haikuを取り込んでみた

## Claude 3 Haikuは安い・美味い・速い

基本的に応答スピードが早く、日本語入出力にも長け、速いのが特徴です。

以下Bedrock経由での価格ですが、Claude 3 Sonnetは他と比較して1/10以下の金額で使えるのが非常に良いです。応

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293892/9cb13398-28c5-532c-d88b-556845799872.png)

詳細はコチラ

https://aws.amazon.com/jp/bedrock/pricing/

2024年7月時点で、応答速度もSonnetの2倍程度はやく、非常に魅力的です。個人で使ったり、製品のプロトタイプとして活用するには非常に魅力的です。

## AWS Bedrockを使うメリット

– 学習・管理コスト
– AWSに慣れているエンジニアが弊社には多かった
– AIだけAzureに外出しせずとも、AWS内ですべて完結出来る
– セキュリティ

元記事を表示

Rails APIモードでDevise Token Authがうまく動かない!?解決までの道のり

最近Railsで APIを作ろうと思って、Rails APIモードとDevise Token Authを使ってみたんですが、思わぬところでつまづいてしまいました。今回は、その問題を解決するまでの過程を、私なりにまとめてみました。

## 最初の状況
まず、こんな感じでプロジェクトを始めました:

– ` rails new my_api –api` でAPIモードのRailsプロジェクトを作成
– Gemfileに` gem ‘devise_token_auth’ `を追加
– `bundle install `を実行
– `Devise Token Auth`の設定を行う

ここまではスムーズに進んだんですが、rails s でサーバーを立ち上げて、routesを確認しようとブラウザから http://localhost:3000/rails/info/routes にアクセスしたら

“`
NoMethodError (undefined method `mount_devise_token_auth_for’ for #

元記事を表示

【Rails】バリデーションのエラーメッセージが表示されない時

# controllerにstatus: :unprocessable_entityを追加
“`ruby:post_controller
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
if @post.save
redirect_to(“/posts/index”)
else
render(“posts/edit”, status: :unprocessable_entity)
# rails7系でバリデーションエラー文を表示させるには、 ,status: :unprocessable_entityの追記が必要)
end
end
“`
Rails7.0からデフォルトでTurboが導入されており、バリデーションのエラーメッセージを表示させるためには`status: :unprocessable_entity`の記述を追加する必要がある。

“`ruby:edit.html.erb
<

元記事を表示

初学者がBearer Tokenを使って認証・認可をざっくり理解してみた!

### **はじめに**
はじめまして、Sun*でBackendエンジニアをやっている24卒のAsutoです!
今回は認証・認可について具体的な認証機能(Authorizationヘッダを用いた認証方法)を用いたフロー図などで流れを説明していきます。

:::note info
補足:認証と認可を行うサーバーは一般的に分けられる(認可サーバー・認証サーバー)ことも多いですが、今回はまとめて認証・認可を行う「サーバー」として定義しています
:::

### **目的**
– 認証・認可に手こずってる人をクリアにさせたい
– そもそも認証と認可の違いとは?
– どのような流れで認証・認可が行われているのか?

### **想定読者**
– 初学者(認証・認可に初めて触れる人)
– 認証・認可の違いや流れなどが掴めていない人

### **そもそも認証・認可とは**
– 認証とは、利用者本人の確認を行うことです。
– 認可とは、リソースに対するアクセス権利をユーザーに与えるということです。

といってもイメージがつかないと思うので、もう少し違いをわかりやすくするため、ChatGPTに身

元記事を表示

【個人開発】誰でも簡単に謎解きを作成・回答できる「EnigmaPortals」をリリースしました!👓

## はじめに
皆様初めまして、[ヒデボー](https://x.com/yamarice428 “ヒデボー”)と申します!
プログラミングスクール「RUNTEQ」に入学し現在、WEBエンジニア転職を目指して学習&転職活動を行なっています!
今回、個人開発ポートフォリオとして[EnigmaPortals~謎クリエイト~](https://enigmaportals.com/)を開発しました!

## サービス名
#### EnigmaPortals ~謎クリエイト~

[![Image from Gyazo](https://i.gyazo.com/0d8b483df7e4c9eb17e3b01e828333da.png)](https://gyazo.com/0d8b483df7e4c9eb17e3b01e828333da)

#### ・サービスURL

https://enigmaportals.com/

#### ・Github URL

https://github.com/yamadahideto/EnigmaCraft

## サービス概要
自作の謎を投稿、**AIを使

元記事を表示

Railsにおけるロジックの切り出し方

### 記事について
値オブジェクト、サービスオブジェクト、フォームオブジェクト、コールバックオブジェクト、Concernなど、Railsには多様なロジックの切り出し方法が存在します。適切に、それぞれの責務を理解して実装するべきだと思いChat GPTに聞いたりして調べたことをまとめます。

### 1. 値オブジェクト (Value Object)

値オブジェクトは、特定のドメイン内での値の表現を担います。これらは不変であり、値としての等価性を持ちます。たとえば、`Money` クラスや `DateRange` クラスなどが該当します。

**使用例:**

“`ruby
class Money
attr_reader :amount, :currency

def initialize(amount, currency)
@amount = amount
@currency = currency
end

def ==(other)
self.amount == other.amount && self.currency == oth

元記事を表示

「続きを読む」を実装

# はじめに
案件で実装することになったので、それの備忘録です。

# 目的
youtubeなどに実装されているコメントが長いと省略されて表示されているこれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/1d6d7ee6-e564-ce43-ceac-8d4f0f83d950.png)

# 既存
“`erb

<%= comment.content%>

“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/eba598ba-4e69-3ae4-f1a6-c2fcebf4e0b0.png)

# 実装
探せばあるもので、下記のものを利用しています。

https://www.stimulus-compo

元記事を表示

実際に動かしてみてわかった、N+1問題の恐ろしさ

## はじめに
ご閲覧いただきありがとうございます!
Sun* という会社で Backend Engineer をやっている 24 卒の Campanule と申します。
普段は Ruby on Rails を使った Web アプリの開発を行っております。

今回が初投稿となります。どうぞお手柔らかにお願いいたします。

本記事ではデータベースを用いる際にいつも頭を悩まされる **N+1 問題** について簡単に説明し、またパフォーマンスの簡易的な測定をしてみようと思います。

## 目的
– N+1 問題 とは何なのかざっと理解したい
– パフォーマンスの測定を行い、N+1 問題 の影響について考えたい

## 想定読者
– N+1 問題 を知らない方、あるいは言葉だけ聞いたことがある方
– N+1 問題 によるパフォーマンスの低下が気になっている方

## N+1 問題とは
こちらがわかりやすいです。

https://qiita.com/muroya2355/items/d4eecbe722a8ddb2568b

簡単に言うと、あるテーブルのレコード N 件 に対応した別テーブル

元記事を表示

[Rails] Rspec_Anonymous Controllerを使用して、Application Controllerのテストをしよう!

# はじめに
`ApplicationController`では、ユーザーのロール(役割)に対して、アクセス制御を行っていると思います。
では、そのアクセス制御をテストしようと思った時に、どのように実装しますでしょうか?

– requestテストでやろう!
– でも、`ApplicationController`へのルーティングは通っていないよね…
– アクセス制御をしている箇所を`Concern`に切り分けて、単体テストでやろう!
– これは結構良さげ
– ただ、切り分けるほどの処理の大きさでもない…

上記のように、色々と模索すると思います。
その中で、`AnonymousController`を使用すれば、実装を変えずにテストすることができます。

今回はその内容をアウトプットいたします。

:::note warn
Rails5からは、`request spec`が推奨されています。
今からは、`controller spec`になるので、ご了承ください。
:::

https://qiita.com/t2kojima/items/ad7a8a

元記事を表示

railsのcreateでPostman使ってみた

## はじめに
最近、PostmanというAPIの開発をサポートしてくれるツールを知ったので使ってみようと思います。

## Postmanとは
公式より
>Postman は、 API を構築および使用するためのAPI プラットフォームです。Postman は、API ライフサイクルの各>ステップを簡素化し、コラボレーションを効率化することで、より優れた API をより迅速に作成できるようにします。

公式に書いてある通り、PostmanはAPIの開発やテスト等をサポートするツールです。
実際にAPIにGETやPOSTを行い、リクエストやレスポンスを受け取ることができます。

## Postmanでrailsのcreateを行う
実際に、Postmanを使ってみようと思います。

### Postmanをダウンロード
まずはPostmanをダウンロードします。

https://www.postman.com/downloads/

### lightweight API clientで入る
lightweight API clientと表示されているところをクリックすると、アカウン

元記事を表示

【Render × Xserver】独自ドメインでのデプロイ時の注意点と解決策

# はじめに
本記事では、「**Render**」にデプロイしたアプリを独自ドメインで公開する際の注意点と解決策についてまとめます。今回は、「**お名前.com**」での**ドメイン取得**ができなかったため、以前契約していた「**Xserver**」を利用しました。

この記事が皆さんのお役に立てば嬉しいです!

https://www.xserver.ne.jp/

https://www.onamae.com/

# 前提/条件
– rails7系
– ruby3.2.3
– PostgreSQLを使用
– Renderでデプロイ済み
– Xserverでドメイン取得される方

# 注意点

### XserverでDNSレコード画面で「DNSレコードの確認・設定を行うことができません」表示

![Xserver-error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772961/024ae093-eeb1-2cd6-f3d8-4dcfb18d3a75.png)

DNSレコードの表示ができ

元記事を表示

RailsでOmniAuth-GitHubを利用してログインをしようとした時に、turboが邪魔をしてgithubのログイン画面にいけなかった現象について。Not found. Authentication passthru.

## 読んで欲しい人
– 下記の記事を参考に開発を進めていて`Not found. Authentication passthru.`の表示になった人
– https://fuga-ch85.hatenablog.com/entry/2021/04/10/075536
– https://github.com/heartcombo/devise/wiki/OmniAuth:-Overview
– 過去の俺

## 動作環境

– ruby 3.3.0
– Rails 7.1.3.3

## ハマった現象

– 上記で紹介した「omniauthを使ってgithub認証を実装する」の設定が一通り終わり、いざ`user_github_omniauth_authorize_path`リンクを設置して、ボタンを押した時に`Not found. Authentication passthru.`という文言が出てきて、githubの認証画面に遷移できない状態

ボタンの画面
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

[個人開発] 食品の在庫を簡単に管理できるサービスを作ってみました

## はじめに

こんにちは。ryosuke([@ryousuke_doi](https://x.com/ryousuke_doi))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

今回リリースしたサービスの紹介と開発の振り返りをまとめてみました。
記事を書くのが初めてなので、温かい目で見ていただけると幸いです。また、技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。
## 作成したサービスの紹介
[![Image from Gyazo](https://i.gyazo.com/385a7078b695448cfef79567d7cd142b.jpg)](https://gyazo.com/385a7078b695448cfef79567d7cd142b)

### サービスURL(レスポンシブ対応済み)

https://pantry-chef-notifier.onrender.com

https://github.com/ryo-mogura/Pantry-Che

元記事を表示

OTHERカテゴリの最新記事