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

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

古いバージョンのNodeやRubyで作ったアプリをherokuでデプロイする際の設定

## この記事の内容
### 起きたこと
herokuを使って講座で作成したWebアプリをデプロイしようしたところ、なにやらたくさんエラーが起こりました。
おきたエラーの詳細はエラー詳細に記載しています。

### 前提(バージョンなど)
– Ruby:2.7.7
– Rails:6.0.6.1
– Node.js:14.15.0
– Windows11でUbuntu(WSL2)を導入

### 原因
– Rubyのバージョンがherokuの最新バージョンに対応していなかった
– Nodeのバージョンがherokuが標準で使用するバージョンと異なっていた
– buildpackを導入していなかった

## エラー詳細1
### エラーメッセージ
“`
!
! The Ruby version you are trying to install does not exist on this stack.
!
! You are trying to install ruby-2.7.7 on heroku-22.
!
! Ruby ruby-

元記事を表示

RSpecで快適にテストを書こう!初心者から上級者まで使える15のテクニック

## はじめに

RSpecは Ruby on Rails アプリケーションでよく使用されるテストフレームワークです。しかし、初めて触れる方にとっては少し難しく感じるかもしれません。この記事では、RSpecの基本から応用まで、15の章に分けてわかりやすく解説します。各章では、具体的なコード例と詳細な説明を提供し、RSpecの理解を深めていきましょう。

## 1. RSpecの基本構造

RSpecのテストは通常、`describe`ブロックで始まります。これはテスト対象を示すもので、クラスやメソッド名を記述します。その中に`context`ブロックを置き、特定の状況や条件を表現します。実際のテストは`it`ブロックの中に書きます。

“`ruby
describe User do
context ‘有効なユーザーの場合’ do
it ‘バリデーションが通る’ do
user = User.new(name: ‘山田太郎’, email: ‘yamada@example.com’)
expect(user).to be_valid
end

元記事を表示

Ruby on Railsの実務(viewの修正業務)をはじめるときに読んでほしい記事

## はじめに

株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。

弊社では、未経験エンジニア・学生インターン生の方が多くRuby on Railsを勉強しているので、入社後はまずRuby on Railsのプロジェクトにアサインし、初日から自社サービスのセットアップ・業務コードを書かせるようにしています。

※ シンシアにおける働き方の様子はこちら

https://www.wantedly.com/companies/xincere-inc/stories

初日からコードを書いて、PRを出すようにしているのですが、初日はまずは簡単なviewの修正業務をしてもらうことが多いです。

Viewの修正業務は

– 修正するファイルを特定する
– classやstyleを修正する

というステップですが、今回は特に**修正するファイルを特定する**ということに焦点を当てて記事を書いていきます。

この記事は

– Ruby on Railsを学び終わったばかりの人でRuby on Railsの業務(Viewの修正業務)を任された人

元記事を表示

Ruby on Railsでコネクションプールを導入したredis-rbの導入方法

# 始めに

