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

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

謎の挙動をするFactoryBotの作り方

しょーもなく、はたまたネタでもないですが、1時間弱苦しめられたので記す

# 事象

下記コードを実行したときに、`user_id`と`group_id`は同じIDになる想定だったが、なぜか違う値になり混乱していました(変数名は適当なんで気にしないでください)

“`ruby
create(:table_name, user_id: user.id, group_id: user.id, other_group_id: other_group.id)
“`

しかも面白いことに、`group_id: ‘xxx’`と入れてもそれは反映されず、なぜか数値が返ってきます。はて??????

# 調査内容

## コードをデバッグ

とりあえずprintデバッグを進めると、`other_group.id`の値がでていることがわかりました(?)

はて???????

## DDLを調べる

テーブル構造が間違えているのでは?と思い調べましたが大丈夫でした。はて?

## モデルを調べてみる

あーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

元記事を表示

【Rails】formオブジェクトでForbiddenAttributesErrorが起こる原因と対処方法

## はじめに
formクラスにparamsを渡してsuperで初期化しようとした際にActiveModel::ForbiddenAttributesErrorになる原因をこの記事で解明していこうと思います。

## 忙しい人向けの結論
paramsに対して`.permit`していないからです。
formクラスにparamsを渡す前に、controller側でparams.permit(:〇〇)とするとエラーが起きなくなります。
よければその理由を以下の文章を通してより深く理解してみてください!

## なぜForbiddenAttributesErrorになるのか?

### コード例
コード例は以下のような状況を基に作成されています。
– 醤油ラーメンを注文しようとしている
– このラーメン屋では、醤油ラーメンと豚骨ラーメンしか売っていない
– 醤油ラーメン・豚骨ラーメン以外の注文が来ないようにバリデーションをかけたい

“`
# 醤油ラーメンの注文がparametersで飛んでくる
#“醤油”} p

元記事を表示

Slackのfiles.getUploadURLExternalでどハマりした

Slackから「files.uploadなくなるよー」って連絡が来たので「API変えればいいんでしょ?よゆーっす。」と思って対応したらえらい大変だったので誰かのお役に立てばと思い投稿しました。

最終的なコードは[正解のコード](https://qiita.com/drafts/54ac70fa3031fa470e40/edit#%E6%AD%A3%E8%A7%A3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89)セクションにありますので、細かいことはいいから答えだけ知りたい方はそちらを見てください。

以下、コードはRubyです。

# Gemアップデートすればいいじゃん

そうです。Rubyにもslack-ruby-clientというGemがあるので、こちらのバージョンを上げれば対応出来るのですが、私の環境ではGemの依存関係的にslack-ruby-clientのバージョンを上げることができなかったので、自分でなんとかすることにしました。

# 新しいAPIについて調べた

files.getUploadURLExternalでググれば↓のような記事はた

元記事を表示

windows11にrubyをインストールしてVSCodeのターミナルに認識させる

## 初めに

後輩のwindowsPCにrubyを導入することになった。
元々macでしかrubyを触っていなかったのでサポートすることに。
意外と凡ミス箇所があったので備忘録に残す。

## rubyをインストール
Ruby Installerからrubyをインストール。
https://rubyinstaller.org/downloads/

WITH DEVKITの最新バージョンを選択。
(devkit、windowsの環境は必要らしい)

ダウウンロードしたものは基本
全てacceptかapproveを選択。ディレクトリもいじらなくていい。

進めていくとcmdに飛ぶ

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333537303132372f36646234313833302d336263622d386132322d383231342d6462623366383938323

元記事を表示

image_tag が本番環境で使えない

# はじめてのデプロイ
いよいよフェーズ1のデプロイ!
コマンドをちょこちょこ打って終わった!と思ったらエラーが起きた!
けど解決したのでまとめます。

# image_tagは使えない?
<%= image_tag %>を使用して画像を表示させていたものの、本番環境ではエラーが起きました。
問題の記述はこちら↓
“`top.html.erb
<%= image_tag "go_out_planning_logo.png", size: "250x250", class: "rounded-circle mx-auto mb-3 d-block" %>
“`
これを本番環境用に修正すると…
“`top.html.erb
<%= image_tag asset_path('go_out_planning_logo.png', :alt => ‘画像’), class: “rounded-circle mx-auto mb-3 d-block” %>
“`

となり、無事に表示させることに成功しました!

# 参照記事
こちらを参考にさせていただきました。

https://t-s

元記事を表示

業務的な部分もRuboCopに警告させる

[RuboCop]:https://github.com/rubocop/rubocop
[rubocop]:https://github.com/rubocop/rubocop

Ruby による開発で、静的にコードをチェックして書き方を強制させる [RuboCop] はみんな使ってると思う。 RuboCop がデフォルトで提供しているコップ(RuboCopの世界観では各リンターをこう呼ぶ)は割と簡単に作ることが出来るので、プロジェクトごとの決まりごとや業務的な部分をチェックするコップを作ってチェックさせることができる。

# たとえば

すべてのコントローラで、あるヘッダをつけたりつけなかったりしたい。ヘッダをつけるかつけないかはそれぞれの箇所で開発者による判断が必要。

あるヘッダを `X-foo` としたとき、こんなモジュールを用意して

“`ruby
module FooHeader
def set_foo_header
headers[‘X-foo’] = ‘foo’
end
end
“`

コールバックでセットしたり

“`ruby
class Ho

元記事を表示

わたしの頭の中のRubyとJavaScript

RubyとJavaScriptの学習を進めているうちに

『そもそも、Rubyってなんだっけ❓』 『JavaScriptとなにが違うの❓』
という疑問が湧き出てきたので、アウトプット用として記事を作成しました。

# RubyとJavaScript

まず、プログラミング言語には2種類あります。
**コンパイル言語**と**インタプリンタ言語**。

簡潔にいうと、、、

**インタプリタ言語**(Ruby・JavaScript・Pythonなど)は、コードを実行する際に1行ずつ機械語に翻訳していく言語。

**コンパイル言語**(Java・C++・Objective-C・Go・swiftなど)は、ソースコードを1行1行ではなく一括で機械語に翻訳して、実行していく方式の言語

引用元に私の同期の方がわかりやすく記事にまとめているので参考にして見てください!

引用元[:インタプリタ言語とコンパイル言語](https://qiita.com/Shinono/items/2f52d300f1b7b2f54b9a
)

現在学習中の言語、**Ruby**と**JavaScript

元記事を表示

AWS ECSにデプロイしたRailsが、特定のページでシャットダウンした際の対応まとめ。mini_racerのセグメンテーション違反

## 先に結論

JSランタイムのGemのmini_racerが何故かAWS ECS(Fargate)の環境下でセグメンテーション違反を起こし、Rails全体をクラッシュさせていた。
mini_racerを使わずに、nodejsを使うことで回避した。

## 症状
– 特定のページでいきなりPumaが落ちる
– AWSのECS環境でのみ落ちて、ローカルだと再現しない
– Fargate(Dockerコンテナ)を利用

## ログ
ログの最新はこのような記載…何が原因かもよくわからずにいきなりpumaが落ちていることが分かる。
“`
2024-06-03T08:14:48.983Z 7fbb3194d000-7fbb3194e000 r–p 00029000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2024-06-03T08:14:48.983Z 7fbb3194e000-7fbb3194f000 rw-p 0002a000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事