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

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個

元記事を表示

Slimにおいて、コメントアウトが原因で表示されない箇所があった問題

# 結論
Slimのコメントアウトの仕様を理解していなかったため、コメントアウトが想定外に適用されてしまっていた

# 状況
– 一見して構文としては間違っていないはずなのに表示されない部分がある
– この問題に直面する前、別件のエラーがあり対応をしていた
– そのエラーの調査のためにコメントを追加したり少し手を加えていた

## 詳細
– 以下のようにコメントを追加していた
– `/ not error START`、`/ not error END` というコメントを追加してエラー箇所を絞り込むように調査していたためこのようなコメントが残っていた

1. 単に「コード説明目的のコメント」として使いたかった
1. コメントが見やすいように一番左に寄せて書いた

“`slim:サンプルコード
article.blog-post
h1.blog-title AIを使ったコード生成:プログラミングの新時代

section.published-at
time
= l(article.published_at? ? article.publish

元記事を表示

【Rails6.1】ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: )の対処法

## はじめに
Rails6.1へのアップデート中に以下のエラーが出たので、このエラーの対応方法をまとめていきます。
“`ruby
ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: xxxxx)
“`

## 問題
Rails6.1からUTF-8以外を含むPOSTリクエストはエラーが出るようになったようです。

> Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.

https://github.com/rails/rails/blob/6-1-stable/actionpack/CHANGELOG.md#rails-610-december-09-2020

## 解決方法
skip_parameter_encodingを対象のアクションに対して設定します。
“`ruby
class TestController < ApplicationCon

元記事を表示

FactoryBotの基本的な使い方

# はじめに

こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。

現在、私はRSpecを使ってモデルのテストコードを書いています。その際にFactoryBotを活用しているため使い方をまとめます。