Ruby on Rails では、Redis を利用して一時的に値を保持するケースが多々あると思います。(たとえば、カート情報の管理やカウント処理など)
もし Redis の String 型のバリューのみで要件を満たせるのであれば、[Railsのキャッシュ機構(低レベルキャッシュ)](https://railsguides.jp/caching_with_rails.html#%E4%BD%8E%E3%83%AC%E3%83%99%E3%83%AB%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5)を利用するだけで、Redis を簡単に扱うことができます。

Rails の `cache_store` に `:redis_cache_store` が設定されている前提で、以下のように Redis を利用できます。
“`ruby
# 取得
Rails.cache.read(key)

# 保存
Rails.cache.write(key, value)

# 削除
Rails.cache.delete(key)
“`
しかし、も

元記事を表示

Rails マイグレーションで1個のテーブルの特定のカラムの照合順序を変更する

# 例

マイグレーションの正当な構文で実現できる方法が見つからなかったため、SQLを直接実行してしまう

“`rb
class ChangeCollation < ActiveRecord::Migration[7.2] def up execute('ALTER TABLE example_table MODIFY `column_name` VARCHAR(255) COLLATE utf8mb4_bin') end end ``` `ActiveRecord::Base.connection.execute` ではなく `execute` だけで書けるようだ # schema マイグレーションを実行すると schema.rb の情報も変わってくれる ```rb create_table "example_table", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "column_name", collation:

元記事を表示

【Ruby on Rails】ルーティングで困ったroutes.rbについて振り返ってみる

こんにちは。あがさんです!!

見様見真似でRuby on Railsの学習をしています。
Railsガイドやチュートリアルが丁寧に教えてくれるので、分からない点があってもなんとなくアプリケーションが出来上がってしまいます。(凄い!けどなんとなくは良くない)

今回はRailsでアプリケーション開発をしていた際に、苦手意識を持っていたroutes.rbと
親の顔よりも見たlocalhost:3000/rails/info/routesのページについて触れていきます。

## ルーティング とは
Ruby on Railsにおいて、アプリケーション内のURLをコントローラのアクションに結びつける仕組みのことです。config/routes.rbファイルで定義します。
下記は簡単なroutes.rbのファイルです。

“`routes.rb
Rails.application.routes.draw do
# CRUD routes without using resources
get ‘users’, to: ‘users#index’
get

元記事を表示

キャッシュ機能の差でActiveStorageではなくCarrierwaveを使うことにした

## これは何?
railsのファイル管理機能で、ActiveStorage vs Carrierwave論争はよく聞く。

> [Ruby on Rails】ActiveStorageの概要とその利点、弱点](https://zenn.dev/s17w09/articles/d91b274b2f2116)
> [ActiveStorage vs CarrierWave](https://qiita.com/w5966qzh/items/510d4c2a3829524b2e64)
> [画像管理をActiveStorageからCarrierWaveへ乗り換えた話](https://tech.dely.jp/entry/2019/12/22/145733)
> [Catch allルーティングとActive Storage](https://qiita.com/jkr_2255/items/60d4e5859a711258f97c)

プレビュー機能の実装にはCarrierwaveのキャッシュ機能が必要だったので、備忘録として記述する。

## 要件
### 開発アプリケーション概要

元記事を表示

DockerでRailsとMySQLの開発環境を構築する方法

## はじめに
今回、Rails 7とMySQL 8.0の開発環境を構築する際にDockerを使用してみました。環境構築の手順を具体的に説明しながら、注意点やエラー解決の方法についての説明していきます。

## 必要なファイルの作成
まずは、以下のコマンドを使用して、必要なファイルを作成します。
“`
touch Dockerfile docker-compose.yml Gemfile Gemfile.lock entrypoint.sh
“`
このコマンドは、zshシェルを使用している場合にファイルを5つ一度に作成するためのものです。

## Dockerfileの設定
次に、Dockerfileの内容を以下のように記述します。
“`
# Rubyの公式イメージを使用
FROM ruby:3.2.5
ARG RUBYGEMS_VERSION=3.3.20

# 作業ディレクトリを指定
WORKDIR /myapp

# ホストのGemfileをコンテナ内にコピー
COPY Gemfile Gemfile.lock /myapp/

# bundle installを実行
RU

元記事を表示

【Rails】ボタン内でtextを改行して上と下で別のclassを指定したい。

## こういうボタンを作りたいときに困ったので

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3723972/60608f54-925a-9ae6-f20e-76b524add04a.png)

## 書き方が分からなかったので試行錯誤した

“`ruby:qiita.erb
<%= submit_tag "規約を確認のため、\n投稿する", class:'hobehoge',name:nil %>
“`
のように書くと改行はできるけど、こんな感じになってしまう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3723972/67bba1e5-3f1d-d56c-fe78-e57428bd4bf8.png)

「規約を確認の上、」の部分と「投稿する」の部分で別のcss定義を反映したい。

“`ruby:qiita.erb
<% submit_label "

元記事を表示

RailsのMinitestで処理実行前後の差分テストをスマートに書きたい

# ざっくりで言うと
処理実行前後の差分テストを行う時は、以下のメソッドを使うって話です。
– assert_changes
– assert_difference
– assert_no_changes
– assert_no_difference

# どれぐらいスマートに書けるか
以下二つのテストコードを比較してください。
## 上記のメソッドを使わなかった時
“`ruby
test ‘ユーザーを作成’ do
before_count = User.where(‘hoge’).count

# ユーザー作成処理
post users_path, params: { name: ‘hoge’ }

after_count = User.where(‘hoge’).count

assert_equal(1, after_count – before_count)
end

test ‘ユーザーをプレミアム会員に変更’ do
before_grade = User.find(1).gread
assert_equal before_grade, ‘REG

元記事を表示

hamlでリンク先に飛べるボックスを作る方法

# はじめに
今回は、railsにてhamlを用いてXのリンク先に飛べるボタンを作り方を簡単にまとめたいと思います。

