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

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

予定の10分前にメール通知を飛ばす機能を作ってみた!

## はじめに
社内のハッカソンで(ほぼ)初めてActionMailerとActioveJobを使ってみました。
まだ自分の中で、何の機能を誰が担うのかの整理ができていないので、復習を兼ねて記事にしてみました!

※本番環境にデプロイしていません。
## 動作環境
ruby 3.3.1、Rails 7.1.3.3
## 読んで欲しい人
ActiveJob、ActionMailerの存在は知っていて、使ってみたいと思っている人。
## 実装すること
全体のざっくりした機能の流れとしては、ユーザが予定の外出時間の登録or更新をした時に、その外出時間の10分前に確認メールを飛ばすといったものです。
もしユーザがすでに予定の外出時間を登録していて、外出時間の更新をした場合、更新前の外出時間をもとに飛ばそうとしていたメールをキャンセルし、新たにメールの通知予約を作成します。
## 実装
※ UserモデルとUserに紐づくCalendarモデルは作成済みです。
### 予定の10分前に飛ばすメールを作成
まずはメールを作成します。
※今回は準備物を確認を促す通知なので、↓のような名前で作成しまし

元記事を表示

Rails におけるMigration対象のファイルには順番がある件

# はじめに
みなさん、こんにちは.**torihazi**です。

昨日作ったRails7 x React 18 のDocker環境の下で

現在開発を進めているのですが、

久しぶりのRailsで、はじめの始めでつまづいたので

書き記しておこうと思います

# どういうことか
例えばテーブルを4つ(A,B,C,D)作るとします。

そのためにターミナルで下記コマンドを打ち込むかと思います。

“`
rails g migration createAs
rails g migration createBs
rails g migration createCs
rails g migration createDs
“`
そうするとファイルがそれぞれ
“`
20241111001111_create_as.rb
20241111002222_create_bs.rb
20241111003333_create_cs.rb
20241111004444_create_ds.rb
“`
と作られます。

この時
– BはAのidを外部キーとしてもち
– CはAとBとDのidを外部キ

元記事を表示

【Rails】一つのモデルに対して複数の意味を持たせたい(class_name, inverse_of )

# 実現させたいこと
例えばユーザー(User)と本(Book)のモデルが存在している時
Userに二つの意味を持たせたいことがある
– 本を所有しているユーザー(User)
– 本の著者(Author)

“`rb
book.author
# => 本の著者を取得
book.user
# => 本の所有者を取得
“`

同じUserモデルを使って、author、userをそれぞれ取得できる

# モデル作成
マイグレーションファイルは以下のようにBookに外部キーとして
– user_id
– author_id

を持たせます
“`rb
class CreateBooks < ActiveRecord::Migration[7.1] def change create_table :books do |t| t.belongs_to :user, null: false t.belongs_to :author, null: false t.timestamps end end end ``` モデルは下記のよ

元記事を表示

【環境構築】Rails + Docker + Bootstrap

# 開発をするためのディレクトリを作成する
“`
mkdir 自分で開発するアプリの名前
“`
# Dockerfileを作成する
“`
touch Dockerfile
“`
# Dockerfileの中身を書く
“`
# 使いたいバージョンを決めて{{}}をruby:tag名の形で置き換えてください
# 例: ARG RUBY_VERSION=ruby:3.2.2
ARG RUBY_VERSION={{rubyのimage名:tag名}}
# {{}}を丸ごと使いたいnodeのversionに置き換えてください、小数点以下はいれないでください
# 例: ARG NODE_VERSION=19
ARG NODE_VERSION={{nodeのversion}}

FROM $RUBY_VERSION
ARG RUBY_VERSION
ARG NODE_VERSION
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash

元記事を表示

【Rails】erbをVSCodeでフォーマットする方法

## 拡張機能をインストール

ERB Formatter/Beautifyという拡張機能をインストールします。

https://marketplace.visualstudio.com/items?itemName=aliariff.vscode-erb-beautify&ssr=false#overview

## Gemをインストール

上記の拡張機能を使用するためにはHTML Beautifierが必要なのでインストールします。

“`Gemfile:Gemfile
group :development do
gem ‘htmlbeautifier’
end
“`

で`bundle install`。
または、ターミナルで以下のコマンドを実行します。

“`terminal:ターミナル
gem install htmlbeautifier
“`

https://github.com/threedaymonk/htmlbeautifier?tab=readme-ov-file#installation

## 設定を記述する

`settings.json`に以

元記事を表示

Rails 7 x React 18(Javascript) x Docker 環境構築

# はじめに
みなさん、こんにちは **torihazi**です

つい最近までReactを勉強していたのですが、

最近Rails ReactのSPAを勉強することになり

これまで扱っていたDockerを使って環境構築をしてみることにしました。

Javascriptなので、実用性は低いかもしれませんが

まずはJavascript!という方は参考にしてください!

実務未経験なのでディレクトリ構成など、おかしいところあるかもしれません

そんな時はこそっと教えてください!

# 環境
“`
docker compose v2.28.1-desktop.1
docker engine 27.0.3
“`

# ディレクトリ構成について
“`
|- docker-compose.yml
|- Dockerfile.back
|- Dockerfile.front
|- front(git管理)
|- 色々(create-react-appでこれから作る)
|- back(git管理)
|-Gemfile
|-Gemfile.lock
|-entrypoi

