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

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

RubyKaigi 2024で発表されたRSpecテストコード生成ツール Omochi についてまとめてみた

# はじめに
私は[株式会社エル・ティー・エス リンク](https://lts-link.com/)でRailsエンジニアをしているysk_ymdyと申します。
担当サービスは、IT人材と案件のマッチングプラットフォーム [アサインナビ](https://assign-navi.jp/)です。

先日「RubyKaigi 2024」に参加し、たくさんの学びや気づきを得ることができました。
その中でも@mikiko_bridgeさんさんが発表された Omochi というgemが、私含めRailsで開発するエンジニアにとって大変役立つものなのではと思い、共有させていただきます。

https://github.com/mikik0/omochi

# Omochiってどんなgem?
ひとことで言うと、RSpecを導入しているRailsアプリケーションに対して、LLMを使ってテストコードを自動生成してくれるgemです。

Railsで開発する際、テストコードの作成は手間がかかったり抜け漏れが気になっ

元記事を表示

【Rails/RSpec】Everyday Rails – RSpecによるRailsテスト入門の要約/感想

# はじめに
* 今回はRSpecの技術書である[Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)を読了したので、その要約と感想について書いていければと思います。

### RSpecとは?
* ruby用に開発された、テスト用の **フレームワーク** のことです。
* RSpecを用いることで、少ない記述で、可読性に優れたコードを簡単に記述することができます。

### 本記事の対象者
* railsのチュートリアルレベルを一通り学び終え、テストコードの学習を始めようと思っている方
* これから [Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp) を読む前に要点を掴んでおきたい方
* 実務でRSpecを使うことになり、キャッチアップの上で全体の概要を掴んでおきた方

を対象にこの記事を執筆しました。

ぜひ最後まで閲覧いただけると幸いです。

# よかったとこ

元記事を表示

credencialsに保存した数値とは違う数値が返ってくる問題

# TL;DR
Railsのcredentialsファイルに”0″や”0x”から始まる数字を設定すると、その値が取り出す際に異なる数字に変わってしまう問題が発生する。この原因はYAMLのフォーマットに由来しており、対策としては適切なエスケープを行う必要がある。

# 環境
Rails 7.1.3.2
ruby 3.3.0

# 何があったか
ある日、Railsのcredentialsファイルに次のような設定を行いました。

“`yaml
# credentials
service:
password: 01234
“`

その後、この値を渡しても何故か認証が通らない。
理由を探るために、Railsコンソール(IRB)でこの値を取り出すと、以下のような結果が得られました:

“`sh
irb(main)> Rails.application.credentials.service[:password]
=> 668
“`

### ・・・?

設定したpasswordの値は01234でしたが、取り出すと668という異なる値になっています。

# 原因
わかる人にはすぐ分かる

元記事を表示

プロセスって何?聞いたことあるけどよくわからない人へ

# はじめに
皆さんはプロセスについてどれくらい知っていますか?
業務で耳にすることはあっても、その実態が掴めずにいる方もいるのではないでしょうか?

私は2020年の4月に異業種からエンジニアへ転職して約4年ほどバックエンド開発に携わってきました。その中で、「プロセス」、「PID」、「プリフォーク」などのキーワードを耳にしましたが、雰囲気で理解している程度でした。

そんな時、PHPerKaigi2024で[「サーバーとは何かを理解して、コンテナ1つで実行しよう」](https://speakerdeck.com/sadnessojisan/sahatohahe-kawoli-jie-site-kontena1tuteshi-xing-siyou-phperkaigi2024)と言う登壇を拝見し、「プロセス?スレッド?よくわかんねぇけどもっと知りたい!」と思いました。そして、プロセスの解像度を上げる為に学習を決意しました。

その後、良い本を探していたところ[「なるほどUnixプロセス ― Rubyで学ぶUnixの基礎」](https://tatsu-zine.com/books

元記事を表示

[ruby初心者向け] rubyの単体テストってどうすればいいの? test-unit編

# 単体テストはどうすればいいの?
プログラミングを始めたてだと、書いたコードのテストが苦手だと感じる人が多いと思います。
1つ1つ確認するのは面倒くさいし、そもそもどうすればいいのか分からない人もいるはず…
そこでrubyの単体テストのやり方をまとめました!
# 結論
簡単に手早くするならtest-unitを使おう!!
# test-unitとは?
Rubyインストール時に一緒にインストールされる単体テスト用フレームワークです。
単体テスト用フレームワークを使うことでテストを自動化し、無駄な労力を減らすことができます。

# 単体テスト例
## test-unitで簡単なテスト
### テストコード
“`ruby is_odd_test.rb
require ‘test/unit’

#テストしたいメソッド
def is_odd?(n)
n % 2 == 1
end

#テスト用のクラス
class OddTest < Test::Unit::TestCase #テストメソッド def test_is_odd #検証メソッド # assert_

元記事を表示

バイナリーパッチ

リバースエンジニアリングのためにバイナリにパッチを当てるスクリプトをrubyで作ってみました。

“`ruby:binpatch.rb
#
# binary path for reverse engineering
#

argc = ARGV.size
if argc >= 4 && argc % 2 == 0 then
old = ARGV[0]
new = ARGV[1]
p = 2
bindata = File.binread(old)
while 2 + p <= argc offset = ARGV[p].hex inst = ARGV[p+1].hex bindata[offset] = (inst >> 24).chr
bindata[offset + 1] = ((inst >> 16) & 0xff).chr
bindata[offset + 2] = ((inst >> 8) & 0xff).chr
bindata[offset + 3] = (inst & 0xff).chr

元記事を表示

【ruby初心者向け】基本的な名前の書き方を知りたい!

# 名前をつける時の命名規則ってどれ使うんだっけ?
rubyのプログラミングの勉強を始めたての方だと、変数名や関数名などの命名をどうすればいいか分からない…命名規則って何???って思う人が多いと思います。僕もそうでした。

プログラミングで使われる一般的な命名規則は5種類あります。
– スネークケース
 アンダーバーで小文字の単語を繋げる
 例:example_test
– スクリーミングスネークケース
 アンダーバーで大文字の単語を繋げる
 例:EXAMPLE_TEST
– キャメルケース
– ローワーキャメルケース (キャメルケース)
 最初の単語の先頭を小文字に、2番目以降の単語の先頭を大文字にして繋げる
 例:exampleTest
– アッパーキャメルケース (パスカルケース)
 単語の先頭を大文字にして繋げる
 例:ExampleTest
– ケバブケース(ハイフンで小文字の単語を繋げる)
 例:example-test

うーん、どれを使えばいいか分からん…
パッと見て、そう思った人がいるはず…
なので、場合ごとの命名方法を1分で分かる

元記事を表示

enumerize が適用されているカラムに定義外の値が入るとデフォルト値固定になる

以下のように定義されている場合に

“`ruby
class User
enumerize :status, in: {
authorized: 1,
invalid: 2,
}, default: :authorized, scope: true
end
“`

以下のようにレコードを登録してみる。

“`
+—–+——–+
| id | status |
+—–+——–+
| 1 | 99 |
+—–+——–+
“`

このレコードを ActiveRecord を通して取得してみると

“`ruby
pry(main)> User.find(id: 1).status
=> “authorized”
“`

`authorized` として取得される。元の値を取得しようとしても

“`ruby
pry(main)> User.find(id: 1).status_before_type_cast
=> 1
“`

と `authorized` の値になっている。デフォルトが `au

元記事を表示

スキルチェック問題を解いてみる

## はじめに
ハンズオン学習の一環として、昨日からpaizaのプログラミング問題集をのそのそ取り組みだし、
Dランクの問題がすんなり解けるようになったので、本日はCランクを解いてみました。

使用言語はRubyです。

## 問題1:じゃんけんの結果

自分の回答
“` qiit.rb
n = gets.to_i

win = 0

n.times do
alice, bob = gets.chomp.split
if (alice == “G” && bob == “C”) || (alice == “C” && bob == “P”) || (alice == “P” && bob == “G”)
win += 1
end
end

puts win
“`

## 問題2:プレゼント応募企画の実施

自分の回答
“` qiit.rb
N,X,Y = gets.split.map(&:to_i)

(1..N).each do |i|
if i % X == 0 && i % Y == 0
puts “AB”

元記事を表示

Herokuデプロイ時に Precompiling assets failed. が起きた

### 前提条件
“`markdown: バージョン / スペック
macOS: Sonoma 14.5 / M2
Ruby: 3.3.1
Ruby on Rails: 7.1.3
Tailwind CSS: 3.4.3
daisyUI: 4.11.1
Heroku: 8.11.5
“`

“`markdown: 経緯
1. Ruby on Rails に Tailwind CSS / daisyUI を適応
– $ rails new APP_NAME -c tailwind -d postgresql
2. ローカルでは無事CSSが適応されていることを確認
3. Herokuデプロイ時にエラーが起きた
– Precompiling assets failed.
– Error: Cannot find module ‘daisyui’
“`

【参考資料】
– [Install daisyUI as a Tailwind CSS plugin](https://daisyui.com/docs/install/)
– [Heroku スターターガイド

元記事を表示

Rails でメールを送信する

### 1. 送信元メールアドレス(gmail)の google アカウントの2段階認証を完了させる。

[google アカウントの Security 設定](https://myaccount.google.com/security)で、2段階認証を設定する。

### 2. 送信元メールアドレス(gmail)の google アカウントでアプリパスワードを作成する。

[google アカウントの App Password 設定](https://https://myaccount.google.com/apppasswords)で、アプリパスワードを設定すると、16個のアルファベット文字列を取得できる。これがアプリパスワード。

### 3. Rails 側の設定

##### 1️⃣ 以下のコマンドを入力

“`
rails g mailer UserMailer
“`

すると、以下のようにディレクトリが作成されます。

“`
create app/mailers/user_mailer.rb
create app/mailers/appl

元記事を表示

ActiveRecord のパフォーマンス関連 Tips

## はじめに
これは ActiveRecord のメモリ節約や処理速度向上等のパフォーマンスに関していくつか調べたり知り得たことを書き留めたメモです。どちらかというと API よりバッチ処理に主眼をおいた Tips になります。
またパフォーマンスを重視する場合、コードの読みづらさだったり、バグを仕込んでしまったりとのデメリットとのトレードオフになることも多いのでその点はご留意ください。

## インスタンス化を避ける
ActiveRecord のインスタンス化はかなり時間の掛かる処理です。
例えば CSV を元に何千何万件の登録を行うような処理で、事前に各レコードに対して ActiveRecord のバリデーションやフックアクション(`before_validation`とか)を通したいことがあります。
この時に毎回 `new` して `valid?` していくとめちゃくちゃ時間がかかりますが、一度初期化したインスタンスにデータだけを上書きして使い回すようにするとかなり早くなります。ただし、使い回すことによる副作用もあると思いますのでその点は十分ご注意ください。

## `e

元記事を表示

Rails viewからcontrollerに値を渡す方法

この記事はプログラミング学習者がコードを書く中で得られた内容を備忘録を兼ねて記事にしたものです。間違った所などあればご指摘頂けると嬉しいです。

## 変数の受け渡しについて
Railsで変数を受け渡す時にcontrollerからviewへ受け渡すというのは良くやります。
これまでもコードを書く中で何度も使ってきました。

“`ruby:merchandises_controller.rb
class MerchandisesController < ApplicationController def index @merchandises = Merchandise.with_attached_image end end ``` ```ruby:index.html.erb<% @merchandises.each do |merchandise| %>


<% if merchandise.i

元記事を表示

レベルアップ問題を解いてみる

## はじめに
paizaの問題集を使い、ハンズオン学習をしています。
標準入力の問題を一通り解いたので、レベルアップ問題に挑戦してみました。

## 乗客人数 Ruby編
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__accompanied_by_stdin_boss

自分の回答
“` quiita.rb
a,b,c = gets.split.map(&:to_i)

n = a
n -= b
n += c

puts n
“`
– map
入力値を配列に格納するメソッド

## 占い Ruby編
https://paiza.jp/works/mondai/d_rank_level_up_problems/d_rank_level_up_problems__conditions_branch_boss

自分の回答
“` quiita.rb
n = gets.chomp.to_i

if n == 7
puts “Yes”
else
puts

元記事を表示

標準入力問題を解いてみる

# はじめに
5月末に某プラグラミングスクールでの学習課程が終了したので、
心機一転、自己学習の振り返りと記録を目的とし、本日の学びを毎日Qiitaブログに公開していきます。

早速本日から、Paizaのプログラミング問題集を使い学習を始めたのでメモ。

前提
使用言語はRubyです。

## 自己紹介 Ruby編
https://paiza.jp/works/mondai/self_introduction/self_introduction__1

自分の回答
“`ruby:qiita.rb
puts “name: 太郎”
puts “language: Ruby”
puts “hitokoto: よろしくお願いいたします”
“`

## 1つのデータの入力 Ruby編
https://paiza.jp/works/mondai/stdin/stdin_1

自分の回答
“`ruby:qiita.rb
input = gets.chomp
puts input
“`
– chomp
文字列末尾に入っている改行コードを削除するメソッド

## 3行のデータの入力 Ruby編

元記事を表示

Rails7.2をちょこっと試す(少し静かな rails new 編)

# はじめに
Rails 7.2.0 beta1 がリリースされたので、ちょこっと試してみました。

Rails 7.2 では、`rails new` のときに `bundle install` が `–quiet` オプション付きで実行されるようになりました。

## Rails 7.1

Rails 7.1 では、`rails new` を実行したときに `bundle install` が `–quiet` オプションなしで実行されます。
bundle install による出力が表示されます。
“`shell
root@2d5740c8a6b6:/app# rails -v
Rails 7.1.3.3
root@2d5740c8a6b6:/app# rails new sandbox –database postgresql
create

run bundle install

“`

## Rails 7.2

Rails 7.2 では、`rails new` を実行したときに `bundle i

元記事を表示

RubocopにUse only specific action names (create, destroy, edit, index, new, show, update).と指摘された場合

この記事はRuby, Railsを学習中の者が課題に取り組んでいる時に遭遇した問題について取り上げたものです。解決方法が正しくない、内容が間違っている場合はご指摘頂けると幸甚です。

今回は機能の実装が終わってrubocopにコードの確認をしてもらった際に遭遇した違反(offense)内容に対する対策を備忘録も兼ねて記事にしたいと思います。
※rubocopの設定は使用している企業や環境によって異なります。

“`ruby:
app/controllers/carts_controller.rb:6:7: C: Hc/RailsSpecificActionName:
Use only specific action names (create, destroy, edit, index, new, show, update).
def add_merchandise
^^^^^^^^^^^^^^^
“`
内容としては具体的なアクション名については下記の7通りの名前だけを使うようにとの指示。
`create`, `destroy`, `edit`, `index`,

元記事を表示

pry-byebugを使ってRuby on Railsでのデバッグ

Ruby on Railsでアプリケーションを作成するうえで、必ずエラーに遭遇します。そのためエラーを解決する能力というものが、開発を行う上で必須の能力となります。

今回はこのエラーが発生した際に、どうすればエラーを解決できるかという方法についてご紹介します。最初はエラー画面が怖いものですが、エラー対応を身に着けることで飛躍的に成長できるので頑張りましょう!

## 「pry-byebug」の使い方

「pry-byebug」とは?については、下記リンクにて説明があります。気になる方は、こちらをご覧ください。それでは早速ですが、使い方について説明します。

[>> 「pry-byebug」とは?](https://taishi-official.com/2021/05/21/729/#toc1)

### 「pry-byebug」のインストール
Gemfileのgroup :developmentの最後に、以下の追記をすることで使用できます。

“`ruby:Gemfile
group :development do

gem ‘pry-byebug’
end
“`

元記事を表示

若手RubyエンジニアがRubyKaigi 2024に初めて参加してみた

# はじめに

Akira Matsudaさんの「初心者のためのRubyKaigi入門/RubyKaigi Introduction」を拝見し、ruby kaigiの楽しみ方として
「わからないけど気にしない」
「本物のプログラマーたちのすっごいかっこいい姿がみれる」
ことと話されていました。

実際に参加してみたところ、全体的に難しくて正直、あまり理解ができていない部分が多々あります。
そんな中でも、初めて知った技術や面白かったセッションの概要について、同じく若手のRubyエンジニアと学びを共有できるようにしたいと思い今記事を作成しました。

# 内容
印象に残っているセッションと、セッションを聞くにあたり調べた知識についてまとめました。

# keynote(Day1)
Rubyという言語が、読みやすいコードを書くのにも、読めない奇妙なコードを書くのにも優れた言語であることを発表されていました。

参考:
https://drive.google.com/file/d/1Dkx15u_5UAGoFqJHCeAuj2FXS-z_U7EE/view

「意味のなさそうな思考をしてみるこ

元記事を表示

RubyKaigi 2024 にヘルパー参加してきた

こんにちは、 Qiita株式会社の @tomoasleep です。
今年も RubyKaigi に参加してきました。今年はヘルパー (当日に運営の手伝いをするスタッフ) として参加してみました。どうして参加したか、参加してどうだったかを書いていこうと思います。

## なんでヘルパーやろうと思ったか

これはもうズバリ **RubyKaigi, Ruby コミュニティ, Ruby を更に楽しみたい**、と思ったからです。

RubyKaigi への参加は過去3回 (仙台、三重、松本) 参加しているのですが、とにかく最高 (Ruby 言語自体の話、処理系の話が日本で聞ける、 Rubyist 同士で Ruby に関する話が色々出来る、Rubyist の知り合いが増える、知り合いと再会できる…etc) だし、 Ruby, RubyKaigi に貢献している人もすごいなあ、と感じていました。

そんな中、 RubyKaigi 2024 のヘルパー募集を見て、「貢献する側に回ってみたいな、サポートする側に回ることで更に楽しめないかな」と思って応募することにしました。

https://x.com

元記事を表示

OTHERカテゴリの最新記事