# 1.HAMLでのリンク生成
まず、HAMLファイルでリンクを生成する方法についてです。
以下のコードでXとInstagramとTikTokリンクに飛べる箱ができます。
“`
= link_to ‘X’, ‘‘, target: ‘_blank’, class: ‘box’, rel: ‘noopener’
“`
###### 簡単な説明
* link toヘルパーで指定したテキストが表示されます。上記の場合「X」のテキストで表示されます。
* link toの隣にリンク先のURLを記入します。(直接記入する場合)
* target: ‘_blank’ で新しくタブを開いて表示してくれます。
* class でcssを適応させるようにします。
* rel: ‘noopener’ も追加することでセキュリティを向上させることができます。

# 2. コントローラー設定
hamlで直接リンクを挿入した場合、コントーラーファイルに以下のコードを設定する

元記事を表示

【個人開発】詐欺被害を減らしたい!詐欺を未然に防ぐためのアプリ「詐欺師の手帳」を開発しました📒

## はじめに
こんにちは! yukimuraと申します
未経験からのWebエンジニア転職を目指して、2023年11月からプログラミングスクール「RUNTEQ」に入学し、Ruby on Railsを中心にプログラミング学習を行っております。

今回「詐欺師の手帳」というアプリをリリースしました。
詐欺被害を未然に防ぐことを目的としております。

