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

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

binding.pryについて

カリキュラムの中で何度かbinding.pryを使って確認する作業がありましたが、よくわからず・・・
今回アプリ実装の最終課題を進めている中で、ちょっと理解できる部分があったのでテストコードも含めてまとめます。

### deviseを利用したユーザー新規登録のテストコード
#### 入力項目
* ニックネーム
* email
* password
* 名前(名字・名前)
* カナ(名字・名前)
* 生年月日
##### バリデーション
* すべての項目が必須である
* emailは@を含む
* 重複したemailは登録できない
* passwordとpassword_confirmationが一致する
* passwordは6文字以上
* passwordは半角英数字混合
* 名前は全角
* カナは全角カタカナ

##### Ruby on railsのテストコードを書くためのGem Rspecの導入

“`ruby:Gemfile
group :development, :test do
# 中略
gem ‘rspec-rails’, ‘~> 4.0.0’
“`

元記事を表示

【Ruby】eachメソッドとmapメソッドの基本

## はじめに
先輩から、`eachメソッドとmapメソッドは、開発現場で頻繁に使用されている` と聞き、今回それぞれの基本を初学者の自分なりにまとめてみました。プログラミング初心者の方、Rubyを学習し始めた方達のお役に立てたら幸いです。

## 結論
eachメソッドとmapメソッドの違いは、その戻り値にあります。

## eachメソッド
eachメソッドは、一言でいうと「配列の要素を最初から最後まで順番に取り出すメソッド」です。取り出した要素をどう取り扱うかは、そのあとのブロックに記述されています。ブロックは、以下のコードだと`doからend`までです。

“`ruby:each.rb
nums = [1, 2, 3, 4, 5]
result = nums.each do |n|
puts n
end

# 出力
# 1
# 2
# 3
# 4
# 5

# resultの値
#=> [1, 2, 3, 4, 5]
“`

配列の各要素がnとして取り出され、`puts n`によって出力されています。

## mapメソッド
mapメソッドも、ブロックを使

元記事を表示

RuboCopのExtensions(rubocop-rails)について詳しく調べてみた

# 概要
実務でRuboCopを以下の拡張Copをrequireして使っています。
今回はこの中からrubocop-railsについて、具体的にどんなCopが含まれているのか軽く調べてみました。
– rubocop-rails
– rubocop-rspec
– rubocop-performance
– rubocop-factory_bot

# 参考
RuboCopの拡張Copには、公式でメンテナンスされているものとサードパーティ製のものの2種類があります。
ちなみに上記の4つは全て公式のCopです。

– 公式の拡張Cop
https://docs.rubocop.org/rubocop/extensions.html#official-extensions
– サードパーティ製の拡張Cop
https://docs.rubocop.org/rubocop/extensions.html#third-party-extensions