元記事を表示

【Rails】画像プレビュー機能をJavaScriptで実装

# はじめに
この記事ではRailsでアップロードした画像をJavascriptでプレビュー表示させる方法についてまとめています。すでに画像のアップロード自体はできている方を前提として書いておりますのでご了承ください。JSについては不慣れなところがあり恐縮です。

https://railsguides.jp/active_storage_overview.html

# 対象者
### 環境
– Ruby 3.2.3
– Rails 7.1.3.2
– esbuildで開発
– Tailwindcss使用

### 前提
– Active Storageの導入が完了している
– 画像のアップロードができている
– 1つのフォームでなく複数のフォームでプレビュー表示させたい方

↓参考記事

https://qiita.com/taki39384/items/691017789c1ca594f308

# 完成品

1つだけでなく複数のフォームに対応できます。

### 新規作成画面

[![Image from Gyazo](https://i.gyazo.com/23827c2db

元記事を表示

Rails: あなたがService Objectでやりたいことは、たぶんActiveRecordで1行でできる

## はじめに

自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaをやろうかなと思っています。

それでは本題です!

## Rails歴が長くても、Railsの便利機能が使えていない人は多い

私はフリーランスとして、ここ数年でいろいろなRuby on Rails案件に入ってきました。その中で強く感じるのは、Railsの便利機能をしっかり使いこなしている人が少ないということです。これは一見シニアっぽい人でもそうです。

とても残念なので、使いこなしている人が少ない便利機能に主に焦点を当てて、Railsの素晴らしさをなるべく多くの人に知っていただこうと思っています。

[前回のviewのテストの記事](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8)もその一つでした。

今回は、ActiveRecordで関連オブジェクトを一気に作る複数の方法を紹介します。

元記事を表示

単体テストコード MySQLのエラー解消

モデル単体テストコードを実装している最中に
`MySQL client is not connected`というエラーが発生した場合の対処方法は↓
config/environments/test.rbというファイルに以下の記述を追記しましょう。

“`
Rails.application.configure do

#省略

config.active_job.queue_adapter = :inline #追記

#省略
“`
## Active Jobのキューアダプタ設定
これはRailsのバックグラウドジョブフレームワークです。
デフォルトのジョブは非同期で行われるが`:inline`に設定する事でジョブは非同期ではなく、同期的に実行されます。
## ジョブの実行タイミング
`inline`に設定する事でジョブが即座に実行されるよになります。これはテスト環境で特に有効的です。
理由はテスト中にバックグラウンドでジョブが実行されるのを待つ必要がなくなり、テストの実行がより予測可能になるからです。
## テスト解消の理由
テスト環境で非同期ジョブを使用すると、ジョブが非

元記事を表示

僕のrubocom設定

# はじめに
基本のrubocop設定を自分用の備忘録として記述します。

# Rubocopとは
RuboCop とは、Ruby のコードがコーディング規約に沿っているかを検査することができる「静的コード解析ツール」の一つです。
RuboCop をアプリケーションに取り入れることで、コードの品質を保つことができます。

# Rubocop 基本設定

“`ruby:.rubocop.yml
AllCops:
# チェック対象から除外するディレクトリ,ファイル
Exclude:
– “vendor/**/*”
– “db/**/*”
– “bin/*”
– “node_modules/**/*”
– “config/initializers/devise.rb”
– “config/environments/*.rb”
– “Gemfile”
– “Rakefile”

# # frozen_string_literal: true というマジックコメントのないファイルの許可
Style/FrozenStri

元記事を表示

ActionMailer Interceptorの設定

## ActionMailer Interceptorとは
Railsの標準機能です。追加のgemをインストールする必要はなく、Railsのデフォルト機能として利用できます。

ActionMailer Interceptorは、メールが実際に送信される前に、そのメールの内容を変更するための機能です。たとえば、メールの件名を変更したり、送信先を別のアドレスに変更したりすることができます。

## Interceptorの設定方法
「app/mailers/interceptors/email_interceptor.rb」を手動で作成します。

“`
class MailInterceptor
def self.delivering_email(message)
message.to = ENV[‘TEST_NOTICE_MAIL’]
end
end
“`

「config/initializers/mail_interceptors.rb」にを設定します。

“`
class MailInterceptor
def self.delivering_email

元記事を表示

railsでテキストの暗号化と複合化のやり方

今回「SPA」から「railsサーバー(APIモード)」へpostリクエストをする際のセキュリティを考える機会があり、そこでテキストの暗号化と複合化を行なったのでメモとして記述します。

## 経緯
今回の経緯としては、「SPA」から「railsサーバー(APIモード)」へpostリクエストをする際にCSRF対策として認証機能をつけようとしたのですが、今回のケースでは通信でクッキー、セッションが使用できませんでした。

そのため簡易的なセキュリティ対策だけでも設定しようということになりました。
そこでテキストの暗号化と複合化に手こずったので方法をメモで残します。

## 方法
今回の方法は正しい方法かと言われると少し自信がありませんので、使用する際にはご注意ください。

### 暗号化について
暗号化処理の方法としては、encrypt_and_signという暗号化するメソッドを使用できるようするために、32バイトのキーを生成し、それを元にインスタンス作成を行なっています。

ActiveSupport::KeyGeneratorについては、引数にある「keyword」の中身はどんな値で

元記事を表示

分からなかったトランザクション

## はじめに
今回は課題を進めていくなか、改めて「?」とかんじた`トランザクション`と関係する`ロールバック`について学んだことをアウトプットしたいと思います。

## トランザクションとは
– 意味: 一連のデータベース操作を一つのまとまった処理単位として扱うこと
– 特徴: トランザクション内で行われたすべての操作は、すべて成功するか、またはすべて失敗するかのどちらかになる。これを**ACID特性**と呼ぶ
・**Atomicity(原子性)**: 全ての操作が完全に実行されるか、全く実行されないかのどちらか。
・**Consistency(一貫性)**: トランザクションが完了すると、データベースは常に一貫した状態になる。
・**Isolation(独立性)**: 同時に実行されるトランザクションは互いに干渉しない。
・**Durability(永続性)**: トランザクションが完了した後、その結果は永続的に保存される。

## ロールバックとは
– 意味: トランザクション内でエラーが発生した場合、トランザクション開始前の状態にデータベースを戻すこと
– 機能: トランザクシ

元記事を表示

Railsのviewテストを書こう

## 挨拶

自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaをやろうかなと思っています。

日々、下記のことを考えて開発したり、Xにポストしたりしています。

1. Railsのテスト戦略。Viewのテストも
1. シンプルだけどUXを犠牲にしないHotwireの書き方
1. ActiveRecordのあまり知られていない機能を使いこなして、シンプル・高機能・堅牢なコードを書くコツ
1. なるべくScaffoldの型を保ちつつ、複雑な処理を書く方法

でも、ちゃんと記事をまとめるまでの気力がまだないので、サクッと書けるものを中心に書いていきます。内容は薄めでも背景は意外と考えているので、コメントを残してもらえれば長文解答します!

ではいよいよ本題です!

## あなたは何のテストを書いているのか?

私が見てきた現場のほとんどでは以下のテストしか書かれていなかった。

1. Model spec
1. Reques

元記事を表示

[比較]map と pluck

業務で`map`と`pluck`の違いを意識することが増えたので、整理する

| |map |pluck |
|:– |:– |:– |
| 公式doc | https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COLLECT | https://railsdoc.com/page/model_pluck |
| | RubyのArrayクラスのメソッド | RailsのActiveRecordのメソッド |
| | 各要素に対してブロックを評価した結果を全て含む**配列**を返す | 指定したカラムのレコードの**配列**を返す |
| 特定のカラムの配列を取得したいときの記法 | Array.map(&:カラム名) | モデル.pluck(:カラム名) |
| ActiveRecordインスタンスの生成 | する(必要なカラム以外の全てのカラムをloadする) | しない(必要なカラムのみを取得する) |
| 使い分け | インスタンスからカラムの配列を取得したいとき | インスタンス以外から直接カラムの

元記事を表示

ファイルの改行コードによるエラー

## はじめに
自分で変更したはずないのに、なぜか起こるエラーが私にはあります。
(おそらく眠気がすごいときに学習+コードを入力しているから…睡眠学習)
今回は多分眠気が原因で発生したであろうエラーについてアウトプットします。

## Layout/EndOfLine: Carriage return character detected.
VsCodeの初期設定がうまくいっていなく、このエラーが発生する人は一定数いると思います。エラーの意味と解決方法をまとめます。
### エラーの意味
– ファイル内の行末にキャリッジターン(\r)キャラクターが含まれていることを示している
– 通常、行末は改行(\n)だけであるべきで、キャリッジリターンは不要
– 特にWindowsで作成されたファイルにはこのキャリッジリターンが含まれていることが多いので、エディタやツールで行末をLF(\n)に統一すると解消できる

### 解決方法:エディタでの変更(例:VSCode)
1:ファイルを開く。
2:右下のステータスバーにある改行コード(CRLFまたはLF)をクリック。
3:上の検索窓でLFとCRLF

元記事を表示

「単体テストの考え方/使い方」を読んでテストの本質を学ぶ(第1部)

:::note warn
この記事の内容は技術書を読んだ感想や個人的な考察です。
:::

# はじめに
どうもこんにちは、もきお([@mokio_50](https://twitter.com/mokio_50))です。
今までなんとなく書いてきたテスト。テストの質について考えたことって意外とないですよね?えっ、それは自分だけだって?笑

そんな自分にテストの考え方を改めて考えさせてくれた本がこちら。今回から3部に渡ってこの本の要約というか感想文をつらつらと書き連ねたいと思います。

### 書籍情報

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595926/0701cf35-4a48-7075-f491-658b5513a116.png)

**質の高いテストを行い、ソフトウェアに価値をもたらそう!**

著作者名:Vladimir Khorikov
編集者名:須田智之

[Unit Testing Principles, Practices, and Patterns](ht

元記事を表示

Sidekiq、Redis って何が嬉しんだっけ? 〜ECサイトを具体例にまとめてみた〜 [Rails]

# はじめに
本記事は、私自身が開発を行う中で、「結局、Sidekiq、Redis って何が嬉しんだっけ?」 という疑問に対して、それぞれの特徴や、どのような通信の順序でシステムに恩恵を与えてくれているのかについて備忘録も兼ねて整理したものとなります。
また、具体例があると分かりやすいので、ECサイトを元に記述しています。

# 具体例として利用するECサイトのインフラ構成図
Railsアプリケーションでよく見る構成図だと思います。
また、Renderを利用していますが、AWSでもheroku でもOKです。(もちろん、DBもpostgres以外でもOKです)

![Frame 6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552488/b2256aba-b6fa-fa1b-d6b1-4b933fa48b15.jpeg)

# 基本説明のおさらい

### Sidekiq とは?
Sidekiqは、バックグラウンドジョブを非同期に処理するためのツールです。これにより、時間がかかるタ

元記事を表示

【個人開発】楽に旅行プランを立てることができるアプリを開発しました🔆

## はじめに
初めまして、[honoka](https://x.com/maru1795062)と申します!
未経験からWebエンジニアを目指して学習中です。
この度、「[Tripot Share](http://tripot-share.com/)」というアプリをリリースいたしました!
このアプリは、旅行メンバーとそれぞれの行きたいスポットを共有しながら簡単に旅行プランをつくることができるサービスとなっております。

![tripot_share.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641620/38430a09-db08-2ca7-1610-a97fad42f28f.png)

▼ サービスURL
http://tripot-share.com/
ゲストログインもできますので、ぜひお試しください。

▼Github
https://github.com/maru973/Tripot_Share

## 開発背景
**・旅行を共にするメンバーと行きたい場所をまとめるのが大変.

元記事を表示

RubySilverに合格できたお話

## はじめに
初めまして、@jinta_02と申します。
未経験からエンジニアに転職して、早3ヶ月が経ちましたが、業務をする上で、「これ何してんだ?、どんな書き方?」と思おうことが多々あったので、RubySilverを受験してきました。
これから受験される方の参考になればと思ったので、受験記録を残します😀

## スキルレベル
– エンジニア歴3ヶ月(未経験からWebエンジニア)
– 転職前に、10ヶ月ほどプログラミングスクール受講(主に、Ruby, Railsを学習)
– 以下のポートフォリオを作成できるレベル
[個人開発】服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースしました](https://qiita.com/jinta_02/items/329abd44056277a17d739)

## 受験のきっかけ
エンジニアに転職して実際にサービス開発に携わる中で、チームメンバーが書いているコードを理解できない部分があったので、もう少しRubyの文法だったりライブラリについて学ぶ必要があると感じたからです。また、学習するなら何か形に残るものにしたかったのと、R

元記事を表示

OTHERカテゴリの最新記事