## アプリ紹介
[![Image from Gyazo](https://i.gyazo.com/7f2c2cfc4ad0b3f2699ed538ab8fc41a.png)](https://gyazo.com/7f2c2cfc4ad0b3f2699ed538ab8fc41a)

### サービスURL(レスポンシブ対応済)
https://scammers-notebook.com/
### GitHub URL
https://github.com/yuki51b/scammer-s-notebook

## 開発背景
 自分自身や家族、友人などが詐欺被害に遭った経緯から、詐欺は身近であると同時にYoutubeなどで多くの人が詐欺に引っ

元記事を表示

【Rails】Minitestでのスタブとモックの使い方 入門

# はじめに
この記事は、RubyやRailsプロジェクトでMinitestを使ったことがあるけれど、スタブやモックについて理解がちょっと曖昧かも…という方のためにスタブやモックの基本的な考え方、使い方を解説するものです。

# スタブ、モックってそもそも何?

まずは、言葉の意味や基本的な使い方を見ていきます。

### スタブとその使い方
スタブというのは、「代用品」みたいな意味合いで使われます。Minitestでは主に、メソッドスタブというものを用意します。つまり、「代用メソッド」ですね。以下のように、自分の好きなようにメソッドの戻り値をセットできます。

“`ruby
require ‘test_helper’
require ‘minitest/autorun’

# 自己紹介ができる「パーソン」というクラスを例に取る
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end

def introduce_mysel

元記事を表示

退職して560万円相当の工数をかけてお金を稼ぐサービスを開発した

※ 前職の月額単価80万円を基準に、7ヶ月分の工数として560万円相当と換算。

## [BizRank](https://biz-rank.com/)

![BizRank – モック](https://github.com/user-attachments/assets/969e52bf-5e14-44af-8f37-f231edf5d791)

![BizRank – モック2](https://github.com/user-attachments/assets/073e69e6-ee6b-496a-9ebb-b6807519cebb)

※キャッシュがなくてコールドスタートとなる場合があります。その場合レスポンスが返るまでに2~3分ほどかかります。ご了承ください。

ビジネス書籍を紹介するサービスです。

自分が書籍を購入する際に、SNSでバズっている書籍をなんとなく購入しがちという所から、影響力ある人が薦める、おすすめの一冊を独自のアルゴリズムで評価してランキング形式で紹介します。

1月から退職して設計を始めて8月27日に人生初サービスをリリースする事ができました。

元記事を表示

Railsの`serialize`を使ってオブジェクトを簡単に保存・読み込みする方法

#### はじめに

Railsで開発を行う際、モデルの属性としてハッシュや配列などの複雑なデータを扱いたい場面があります。そのような場合、Railsの`serialize`メソッドを使うことで、手軽にオブジェクトをデータベースに保存し、また読み込むことが可能です。この記事では、`serialize`の基本的な使い方と注意点について解説します。

#### `serialize`の基本的な使い方

`serialize`は、モデルの属性をオブジェクトとして保存するためのメソッドです。通常、データベースのカラムは文字列や整数などの単純なデータ型を想定していますが、`serialize`を使用すると、これを簡単に回避できます。

例えば、`preferences`という配列を`User`モデルの属性として保存する場合、以下のように定義します。

“`ruby
class User < ApplicationRecord serialize :preferences, Array end ``` この場合、`preferences`はデータベース上ではテキストとして保存されますが、R

元記事を表示

AWS-S3のSSL認証エラーのデバッグ

## この記事の内容
ストレージとしてS3を使おうと思ったのに、保存ができなかったので調べつつデバッグしました。
備忘録として対応内容を残します。

### 環境
– Windows11にUbuntsを入れて実行
– WSL2を使用

## エラーの詳細

### エラーが発生する状況
– article/id/edit の画面で画像ファイルを添付し、保存ボタンを押すタイミングで発生
– 保存先のストレージを`:local`から`:amazon`に変更後に発現

### エラーの内容
“`
Seahorse::Client::NetworkingError – SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate):
app/controllers/articles_controller.rb:33:in `update’
“`

– 下記はchatGPTにエラーメッセージの内容を確認した際の返答
>Seahors

元記事を表示

Railsのreplicaの負荷分散を自作Resolverで実現する

Railsでは6.0から複数データベースへの対応を開始しました。
primaryと単一replicaのへの接続が実装されており、GETリクエストをreplicaで処理することなどで負荷分散を行うことができます。
しかし、複数のreplicaを利用しての負荷分散は実装されていません。

https://railsguides.jp/active_record_multiple_databases.html#replica%E3%81%AE%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3

とはいえ、ちょっと工夫をすると簡単に行うことができるので実際に作成してみましょう。

:::note info
※ 以下の文章は [Active Record の複数データベース対応](https://railsguides.jp/active_record_multiple_databases.html) を一度読んでいただいているのが前提になります
:::

## 以下のような手順で行います。

– 複数のreplicaの定義
– モデルとの関連付け
– resolverの定

元記事を表示

current_user関係のN+1を解決したい

# まえがき
先日からkindleチックなwebアプリを作っていたところcurrent_user関係のN+1問題にぶち当たったので解決方法等をまとめておく

# あらすじ
機能として「ログインなしでもセッションを使ってカートに商品は入れられるけど、ログインするときにセッションが残ってたらマージしてユーザーのカートと統合する」みたいなものです。

要するに、ログインなしの情報をユーザに引き継がせるみたいな。
(電子書籍を扱う想定なのでユーザーは同じ電子書籍を2つ以上変えません)

# コード
以下の想定。application_controller.rbでセッションの有り無しを判別して、
存在する場合はcartモデルの`combine_and_destroy_other_cart!`を呼ぶ。
内容としては
– 過去に注文していないもの
– カートに既に存在してもの

以上を満たすものをユーザーのカートに追加する。

その後セッションを破壊する。
以下詳細
### モデル
“`ruby
class User < ApplicationRecord # Include default

元記事を表示

コメントした人のアバターを並べて表示するためのコード

## この記事の内容
デイトラWeb開発コースの課題で以下のようなものがあり、結構手間取ったので実装した方法を残します。

![スクリーンショット 2024-09-01 215629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3875060/d12a6c00-8d03-08d0-cae8-aedea1433b88.png)

### 使っている技術とバージョン
– Rails 6.0.6.1
– ruby 2.7.7
– scss

### モデルの関係性
– UserモデルにTaskモデルが1対Nの関係で紐づいている
– Userモデルにavatarの画像が保持されている
– CommentsモデルはUserモデル、Taskモデルとそれぞれ1対Nの関係で紐づいている
– UserモデルにはBoardモデルも1対Nの関係で紐づいており、BoardモデルにはTaskモデルが1対Nの関係で紐づいている

### 得たい成果
– `views/tasks/index.html.haml`上に記事の作成

元記事を表示

【個人開発, 生成AI】エンジニア面接練習用アプリを作りました(概要紹介)

## はじめに

こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)です。

この度、[**「面接シミュレータR**」](https://interview-frontend-05a5d7363eca.herokuapp.com/)というミニアプリを開発しました!

AIを活用したリアルな面接シミュレーションを通じて、未経験エンジニアや転職希望のジュニアエンジニアの皆様の**面接スキル向上**をサポートします。

## サービスURL

https://interview-frontend-05a5d7363eca.herokuapp.com/

## Githubリポジトリ

https://github.com/MaTTalv001/Interview_simulator2

## テーマ選定理由

以前、人事部門での勤務時に、数多くの面接やキャリア相談を担当させていただきました。この経験を通じて、求職者が面接で直面する特有の困難さや、準備不足による不安を目の当たりにしました。異動して現在の部署にいる今でも、その時に感じた課題を解決したいという

元記事を表示

OTHERカテゴリの最新記事