スレッドセーフとか低レイヤーな部分は自信ない方も多いと思うので、[rubocop-thread_safety](https://gi

元記事を表示

【Ruby】OpenAI Assistants API File Search機能の実装方法

# はじめに

この記事では、`ruby-openai`という Gem を使用して OpenAI の Assistants API の File Search 機能を利用する Ruby プログラムの実装方法について解説します。

## 前提条件

* OpenAI の API を取得できること
* Assistants API の概要を知っていること
* Assistants API 概要
* https://platform.openai.com/docs/assistants/overview
* Assistants、 は OpenAI のコンソールから作成済みであることとします
* OpenAI コンソール
* https://platform.openai.com/

## 必要な環境と事前準備

### Gemのインストール

まずは、`ruby-openai`というGemをインストールします。これはOpenAIのAPIにアクセスするためのライブラリです。

“`bash
gem install ruby-openai
`

元記事を表示

Rails7 find と where では結果の型が異なる件

# はじめに
みなさん、こんにちは。**torihazi**です。
今回はタイトルの件について書いていこうと思います。
ちなみに初心者です。
間違いがないよう最善は尽くしていますが、何かあれば指摘をお願いいたします。

# 環境について
“`
ruby 3.2.1
rails 7.0.6
“`

# 結論
– `find`ならArray オブジェクト が
– `where`ならActiveRecord::Relation オブジェクトで

返ってくるよということ。
例えば下記のような時。
“`
id = [1]
@hoge_find = Hoge.find(id)
@hoge_where = Hoge.where(id: id)
“`

これをviewのlink_toで参照しようとしたときに
“`
= link_to hoge_path(@hoge_find)
=> /hoge/1
= link_to hoge_path(@hoge_where)
=> /hoge%23%3CHoge::ActiveRecord_Relation:・・・・・・”
“`
生成されるURLが

元記事を表示

競技プログラミングに入門してみよう!

# 初めに
所属するスクール内でイベント「競技プログラミングに入門してみよう!」を開催した際の資料です。

# AtCoderに新規登録する
– AtCoderにアクセスする
https://atcoder.jp/home
– 右上の新規登録をクリック
– 必要な情報を入力して新規登録を完了させる
(今回は解答解説までイベント内で実施するため、できてなくても問題はありません)

# rubyの実行環境を用意する
AtCoderでは解答のコードを打ち込むことができ、そのコードが正解かどうかを判定してくれる仕組みがあります。
なので、webサイト単体でも完結していますが、自分で実行環境を用意しておくと、コードの動きを途中で確認しながら解くことができるのでおすすめです。
今回はrubyの実行環境をdockerで構築して使っていきます。
https://zenn.dev/bloomer/articles/98df661f7c339e
上記の記事を参考にして進めます。

好きなディレクトリに移動して、今回の作業用ディレクトリを用意する。
“`
$ mkdir ruby_study
$ cd

元記事を表示

RubyでPHPのvar_dumpライクな機能を提供するGem『ruby_var_dump』をリリースしました

# Gem「ruby_var_dump」を作成&リリースしました
RubyでPHPのvar_dumpライクな機能を提供するGem『ruby_var_dump』をリリースしました

RubyGems.org
https://rubygems.org/gems/ruby_var_dump

Github
https://github.com/hirokiyam/ruby_var_dump

## 特徴
PHPのvar_dump関数に相当する機能をRubyで実現します。
変数の中身を詳細に表示するためのツールです。

## 使い方
Gemfileに以下を追記します。
“`ruby
gem ‘ruby_var_dump’
“`

gemをインストールします。
“`terminal
bundle install
“`

### 使いたいクラスで呼び出す場合

ruby_var_dumpを使いたいクラスに以下を追加して、RubyVarDumpモジュールのメソッドを組み込みます。
“`ruby
require ‘ruby_var_dump’ #ファイルの先頭に追加

include Rub

元記事を表示

【Rails】Boolean 型を入力必須にする

## 概要

`Rails` で `Boolean` 型の値を入力必須にしたいときに `presence: true` を使っても期待通りに動作しませんでした。この記事ではその原因と対処法について説明します。

## 原因

“`rb
validates :column, presence: true
“`

このように記述すると `false` を選択した場合には値が入力されていないと認識されてしまい、バリデーションエラーが発生します。`presence: true` は `false` を無視してしまうため、`Boolean` 型の値には適していません。

## 対処法

“`rb
validates :column, inclusion: { in: [true, false] }
“`

`inclusion` バリデーションを使って `true` か `false` のどちらかの値が含まれているかを確認します。これにより `false` も有効な値として認識されるため、正しくバリデーションが行われます。

## まとめ

`Boolean` 型の値を入力必須にしたい場

元記事を表示

[Rails] Rails7 cocoon導入方法

## 目的
rails7でフォームの追加・削除をしたかったのでcocoonを使い実装しました。
cocoonの公式githubではrails6までのやり方しか書いておらず
なおかつrails7ではrails6とは導入方法が異なり、導入の記事も少なくハマったので備忘録として残そうと思い記事にしました。

#### 対象者
– rails7でcocoonの導入がわからない人・ハマっている人

## 開発環境
– rails 7.0.4.3
– ruby 3.1.2
– cocoon 1.2.15
– jQuery 3.7.1

## 導入方法
#### cocoonをインストール
“`:Gemfile
gem ‘cocoon’
“`
“`:ターミナル
$ bundle install
$ yarn add @nathanvda/cocoon
“`
cocoonのインストールはrails6でもrails7でも全く一緒です。

#### cocoonを設定
ここからrails6とrails7では違ってきます。
公式のgithubにはrails6までのやり方しか書いておらず、ここから苦戦

元記事を表示

自前サーバーで提供する gem がある場合の Bundler の不可解な動作

Bundler の動作が不可解な点について。

再現条件がよく分からないが,一つはっきりしている条件は,Gemfile で指定する gem の中に「rubygems.org 以外のサーバーで提供するもの」が含まれる,という点だ。

以下の例では,my_awesome_gem という自作 gem が https://example.net/gemsource という URL で提供されている,と想定する。

この場合,Gemfile に

“`rb
source “https://example.net/gemsource” do
gem “my_awesome_gem”
end
“`

と書けばよい。

なお,Ruby バージョン

“`
ruby 3.3.1 (2024-04-23 revision c56cd86388) [arm64-darwin23]
“`

で動作を確認した。

# 再現実験

まず Gemfile を以下のように書く。

“`rb:Gemfile
source “https://rubygems.org”

source “https://ex

元記事を表示

sidekiq-cron で設定した定期実行処理が schedule ファイルから削除しても停止しない

[sidekiq-cron](https://github.com/sidekiq-cron/sidekiq-cron) で動かしていた定期実行ジョブを停止しようと際に詰まったので備忘録。

## 背景

“`rb:config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
config.on(:startup) do
schedule_file = “config/schedule.yml”

if File.exist?(schedule_file)
schedule = YAML.load_file(schedule_file)

Sidekiq::Cron::Job.load_from_hash!(schedule, source: “schedule”)
end
end
end
“`
“`yml:config/schedule.yml
test_hello_world:
cron: “*/1 * * * * ” # 1分ごとに実行

元記事を表示

validatesの数値チェックについて

## 環境
Rails5.2
Ruby2.6

## はじめに

Railsの**validates**での数値チェックについて書いてみました。

## 内容
#### その1

validatesで数値チェックをする場合、基本な書き方はつぎのようになります。

“`
validates :hoge, numericality: true
“`

この設定は、Railsガイドによると「整数値または浮動小数点数値にマッチする。符号がある場合もマッチする。」と書かれています。つまり、次の入力はすべてOKになります。

“`
0   # 〇
9   # 〇
+9   # 〇
-9   # 〇
0.999 # 〇
9.999 # 〇
+9.999 # 〇
-9.999 # 〇
“`

数値の入力チェックをこれだけで済ませると、あまりにもざっくりしすぎです。ほとんどの場合において、数値の入力チェックは、もっと、他の条件との組み合わせで行うことになります。

#### その2

整数だけにマッチさせて、浮動小数点数値にはマッチさせたくない場合は、次のようになります。ちなみに

元記事を表示

変数の中の値ってどんな時に変わったりしますの?

# はじめに

プログラミング言語はどれも「変数」というもので何かの値を格納して色々利用しますね。

コードを書いているうちによく考えていることがあります。「ある変数の値ってコードの中でどこからわかるの?」又は「予想外なところで変わったりしないよね?」って。

何かの変数に値を与える時に普段はこのように`=`を使うことが多いですね。(他にも`<-`を使う少数派の言語もありますが、私はまだ使ったことない) ```javascript a = 129.3; ``` この文が出たら確実に変数の値が決められるでしょう。たとえ既に定義された変数でもここで書き換えられますね。だから変数の値はこの部分を見てわかるのです。 しかし実際にそう簡単にはいかないですね。それ以外も変数が変わる場面はいくらでもあるから。 ということで今回はこれについて纏めてこの記事を書くことにしました。 概念としては色んな言語で共通のはずなので、どの言語を使っている人でも読めるような内容にしようとしていますが、ここでは例として主に私が最近関わっている5つの言語を使います。それはRuby、Python、JavaScrip

元記事を表示

Rails 7.1 では存在しないアクションをコールバックに指定できない

Rails 7.1 では,`before_action` などのコールバック指定で,存在しないアクションを `only` パラメーターの値に含めることができない。

たとえば,

“`rb:config/routes.rb
resources :items
“`

というようなアプリがあったとする。
要するに Item に対する基本的な操作ができるようなもの。

そして,ItemsController のほうで,

“`rb
class ItemsController < ApplicationController before_action :set_item, only: %i[ show edit update destroy ] # 中略 private def set_item @item = Item.find(params[:id]) end end ``` のようにコールバックを設定するとする。 ここで,仕様の変更によって,Item の削除機能を省くことになったとする。 すると,まずルーティングのほうは ```rb:con

元記事を表示

rack-attack だと十分でなく、Web アプリケーションファイアウォール(WAF)を使う理由

> Cloudflare に出来て rack-attack に出来ないことって何でしょうか。これについて何かご存じですか? また、rack-attack を Cloudflare の WAF と同じように動作させるよう改良できる可能性はあるのでしょうか? -Sammy

とても良い質問ですね。「分散型サービス妨害(Distributed Denial of Service:DDoS)」とは何かを理解し、リトルの法則をほんの少し用いて考えると、この質問にかなりうまく答えられるのではないかと思います。

まず、DDoS の本質を理解しましょう。DDoS とは、簡単に言えば、アプリに対する分散された多数の IP アドレスからの大量のトラフィックです。この「大量のトラフィック」という点が、サイトをダウンさせる要因です。膨大な量のリクエストに圧倒されると、インフラストラクチャの何かが壊れ(通常はデータベース、または単に十分な Web サーバーの容量を確保できないなど)、サイトは事実上ダウンしてアクセスできなくなってしまいます。そして、「分散された」という点が、この脅威を防ぐのを困難にしている要因

元記事を表示

Rails Ransack 複数カラムを使用した絞り込み検索の実装

検索機能を作っていると、単一のカラムだけではなく複数カラムを使った検索が必要になることがありますよね。
例えば、商品価格と送料を合計した値で絞り込みたいなど。
この記事では、RailsでRansackを使って複数カラムの合計値で絞り込み検索を実装する方法を紹介します。

# 実装の概要
## モデルにransackerを定義する
まず、Productモデルにカスタムransackerを定義します。ここでは、item_priceとshipping_priceを合計したprice_totalという仮想的なカラムを作成します。

“`ruby
class Product < ApplicationRecord ransacker :price_total do Arel.sql('(item_price + shipping_price)') end end ``` ## コントローラでの検索処理 次に、コントローラでRansackを使用して検索を実行します。以下はProductsControllerの例です。 ```ruby class ProductsControll

元記事を表示

【Ruby】MJITとかYJITよくわからなかったので勉強してみました

どうもこんにちは。

今回はRubyKaigi 2024に参加するにあたって、Rubyの処理系についてよくわかっていなかったので勉強してみました。

特に、以下の記事を参考にしています。

https://qiita.com/wataru86/items/ab2d1b507c8d67c73281

https://zenn.dev/kenzan100/articles/5a1b21d6207e64

# 処理系って何?

「処理系って言われても具体的に何を指しているの?」と思ったのでググってみると、

**処理系とは、「言語処理系」のこと**らしいです。
言語処理系とは、RubyやPython、Javaなどの言語を処理して、実行できるようにするためのソフトウェアのようです。

ということは、言語処理系というソフトウェアによって、**Rubyで書いたコードが解釈されてコンピュータ内で実行できる形にしてくれている**ということですね!

# Rubyで使用されている処理系

Rubyでは以下

元記事を表示

RSpecべからず集(DSLの構築が不適切な事例あれこれ)

## はじめに:これは何?
僕がコードレビューしていて、「ん?いやいや、こんな書き方しちゃダメだよ!」と思ったコード例をまとめた記事です。

この記事でフォーカスするのはRSpecの[DSL](https://e-words.jp/w/DSL.html)を適切に構築してないケースです。

ネタが増えたらまた追記するので、気になる方はこの記事のストックをお願いします!(記事の更新時に通知欄でお知らせします)

それでは以下が本編です👇

## トップレベルのdescribeを2つ以上作らない

“`ruby
# NG
describe ‘Foo spec’ do
# …
end
describe ‘Bar spec’ do
# …
end
“`

テストコードを読む際に、読み手は「当然ファイル全体が大きなひとつのdescribeブロックになっているはず」と信じ込んでいるので、予想に反するネスト構造になっていると脳内の予想と実際の実行結果が異なって混乱します。

以下のように大きなdescribeブロックで囲んで1ファイルにつきトップレベルのdescribeが1つだけ

元記事を表示

ECサイト ER図

# はじまりました
今日からはじまりました!チーム開発&ECサイト開発!
早速ER図を始めて作成したものの、難しいです…
考えるだけでは入ってこなそうなので、アウトプットしていきます!
アウトプットなので、要件定義は省略しております🙇

答えになっちゃうので念の為隠しておきます↓

全体ER図

![スクリーンショット 2024-05-13 20.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/131a64a1-5204-8aad-5a80-4de9f0966d2d.png)

各テーブル詳しくみていきます👁️👁️

# 管理者テーブル

ER図

![スクリーンショット 2024-05-13 20.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37

元記事を表示

macOSにRubyの最新バージョンをインストール

ふとRubyを触ろうと思った時にバージョンを確認すると、なかなか古いバージョンだったのでアップデートしようとしました。
rbenvというツールを使って複数バージョンが共存可能とのことだったの、それを使ってアップデートではなく最新版をインストールしていきます

# 環境
OS : macOS14.4.1
Homebrew : 4.2.21
shell : zsh

Homebrewは既にインストール済み、最新版にアップデート済みの前提で書いていきます。
Homebrewをインストールしていない場合は[こちら](https://qiita.com/ynack/items/e9151819461590678bf5)を参考にどうぞ。

# SystemのRubyのバージョン確認
作業を始める前にデフォルトのrubyのバージョンを確認します。
“` :バージョン確認
% ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin23]
“`

2.6.10p210で2022年4月12日のバージ

元記事を表示

OTHERカテゴリの最新記事