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

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

Ruby + Rspec – テスト失敗のエラー時にアフターフック処理して赤文字でカスタムメッセージを標準出力する ( example単位 )

after each の中で exception を参照すれば検証失敗エラーのときだけに何らかの処理ができる

通常Rspecはどのように検証が失敗したかを丁寧に表示してくれるが
テストの構成上、標準出力で詳細が分かりづらい場合はアフターフックを仕込んで、何か標準出力させておくとデバッグがしやすいかもしれない

( たとえば Rails の Requestのテストの時に response body を標準出力するなど )

# 例

“`rb
describe ‘Test’ do
after(:each) do |example|
if example.exception

puts “\033[31m” # 赤字開始 – 標準出力で文字色を付ける

puts example.full_description # Test It Description
puts example.description # It Description
puts example.location # /path/to/spe

元記事を表示

クラウドテックをRails6.1からRails7.0へアップグレードしたので、やったことをまとめてみました

この記事は クラウドワークス[Advent Calendar 2023](https://qiita.com/advent-calendar/2023/crowdworks)の9日目の記事です。

# はじめに
株式会社クラウドワークスの@uichiです。和食作りに日々励んでいます。
エンジニアとして[クラウドテック](https://crowdtech.jp/)というフリーランスと企業をマッチングするエージェントサービスを開発しています。

クラウドテックは2023年11月に、Rails6.1からRails7.0へとアップグレードしました。アップグレード時点でRails7.1がリリースされていましたが、既にRails7.0アップグレードのための変更対応を一通り行いレビュー状態になっていたことと、7.1に対応するためには新たな変更が必要になるため7.0までとしました。

本記事では、Rails6.1からRails7.0へ移行するために行なったことをまとめます。

# Rails7.0に依存するgemのアップグレード
`Gemfile`のRailsバージョンを指定している箇所を`gem

元記事を表示

AWS QuickSightSDKのGenerateEmbedUrlForRegisteredUserで埋め込みURLを発行し、グラフを表示させる

# はじめに
この記事はシーエー・アドバンス9日目の記事です!

今回はバックエンドに利用しているrailsから、QuickSightSDKの[GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/ja_jp/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)を利用して、QuickSightの埋め込み用URLを発行し画面にグラフ(ダッシュボード)を表示させてみます。
QuickSight自体、グラフのURLを全体公開にしてサイトに埋め込むことはできるのですが、それではURLさえわかれば誰でもグラフを見れる状態でよくないので、埋め込みURLを発行して表示させる方法をとります。

