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

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

[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とは?
・準備
・実装
・画像を解析して

元記事を表示

Railsのcallback(after_commitエイリアス系)に意地悪されたので先生に言いつけなかった話

これは[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)の5日目の記事です。

# はじめに
はじめまして、株式会社Hubbleのしがないバックエンドエンジニアです。
名乗るほどの者でもありませんので、どうぞお好きお呼びなすってくだせえ。

今回[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)にて、5日目の記事を担当させていただくことになりました。

何書こうかなーと思っていたんですが、
直近で巧妙なトラップに引っ掛かったので、ちょっと ~~愚痴~~ 備忘録も兼ねて残しておこうと思います。

そんなにボリュームもないのでサクッと読んでいただけると思います!

# RailsのActive Record callbackについて
Railsを使っていたらお世話になっている方も多いと思いますが、
せっかくなので、今をときめくChatGPTさんに一言で表してもらいました。
“`
Rail

元記事を表示

Hotwire 以後の accepts_nested_attributes_for

# Hotwire(Rails 7)で、複数の子レコードの保存が簡単になる
[cocoon](https://rubygems.org/gems/cocoon) などの gem を使わなくてよい。JavaScript も jQuery も使わない
ほぼ erb のレンダリング(サーバーサイド)だけでなんとかなります。

has_many、has_one、belogs_to などいわゆる Rails の関連付け(アソシエーション)の概要は把握していることを前提としてます。

検証は、ruby 3.2、Rails 7.1 の環境です
## accepsts_nested_attributes_for は嫌われ者?

そもそも **accepsts_nested_attributes_for** は、関連付けられているモデルをネストさせることで、一度にまとめてレコードの更新ができるようにするメソッドです。1対N(has_many)のデータを html の form で一度にまとめてサーバーに送り、受け取った Rails がよしなに処理してくれます。なかなか便利な仕組みです。

https:/

元記事を表示

Could not configure the build properly (pkg_config). Please install either the `pkg-config` utility or the `pkg-config` rubygem.

## はじめに

Railsでbundle intall実行時に出るエラーの対応方法です。
コンソールの末尾には下記のように表示されました。

`An error occurred while installing sqlite3 (1.6.3), and Bundler cannot continue.`

## 内容

### 環境

– macOS 13.4
– Apple M1
– Ruby 3.2.0
– Bundler version 2.4.18
– asdf v0.13.1

### 解決方法

– `brew install pkg-config`を実行してから
– `bundle install`を再度実行

### 原因

エラーメッセージを添付します。

“`sh
$ bundle install

…省略…

Building sqlite3-ruby using packaged sqlite3.
Extracting sqlite-autoconf-3420000.tar.gz into tmp/arm64-apple-darwin22.5.0/

元記事を表示

db:migrateをちゃんと理解する

このエントリーは [BitStar Advent Calendar 2023](https://qiita.com/advent-calendar/2023/bitstar) の7日目になります。
ここまでの投稿を見ていると自分の働いてる会社はエンターテックカンパニーではなく実はChatGPTカンパニーなのではないかと思い始めていたんですが、そんなことはないと我に返ったのでここでしっかり流れを断ち切りたいと思います。

ということで私からはRailsエンジニア向けに「`db:migrate`って結局何してるの?」という話をしたいと思います。(これ実は意外と知らない人いるのかなって個人的に思っただけなので、当然のごとくそれくらい知ってるよっていう方はスルーしてください)

## 巨大テーブルの操作は何かと気を使う
私自身普段は今年リリースした”BitStar Match”の開発が主な業務になるんですが、少し前からエンジニア採用にも携わってまして、その際に候補者の方から「御社の開発における魅力は何ですか?」といった質問をたまに受けることがあります。
そこで私はいつも「インフルエンサー業界の

元記事を表示

OTHERカテゴリの最新記事