## 目次
1. [FactoryBotとは?](#factorybotとは)
1. [Gemfileの設定](#gemfileの設定)
3. [FactoryBotの設定](#factorybotの設定)
3. [基本メソッドの使用](#基本メソッドの使用)
・[buildメソッド](#buildメソッド)
・[createメソッド](#createメソッド)
3. [モデルのテストコード](#モデルのテストコード)
4. [最後に](#最後に)

## FactoryBotとは?
FactoryBotは、テスト用のデータを簡単に作成するためのライブラリです。テストケースごとにデータを手動で作成するのは面倒ですが、FactoryBotを使うことで、再利用可能なテンプレートを使って効率的にデータを生成できます。

:::note info
#### メリッ

元記事を表示

RailsとNext.jsの連携(SPA)

# この記事の概要
RailsとNext.jsのSPAの連携方法に絞ってこちらの記事を書いていきます。

# Gemfileにrack-corsを追加
以下のようにまず、Gemを入れます。
“`Gemfile
gem ‘rack-cors’
“`
その後に
“`
bundle install
“`
をします。

# CORS設定ファイルを作成または編集
“`config/initializers/cors.rb“`ファイルを作成または編集します。
“`config/initializers/cors.rb
# Be sure to restart your server when you modify this file.

# Avoid CORS issues when API is called from the frontend app.
# Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.

# Read more: https:/

元記事を表示

Rails7でannotateのgemで自動でアノテーションを付与する

# やりたかったこと
モデルファイルにdbのマイグレーションをした際に自動でスキーマ情報を記載し、わざわざdbを確認しに行く手間を省きたい
“`ruby:こんな感じ
# == Schema Information
#
# Table name: boards
#
# id :bigint not null, primary key
# author_name :string(255)
# body :text(65535)
# title :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class Board < ApplicationRecord validates :author_name, presence: true, length: { maximum:10 } validates :title, presence: true, lengt

元記事を表示

Twi●●er風サービスの日次サマリー機能を例にRuby on Railsでバッチ処理テストを極める

## はじめに

本記事では、Ruby on Railsを使用したバッチ処理の実装とテスト方法について、実践的な例を交えて詳しく解説します。Twitter風のサービスで日次サマリーを生成するバッチ処理を題材に、効果的なテスト手法を紹介します。

## 1. プロジェクトのセットアップ

まず、新しいRailsプロジェクトを作成し、必要なgemをインストールします。

“`bash
rails new twitter_summary_app –database=postgresql
cd twitter_summary_app
“`

次に、`Gemfile`を以下のように編集します:

“`ruby
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

ruby ‘3.1.2’

gem ‘rails’, ‘~> 7.0.0’
gem ‘pg’, ‘~> 1.1’
gem ‘puma’, ‘~> 5.0’
gem ‘bootsnap’, r

元記事を表示

【Rails × YouTube】YouTubeのチャンネル情報を取得する方法

# はじめに
### 本記事ですること
Webアプリを個人開発していて、YouTubeのチャンネル情報を表示したいと思いました。
本記事では、YouTubeが提供しているAPIを利用して下記情報を取得・表示します。

 ・ チャンネル登録者数
 ・ 投稿動画数
 ・ 最新動画
 ・ 最新動画のタイトル

なお、実際の開発経験に基づきますので、非効率なコードや網羅的な説明でないことご容赦ください。
また、railsアプリがある状態を前提とします。

### ながれ
大きく以下の流れで進めていきます。

 1. 準備
 2. 使用

# 1. 準備
### 1-1. プロジェクトの作成
YouTube(Google)のAPI利用には`プロジェクト`が必要です。
下記サイトにアクセスします。

[Google Cloud > APIとサービス](https://console.cloud.google.com/projectselector2/apis/dashboard?hl=ja&pli=1&supportedpurview=project)

利用規約への同意画面が表示された場合は同意

元記事を表示

Ruby2.7から3.2にアップデートした時につまづいたところ一覧

## 重い腰を上げた
プラットフォームの期限切れも近づいており、そろそろRuby2.7→3.2にあげないといけないタイミングになった。
コケたところを備忘録として残す。

### アップデート内容
“`
ruby ‘2.7.6’ → ‘3.2.2’
rails ‘6.0.3’ → ‘~> 6.1′
“`

# 起きた問題一覧

## Macで Ruby 3.2.2 のダウンロードができない
“`terminal
$ bundle install
rbenv: version `3.2.2’ is not installed
$ rbenv install 3.2.2
BUILD FAILED (macOS 14.4.1 on x86_64 using ruby-build 20240727)
“`

下記の記事を元に3.2.2のインストール完了(感謝)
https://qiita.com/orangeQ/items/117826cdf55806f4209c

## bundle update 時の依存関係エラー
### nio4rエラー
“`terminal
$ bundle

元記事を表示

【Rails】aarch64で環境を立ち上げた時にNokogiriのインストールでエラーが発生した件

どうもこんにちは。

今回は、RailsをAWS Elastic Beanstalk環境へデプロイした時に失敗したので、その時の対処方法を備忘録として残します。

# 発生していたエラー

今回、デプロイに失敗した理由が、「**`nokogiri`** gemが正常にインストールできない」ことでした。

“`ruby
An error occurred while installing nokogiri (1.16.7), and Bundler cannot continue.

In Gemfile:
dropzonejs-rails was resolved to 0.8.5, which depends on
rails was resolved to 7.0.5, which depends on
actioncable was resolved to 7.0.5, which depends on
actionpack was resolved to 7.0.5, which depends on
actionv

元記事を表示

【Rails】Railsチュートリアル第6章 復習用

はじめに

今日もチュートリアルに取り組んでいく。
今回はモデルを主に扱っているようだ

Userモデル

・Railsでは、データモデルとして扱うデフォルトのデータ構造のことを **モデル(Model)** と呼びます
・データベースを使うことで長時間データを保存することができる
・データベースをやりとりするライブラリ(テンプレのようなもの)を **Active Record** という
・ActiveRecordにはデータの作成、保存、検索のメソッドが用意されている
・これらをつかうためにSQLを意識する必要がない!!
・**マイグレーション** = Rubyでデータのはいったテーブル(表)を操作する仕組み

Railsにおける属性

・第4章では`attr_accesor`を用いてUserクラスにnameとemail属性を定義した。
・しかしこれはRubyだから必要なのであって、実はRailsでは属性を定義する必要がない(デフォルトでその仕組が提供されている)

モデル作成

・ここでこれらのユーザー情報を保存するモデルを作成する
・Control

元記事を表示

rails7で、Stimulusを使う

## はじめに
自分用の学習メモです。
Stimulusを使って、クリックすると色が変わるボタンを実装します。

## 実装
bootstrapを使って、ボタンを実装します
“`rb

ボタン

“`
  
Stimulusコントローラを作成します。
“`rb
rails generate stimulus btn
“`
これで、app/javascript/controllers/btn_controller.jsというファイルが作成されます。

“`js
import { Controller } from “@hotwired/stimulus”

// Connects to data-controller=”btn”
export default class extends Controller {
connect() {
console.log(“こんにちは!”)
}
}
“`
  
HTMLにStimulusコントローラを適用するには、データ属性を使用します。di

元記事を表示

PG::UndefinedTable: ERRORの解消方法

# PG::UndefinedTable: ERROR
外部キーの追加を行った際に`PG::UndefinedTable: ERROR`が発生。

# エラー内容
“`
PG::UndefinedTable: ERROR: relation “モデル名” does not exist
“`

`$ rails db:migrate:status`で現在のmigrationファイルを確認
“`
Status Migration ID Migration Name
————————————————–
 down 2024xxxxxxxxx1 Create 子
 down 2024xxxxxxxxx2 Create 親
“`
外部キーを設定している場合、親のモデルからmigrationする必要があるが、デフォルトでは古い順から実行されるためエラーになる。

# 解消方法
以下コマンドで参照元である親モデルを先に実行する。
“`
$ rails db:migrate:up VERSION=202

元記事を表示

RailsのN+1問題におけるpreload, eager_load, includesの挙動の違いと使い分け

## はじめに
N+1問題の対策として以下の3つのメソッドが存在することは知っているものの、挙動の違いや使い分けが思い出せずいちいち調べてしまっています。

– `preload`メソッド
– `eager_load`メソッド
– `includes`メソッド

なんとか記憶に定着させたいのでこの記事を書くことにしました。

3つのメソッドの挙動や使い分けについてまとめます。

なおこの記事におけるRailsのバージョンは**7.1.3.4**です。

## N+1問題とは?
N+1問題とは、データベースからのデータ取得時に発生するパフォーマンス上の問題です。

あるテーブルとそれに関連する別のテーブルのデータを一度に取得する際、クエリが過剰に発行されてしまうことを指します。

RailsにおけるActiveRecordのように、ORMを使用するフレームワークでよく発生します。

## N+1問題の具体例
たとえば、記事の投稿者(`User`)とそれに紐づく記事(`Article`)があるとします。

“`ruby
class User < ApplicationRecord h

元記事を表示

Docker 環境で binding.pry を使ってデバッグする方法

## 初めに
Ruby アプリケーションを Docker コンテナ内でデバッグする際に、`binding.pry` を使いたいと思ったことはありませんか?この記事では、Docker 環境で `binding.pry` を設定する手順を解説します。

## ステップ 1: Gemfile に pry を追加

まず、`Gemfile` に `pry-byebug` を追加します。

“`ruby
gem ‘pry-byebug’
“`

これで、`bundle install` を実行

“`bash
bundle install
“`

## ステップ 2: docker-compose.yml の設定

`docker-compose.yml` ファイルを作成または編集して、デバッグ用の設定を追加します。

“`yaml
docker-compose.yml
web:
build: .
command: bash -c “rm -f tmp/pids~

/////↓この2文を追加
stdin_open: true
tty: true
“`

## ステップ 4

元記事を表示

【Rails】【JavaScript】RailsでJavaScriptを利用する方法について

Rails初学者の学習内容の備忘録です。
間違いや補足等あればご指摘いただけると幸いです。

学習を進めている中で「importmap?webpacker?なにが違うんや…」となったので、今回はRailsでJavaScriptを利用する方法についてまとめました。

# RailsでJavaScriptを利用する主な方法
**1.Sprockets**
・主にRails6以前に利用されていた。
・JavaScriptファイルはapp/assets/javascriptsディレクトリに置かれる。
“`application.js
//= require rails-ujs
//= require_tree
“`

**2.Webpacker**
・Rails6より導入され、JavaScriptをモジュールとして管理するために使われる。
・app/javascript/packsディレクトリにJavaScriptファイルを置かれる。
“`application.js
import Rails from “@rails/ujs”
Rails.start()
“`

**3.imp

元記事を表示

OTHERカテゴリの最新記事