## 前提条件
– AWSアカウントを所持していること
– QuickSightでアカウント登録していること
– 24$/月ぐらいかかります
– [料金 – Amazon QuickSight \| AWS](ht

元記事を表示

【Next.js×Rails API】レコメンド機能「あなたにおすすめのガジェット」を協調フィルタリングを使って実装する

# 概要
– Next.js×Rails APIのSPA構成で、ガジェットの情報交換ができるSNSを構築している
– ログインユーザーに対して「あなたにおすすめのガジェット」をレコメンドする機能を実装したので、備忘も兼ねてまとめる
– 最終的なコードは[こちら](#実装)

# 環境
– Backend
– ruby 3.0.2
– rails 6.1.4 (APIモード)
– Frontend
– react 18.2.0
– next 13.1.6

# 基本的な機能
当SNSでは、ユーザーがそれぞれ自前のガジェット情報を投稿し、それに対して他のユーザーが
– いいね
– ブックマーク
– レビューリクエスト
– コメント

といったアクションをすることで、交流が可能となっている。

### 投稿されたガジェットのイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948830/cef77574-f32a-8d97-401e-03e7c2346c

元記事を表示

[Ruby] メソッドとSymbolとProcの関係について

# はじめに

Railsを用いた開発を進めている中で、ブロックを渡すはずのメソッドにシンボル形式のメソッドを渡している処理を見かけました。

今までも同様の記述は見たことがあったのですが、なぜシンボル形式のメソッドを使用するのかよく理解していなかったので、この機会にメソッド・Symbol・Procについて調べてみました。

# Enumerable#collectを使用した例

Rubyリファレンスマニュアルには下記のようなcollectメソッドの使用例が記載されています。

“`rb
p (1..3).collect { “cat” } # => [“cat”, “cat”, “cat”]
“`
> 各要素に対してブロックを評価した結果を全て含む配列を返します。

上記の例だと`(1..3)`の各要素に対して`{ “cat” }`を適用するため、戻り値が`[“cat”, “cat”, “cat”]`となるわけです。

一方で、ブロックの記法を用いず、シンボル形式のメソッドを渡す書き方もあります。
“`rb
p (1..3).collect(&:to_s) # => [“1”,

元記事を表示

【Rails】部分テンプレートのlocalsオプションについて

## 部分テンプレートとは
・RailsではViewをerbファイル(EmbeddedRuby: 埋め込みRuby)で記述できる。
・erbファイルでは共通のパーツを部分テンプレートとして切り出せる。

## 部分テンプレートの使い方
### 作成の仕方
“`ruby: app/views/my_partials/_my_partial_hoge.html.erb

hogeの部分テンプレートです

“`

### 呼び出し方
“`ruby: app/views/sample.html.erb
<%= render partial: 'my_partials/my_partial_hoge' %>
“`
※ パスはviews配下から
※ partial:オプションは、省略可能。

## 本題: 部分テンプレートのlocalsオプションについて
部分テンプレートではlocalsオプションで、部分テンプレートに変数を渡すことができる。

“`ruby: app/views/my_partials/_my_partial_hoge.html.erb

<%= titl

元記事を表示

運ゲー化していた動的UIのテストをリトライするためにrspec-retry_ex gemを導入しました

## 発生した問題

私たちが扱うプロダクト内では、ユーザーの入力値に基づき表示が変化する動的なUIが存在します。
このフロントエンドのテストはRSpecを用いて行っていました。

しかし、このような動的UIの自動テストは、何回かに1回の確率で落ちてしまい、GREENになるかどうかがある意味「運次第」となる傾向がありました。

## 問題が発生することの課題

変更していない箇所に対してテストが落ち、CIツールの画面上で「Retry」をすることは開発スピードの足を引っ張ります。
そこで、落ちやすいテストに関して自動でリトライしてくれるgemを導入しました。

## 対象となるテスト

“`ruby
example ‘試算ができないこと’ do
visit(‘/try/input’)
fill_in(‘simulation_postcode_1’, with: ‘100’)
fill_in(‘simulation_postcode_2’, with: ‘0102’)
sleep(1)
expect(page).to have_content(‘申し訳ございません

元記事を表示

Webアプリケーションのシークレット管理のあれこれ

# はじめに

この記事は [VR法人HIKKY Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hikky) の8日目の記事です。
前日は [【VketCloud】その壁の設計、抜けられますよ](https://magazine.vket.com/n/na670c53bd2c6) です。VketCloudに限らない、ゲーム制作やワールド制作全般に言える知見でしたね。

# TL;DR
– GitHubにセキュアな文字列を平文でコミットしないためにやった施策の紹介
– 結局環境変数に回帰する運命なのか

# 様々なシークレットの管理方法

リポジトリに機密性の高い情報を平文で上げてはいけないのは、様々な先人の事例から明らかです。
どのように機密情報をCIフレンドリーに扱えばよいか、その方法は様々です。
本稿では最近のプロジェクトで使っている事例を紹介します。

## Case1: Rails credentials

Rails5.2以降で使えるcredentialsに値を格納する方法です。

https://m

元記事を表示

rails deviceを使用したメールアドレス変更

## はじめに
deviceを使用したメールアドレス変更機能を実装する機会があったので、学んだことをメモに残します
主に、GitHubで公開されているdeviseのコーディングを追う際のメモとしてきさいしていきます

## 実装内容
・メール認証を挟んだメールアドレス変更を実装したい
(今回はメールアドレスを変更できるのはログインしている状態のみ)

処理の流れは以下

新しいメールアドレスを取得

認証URLを含む認証メールの送信

認証できたらメールアドレス変更

## 前提事項
・既にdeviseが導入されている環境
・メール認証を含む新規登録〜ログインまで実装済み
(confirmable機能はすでに実装済み)

## 実装手順
### ①データベースへの項目追加
confirmable機能が利用するデータ項目を追加してあげる必要があります。

メールアドレス変更で使用するカラムは“`unconfirmed_email“`

“`app/db/migrate/20230603034400_add_column_to_users.rb
class AddColumn

元記事を表示

Rails 7系、esbuild、TailwindCSS、Postgresqlを用い、Docker Composeで環境構築する

## はじめに

この記事は[RUNTEQ Advent Calendar 2023](https://qiita.com/advent-calendar/2022/runteq) 8日目に参加しています。

初めまして。

プログラミングスクールRUNTEQで10ヶ月学習し、現在個人開発でアプリを作成中の土井と申します。

今回のテーマは「初めて学んだ技術」ということで、個人開発の際にDockerを用い開発環境を作成したので、環境の紹介と各種ファイルの説明をしたいと思います。

今後この環境でDockerを立ち上げようとしている方へ少しでも参考になるようにわかりやすく書ければ、と思っています。

また、この環境通りに行いエラーやうまくいかなかった点、間違っている点などございましたらコメントにてご指摘いただけると幸いです。

使用環境

– MacbookAir (M2)
– Ruby 3.2.2
– Rails 7.0.8
– esbuild
– tailwindCSS
– postgresql

## そもそもDockerとは?

Dockerは、アプリケーションを開発・配置・実

元記事を表示

【Ruby on Rails】RSpec(rspec-rails)を使ってみよう

## まえがき

本記事は、**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 8日目記事です。

Ruby on Railsを中心に、DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

## はじめに

こんにちは、DMM WEBCAMP メンターの @ukwhatn です。

本カレンダー4回目の担当日となりますが、今日はRuby on RailsにおけるRSpecの使い方について説明していきます。

## RSpecとは?

RSpecは、Ruby 向けの BDD(Behavior-Driven Development=振る舞い駆動開発)フレームワークです。

主にRubyで書かれたアプリケーションの挙動・機能をテストするために利用され、人間が読みやすい形式でのテストコード記述によって「テストからアプリケーションの振る舞いがわかる」というメリットも持っています。

詳しいことは他の記事におまかせしますが、要は「テストを簡単

元記事を表示

【コードリーディング】Turbo Driveによるリクエストの「インターセプト」はどう行われているのか調べてみた

# はじめに
本記事は錆びかけたRailsの知識を頑張ってアップデートするアドベントカレンダー7日目です。

引き続き猫Rails様の[猫でもわかるHotwire入門 Turbo編](https://zenn.dev/shita1112/books/cat-hotwire-turbo)の一説に、以下のような文章がありました。

>Turbo DriveはTurbolinksの名前を変えたもので、基本的な機能はTurbolinksと同じだよ。リンク、フォームのリクエストをTurbo Driveがインターセプトして、fetchによる非同期リクエストに差し替える。

ここを読んだ時、

:rolling_eyes: 「『インターセプト』ってどういうことだろう?」

と疑問に思いました。

そこで今回は、Turbo Driveによるリクエスト ~ レスポンスの流れと、実際のTurbo Driveのコードでどのようにそれが実現されているかについて見ていきます。

前提として「猫でもわかるHotwire入門」は非常にわかりやすく、悩むことなく実装を進められています。
その中でも「こう考えた方が理解

元記事を表示

【Rails7】RailsアプリケーションのDocker化 + GitHubActionsでCIを設定する

# はじめに
`Rails`のみのアプリケーションを作成したけど、その後の`Docker`にマウントさせる方法と`GitHubActions`による`CI`設定がわからない、、、という人向けに**ハンズオン形式**で流れをまとめてみました。

# Railsアプリケーションの開発環境
– Ruby 3.2.2
– Ruby on Rails 7.0.8
– PostgreSQL
– esbuild(バンドラー)

# Railsアプリケーションの作成

“`javascript
rails new mount_docker -j esbuild -d postgresql
“`
“`javascript
cd mount_docker
“`

# Dockerの設定

作業ディレクトリ直下に`Dockerfile`を作成します。
“`ruby
touch Dockerfile
“`

“`Dockerfile
FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y nodejs postgresql-cl

元記事を表示

【Rails】開発中にターミナル上へのログ出力が煩わしかった際のメモ

とある案件開発の際、ローカル開発環境にてpメソッドなどを利用しつつ処理の大まかな流れを軽く追いたいが、
処理の性質上ターミナル上に大量のログが出力されてすぐに埋もれてしまう…という状況に遭遇した際のメモになります。

## 解決法
ログレベルを一時的に変更し、(確認時の自分にとって)不要なログをターミナル上に表示させないようにすることで今回の確認をスムーズに進めることが出来ました
“`ruby:config/environment/development.rb
Rails.application.configure do
config.log_level = :error
end
“`
developmentモードでの現状のログレベルを確認したところ、特に設定がされていませんでした。
設定がない場合ログレベルは:debugとして動作する=全て出力されるようです。

このログレベルを一時的に当案件のproductionモード時と同様の:errorに設定してみたところ、期待通りに例外発生時などを除いてターミナル上にログが出力されなくなりました😄

さらに、pやputsメソッ

元記事を表示

GitHubActionsによるRSpec・RuboCopのCI設定

# はじめに
`GitHubActions`による`RSpec`・`RuboCop`の`CI`設定を備忘録的にまとめていきます。

https://docs.github.com/ja/actions

# 開発環境
– Ruby 3.2.2
– Ruby on Rails 7.0.8
– MySQL
– Docker

# gemの導入

“`ruby
group :development, :test do
gem ‘rspec-rails’
gem ‘rubocop’, require: false
end
“`
“`ruby
bundle install
“`
“`ruby
rails g rspec:install
“`
# CIの設定
“`yml
name: Continuous Integration # ワークフローの名前を定義しています。

on:
push: # GitHubにpushされた時にワークフローを起動します。

jobs:
rspec:
runs-on: ubuntu-latest # 実行環境として最新のUbunt

元記事を表示

[Rails] ActiveModelは何をしているのか

ActiveModelはActiveRecordっぽいオブジェクトを作るために使えるという程度の認識だったので、少し理解を深めたくて調査しました。この記事では、ActiveModel::Dirtyに焦点を当てます。

## 代表的な使い方

https://api.rubyonrails.org/classes/ActiveModel/Dirty.html

“`ruby
class Person
include ActiveModel::Dirty

define_attribute_methods :name

def initialize
@name = nil
end

def name
@name
end

def name=(val)
name_will_change! unless val == @name
@name = val
end

def save
# do persistence work

changes_applied
end

def reload!
#

元記事を表示

【Ruby】便利なEnumerableについて

## はじめに
“Enumerable” は “enumerate”(列挙する)に由来し「列挙可能な」という意味です。

`Array, Hash, Range` 等のクラスに `Enumerableモジュール` はインクルードされており、代表的なのは、 `each、map、select` 等です。実際に業務で使って便利だなと思ったものを含めて整理したいと思います。

## 便利なメソッドたち

### [include?](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/include=3f.html)
`==`の関係が成立する時にtrueを返します

“`ruby
[1, 2, 3].include?(2) # => true
“`

## [all?](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/all=3f.html)
全ての要素が真である時にtrueを返します。そうでない時はfalseを返します。

“`ruby
[1, 2, 3].

元記事を表示

インスタンスメソッド/クラスメソッド/モジュールの状況別呼び出し方

# インスタンスメソッドとクラスメソッドの呼び出し方

プログラミングにおいて、メソッドの呼び出し方は、そのメソッドがインスタンスメソッドなのか、クラスメソッドなのかによって異なります。ここでは、これらのメソッドをさまざまな状況でどのように呼び出すかについて解説します。

## インスタンスメソッドをクラス外で呼び出す

インスタンスメソッドは、クラスのインスタンスを介して呼び出します。まずはクラスのインスタンスを作成し、そのインスタンスを通じてメソッドを呼び出します。

“`ruby
class MyClass
def instance_method
puts “インスタンスメソッドです”
end
end

# インスタンスを生成
my_object = MyClass.new
# インスタンスメソッドを呼び出す
my_object.instance_method
“`

## クラスメソッドをクラス外で呼び出す

クラスメソッドは、クラス自体をレシーバとして呼び出します。インスタンスを生成する必要はありません。

“`ruby
class MyClass

元記事を表示

【超初学者向け】VScode拡張機能まとめ

### 主にRailsでコーディングするときに便利な拡張機能まとめ
– Auto Close Tag
– 閉じタグ勝手に書いてくれる
– Code Spell Checker
– 変数名とかが英単語として正しいスペルかチェックしてくれる
– endwise
– endを勝手に書いてくれる
– Highlight Matching Tag
– ペアになってる開始タグと閉じタグを見やすくカラーリングしてくれる
– HTML End Tag Labels
– 閉じタグに開始タグの名称を表示してくれる
– indent-rainbow
– インデントレインボー
– Rails DB Schema
– schemaからdb関連の予測変換
– Rainbow End
– rubyファイルの開始と終了をカラーリング
– Beautify
– erbファイルのフォーマットとかできる
– RuboCop
– rubyファイルのフォーマット
– SQLite Viewer
– SQLファイルの中身を直接vscodeから

元記事を表示

Rails × Google Cloud Vision API を使って画像解析してみた

# はじめに
「RUNTEQ Advent Calendar 2023」の7日目を担当させていただきます🎄
今回は初めて個人開発のアプリを作成するにあたり、技術検証としていくつかのAPIを触ってみましたので、記事にしてみました。
その中で画像解析してくれる「Google Cloud Vision API」が面白かったので紹介します。

# 今回のゴール
画像データをAPIに送って色情報を解析してもらい、結果を画面に表示する。
(この画像にはどんな色がどれぐらいの割合で占めているのか〜的な)

# 前提
::: note
ローカルの開発環境にて技術検証用のお試しアプリ作って触った流れを紹介します🙏
まず動かすことを目的としたので、コードが鬼汚いです。
:::

使用技術
・Ruby on Rails:7.1.2
・gem “carrierwave”(アップローダー作成・カラム紐付けまで完了済み)
・gem “dotenv-rails”
・gem “google-cloud-vision”

# 目次
・Google Cloud Vision APIとは?
・準備
・実装
・画像を解析して

元記事を表示

OTHERカテゴリの最新記事