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

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

RuboCop v1.60の変更点を見てみよう

こんにちは!withサーバーチームの@10keiと申します。

先日、RuboCopのバージョン最新化を行いました。

2024年2月時点で最新マイナーバージョンである
[RuboCop v1.60(2024-01-15 リリース)](https://rubygems.org/gems/rubocop/versions/1.60.0)における変更点を確認しましたので
以下に詳細を書いていこうと思います🙆

## Allow –autocorrect with –display-only-fail-level-offenses.
RuboCopを実行する際、`-a/–autocorrect`と`–display-only-fail-level-offenses`のオプションを同時に指定することが許可されました。

ちなみに、[`–display-only-fail-level-offenses`](https://docs.rubocop.org/rubocop/usage/basic_usage.html#:~:text=%2D%2Ddisplay%2Donly%2Dfail

元記事を表示

Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った

## 今回実装した処理の流れ
フォーム送ると、①非同期のジョブ、②モーダルの表示、③ジョブ結果を描画するテーブルの表示、の3つの動作を同時に行う機能を実装しました。
この記事ではそのturboのでのモーダル表示部分のみを記録しています。

## 実装したもの
モーダル部分
“`index.html.erb

“`
これだけ。ここをturbo_streamによってパーシャルに書き出したものと置き換えることでモーダル画面を描画させる。

同じページのボタン部分
data: { turbo_stream: true }をつけるとコントローラーでturbo_streamのリクエストとして受け取ることが出来ます。
“`index.html.erb
<%= form_with url: hoge_path(@hoge), scope: :huga, data: { turbo: true } do |f| %>

“`

切り出したパーシャル。bootstrapのモーダルを使っています。
モーダル表示

元記事を表示

strong parameter内で使うmerge以下について

def purchase_record_params
params.require(:purchase_record).permit(:zip_code, :region_of_shipping_origin_id, :city, :street_address, :apartment_name, :tel)
end

というコード内においてどうやらmergeが必要だったことがわかった。

今回はmergeの使い方を考えてみます。

結論mergeとはハッシュとハッシュの結合ということが分かった。


tweet = { name: “たなか”, text: “test”, image: “test.jpeg” }
uid = { user_id: “1” }
tweet.merge(uid)
=> {:name=>”たなか”, :text=>”test”, :image=>”test.jpeg”, :user_id=>”1″}

元記事を表示

【Rails】画像の上に文字を中央揃えで表示する方法

# 概要
この記事では、Railsアプリケーションにおいて画像の上に文字を中央揃えで表示する方法を説明します。
実装方法の参考として残しておく形なので詳しい解説はあえてつけていません。

# 環境
**Rails**: 6.1.4
**Ruby**: 3.1.2
**Bootstrap**: 4.5

:::note warn
**注意**
Bootstrapが導入されている前提で進めますので、もし導入されていない場合は、Bootstrapを導入するか、その部分を自作のclassで置き換えるかして対応してください。
:::

# 結果
最初にコード実装後の結果を貼っておきます。
実装後に下記の画像のようになっていれば表示されていれば、問題ないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524017/7c9784cd-155e-26d1-1364-31dea00348b8.png)

# 準備
`app/assets/images`配下に背景画像としたい画像を用意して

元記事を表示

Rubyの基本(制御構造)

# if文による条件分岐
下記の例の「sample②」のように、実行したい処理を前に、条件を後に書くことも可能。
簡単な条件の処理であれば②の方がよりシンプルに書くことができる。
“`ruby:sample_01.rb
score = gets.to_i

# sample①
if score >= 90
puts “A”
end

# sample②
puts “A” if score >= 90
“`

# case文による条件分岐
数値の条件は「>」などの記号だけでなく、「..」で指定することも可能。
“`ruby:sample_02.rb
score = gets.to_i

case score
when 90..100
puts “A”
when 70..89
puts “B”
else
puts “C”
end
“`
# for文による条件分岐
繰り返す回数が決まっている場合はfor文が使える。
forの後に書く変数(「i」でなくても良い)はスコープ内で使用できる。
“`ruby:sample_03.rb
# 「Hello」を3回表示
for

元記事を表示

【Rails】ECサイトにおける新着商品の表示レイアウトの整え方

# 概要
この記事では、Bootstrap導入済みのRailsアプリケーションにおいて、ECサイトのトップページに表示する新着商品のレイアウトの整え方について言及しています。

# 環境

**Rails**: 6.1.4
**Ruby**: 3.1.2
**Bootstrap**: 4.5

# 結果
結果として、下記の画像のような感じでレイアウトが整っていれば良いと思います。
今回は割と簡素にしているので、ここからさらにレイアウトを改善して行っていただければと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524017/347c343e-c1fc-44c4-837c-c00704f38442.png)

# 実装

この章では実装の流れについて説明をしていきます。

::: note warn
**注意**
`Contorller`の処理や`View`の処理で使っている変数等々は、適宜置き換えて実装いただくようにお願いいたします。
:::

## Controllerの

元記事を表示

new_framework_defaults_x_xを更新しても、値が反映されないことがあるので注意

Railsのアップデートの際に、新しいバージョンの config のデフォルト値を少しずつ反映させるときに `new_framework_defaults_x_x` を使うと思います。

今回、`config.load_defaults 6.1` へ上げる前に、`Rails.application.config.active_record.has_many_inversing = true`の設定をしても反映されないことがありました。

:::note
たまたま今回は has_many_inversing でハマりましたが、他の設定でも同様ですし、new_framework_defaults 以外の `config/initializers/*` での設定も同様に`Rails.application.config.xxx`の設定が反映されない可能性があるので記事にしてみました。
:::

## 結論

初期化時の読み込み順によっては、`config/initializers/*` のファイルの設定値が反映されないことがあるので、 その場合は`config/application.rb`

元記事を表示

RailsにおけるRate Limitの実装ガイド

# Rate Limitの概要
Rate Limitは、APIへのリクエスト数を制御するためのシステムです。
これは、APIを過剰に使用したり、悪意のある攻撃を防ぐために使用されます。
Rate Limitによって、一定期間内に許可されるリクエストの数が限定されることで、サーバーの過負荷を防ぎ、サービス品質を維持することができます。

## Rate Limitの利点
### サービスの過負荷防止
APIへの過剰なリクエストがサーバーのリソースを圧迫し、サービスが遅くなったり、最悪の場合はダウンしたりすることを防ぎます。
Rate Limitによって、予期せぬトラフィックの急増による障害からAPIを守ります。

### 悪意のある利用の防止
DDoS攻撃など、悪意のあるユーザーによる過剰なリクエストを防ぎます。
これにより、APIが安全に運用されることを確保します。

### 公平なリソースの利用
全てのユーザーに対して公平にAPIリソースへのアクセスを提供します。
一部のユーザーによる過剰なリクエストが他のユーザーの利用機会を奪うことを防ぎます。

### コスト管理
クラウドサービ

元記事を表示

request テストで rpsec テスト用のパラメータを作成

# attributes_for
attributes_for を用いることで、モデルに紐づくパラメータを簡単に作れる

“`rb
let(:valid_params) { attributes_for(:agent_scout_company) }
let(:valid_params) do
{
name: “株式会社ホゲ”,
name_kana: “カブシキガイシャホゲ”,
zipcode: “1057510”,
address: “東京都港区 東京”,
tel: “0312345670”,
url: “https://www.hoge.co.jp”,
license_number: “11-ユ-343453”
}
end

“`

元記事を表示

image_tagを使って画像遅延読み込み

## image_tagとは?
画像ファイルのリンクを作成できる。

https://railsdoc.com/page/image_tag

# 画像遅延読み込みとは?
jsなどのライブラリを用いて画像を非同期読み込みすること。
遅延読み込み用のjsは検索すれば出てくると思うのでダウンロードしておいてください。
ここでは遅延読み込みについて詳しくは触れないので各自調べていただければと思います。

Lazy Loadで画像を遅延ロードする方法

# 画像遅延読み込みをimage_tagを使って実装する
第一引数に画像ファイルへのパスを指定し、第二引数以降にオプションやHTML属性を指定できる。
第一引数に遅延読み込み用のファイルパスを指定し、第二引数のdate-srcで実際の読み込む画像のファイルパスを記載する。
“`rb
<=% "遅延読み込み用の画像ファイルパス","date-src"=>“表示させたい画像のファイルパス”,altなど… %>
“`
第二引数にはハッシュの形でファイルパスを渡してあげてください。

元記事を表示

【個人開発】断捨離アプリ「steteco」を未経験者が開発しました(Rails7)

## はじめに
初めまして。この度、初めて断捨離アプリである個人アプリ「steteco」をリリースいたしました。
まだまだプログラミング学習中の未経験エンジニアであり、技術的な内容などは誤りを含む可能性があります。
そのため、おかしな記述などがあればコメント等で教えていただけたら幸いです!
## stetecoについて
今回のアプリは、不用品の整理をしている際に「もったいないから」「フリマアプリで売れるかもしれないから」と考えてしまい、捨てる決断ができない優柔不断な方向けの、断捨離を後押しするサービスです。

私は、部屋の整理をして不用品が出るたびに、「フリマアプリで売れるかも」と思い、結局物置部屋のものが増えるだけという悪循環を繰り返していました。
同様に優柔不断な性格で整理ができない人が多いと気づき、断捨離を後押ししてくれるツールがあれば便利なのではと考え、「steteco」を作成しました。
– 作成期間: 約3ヶ月
– URL:https://steteco-dansyari.com/
– GitHub:https://github.com/ayaikg/sort_unwante

元記事を表示

Rubyで開発していた際にRuboCopで怒られた内容を纏める

## はじめに
rubyの静的解析ツールで有名なRuboCopとvscodeに以下の拡張機能を導入し、
rubyのコードを書いているときに出現したメッセージと必要な対応についてまとめます。
[ruby-rubocop-revived](https://marketplace.visualstudio.com/items?itemName=LoranKloeze.ruby-rubocop-revived)
### 想定読者
RuboCopで発生したメッセージ内容と対処法を探している方

## メッセージ一覧
### Missing frozen string literal comment.(Style/FrozenStringLiteralComment)

文字列リテラルを最初からfreezeした状態で生成してくれる、以下のマジックコメントが記載されてないときに出現します。

文字列リテラルを非破壊的にするメリットはそんなにあるのか?
については以下の記事が詳しく説明されておりました。
https://qiita.com/universato/items/1dd8943df07f24

元記事を表示

【GraphQL Ruby】値が空文字の場合に null が返るように

# 結論

“`ruby
class NilIfEmpty < GraphQL::Schema::FieldExtension def after_resolve(value:, **_rest) value.presence end end ``` ```ruby class Types::BaseField < GraphQL::Schema::Field def initialize(*args, **kwargs, &block) super # NOTE: unwrap を使うと、String! のような null: false のフィールドでも if の中を通せる if type.unwrap == GraphQL::Types::String extension(NilIfEmpty) end end end ``` # 背景など Rails × GraphQL Ruby で GraphQL サーバーを実装していて、非必須な String 型のデータのためにDBレベルでカラムに空文字のデフォル

元記事を表示

authorizeメソッドについて

## authorizeメソッドとは

authorizeメソッドとは、`Pundit`というgemを導入することにより、Rubyで使用できるメソッドのこと。

### 役割
引数のオブジェクトの認可を確認するメソッドとして、よく使用される。

例えば、下記の`authorize(current_site)`の場合、
authorizeメソッドの引数である`(current_site)`が、認可されているかどうかを確認するメソッドとして、`authorize`メソッドが使用されている。

(`current_site`サイトにログインしているユーザーがadminかそれ以外かの認可の確認を行っている。)

#### authorizeメソッドの呼び出し元であるコントローラー
“`Ruby:app/controllers/admin/site/attachments_controller.rb
class Admin::Site::AttachmentsController < ApplicationController def destroy authorize(curre

元記事を表示

Rubyの基本(文法)

# Rubyにおける定数
Rubyでは変数だけでなく定数を定義することができる。
名前をすべて大文字で書くことにより定数となる。
簡単に更新したくないものは定数として定義すると良い。
“`ruby:sample_01.rb
name = “変数のMito” # 変数
NAME = “定数のMito” # 定数
“`
しかし、これらは値を更新しないように注意を促すにすぎず、値自体は更新できる。
実行時にWarningが表示される。

# 複数行のコメントアウト方法は以下の3つ
“`ruby:sample_02.rb
# ① 1行ずつ「#」でコメントアウト(範囲選択後、「Command + /」)
# ここがコメントになる

# ② 「=begin」と「=end」で囲む
=begin
ここがコメントになる
=end

# ③ 「__END__」(以下すべてコメントアウト)
__END__
以下すべてコメントになる
!!!俺もコメント!!!
!!!私もコメント!!!
“`

# 入力の受け取りについて
「gets」で入力を受け取ることができる。
単に「gets」としても受け取り可能だ

元記事を表示

順位のつけ方

## はじめに
私はプログラミング学習を初めて1か月の初心者です。

学習する際、順位を作成するプログラムに思いのほか苦戦しました。自分の学習のメモとして記事を作成しました。

## コード
“`ruby
score = [2, 4, 3, 4, 5, 4, 1, 5, 2, 3]

score_order = score.sort.reverse

for i in 0..9 do
print “#{score_order[i]}点が#{i+1-score_order.slice(0,i).count(score_order[i])}位。”
end

#出力 5点が1位。5点が1位。4点が3位。4点が3位。4点が3位。3点が6位。3点が6位。2点が8位。2点が8位。1点が10位。
“`
## 解説
5点満点のテストを10人で行ったとき、各点数に対する順位を考えます。

点数は一つの配列にまとめられているとします。

最初にscore.sort.reverseで、点数を降順に並べ替えた配列を作成します。

そして、並べ替えた配列を利用して順位を考えます。配列番号の前に同じ値

元記事を表示

Macで以前できなかった Ruby+Rails環境構築に再トライ

## 以前できなかったこと
### 1.  rbenvを利用してのruby version up
Ruby Version UpしたのにVersionが変わってない!
“`
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23]
“`

この時は諦めてrbenvをアンインストールしてHomebrewからインストールしなおしました。universalと表示されているのは一度アンインストールしたのでMacデフォルトのRubyバージョンが表示されています。

### 2.  rbenvを使用してのrails install

Railsインストールしたのになんで???
“`
$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your

元記事を表示

【Ruby】sampleメソッドについて

## はじめに
Rubyのsampleメソッドについてまとめました。

## sampleメソッドとは
– 対象となる配列から無作為に要素を取得し、戻り値として返します。
引数なしだと1つ、引数有(数値)だと指定した数だけ要素を取得します。
– 引数を指定して要素を取得した場合、取得元の要素が重複していなければ、取得した要素が重複することはありません。
– インスタンスメソッドです。newしたオブジェクトに対して実行します。

## 使い方
“`ruby:Ruby
a = (1..10).to_a
p a.sample #=> 9
p a.sample #=> 10 ランダムに値を取得するため、前回の実行と結果が異なる
p a.sample(3) #=> [1, 9, 3]
p a #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`

引数にはrandomオブジェクトを指定することもできます。

“`ruby:Ruby
a.sample(Rand(2..4)) #=> [4, 7]
`

元記事を表示

【Ruby】optparseの使い方について

## はじめに
Rubyのプログラムを作成する中でoptperseを用いたため、使い方をまとめました。

## optparseとは?
> コマンドラインのオプションを取り扱うためのライブラリです。

## 使い方
以下のコードのように使用します。

“`ruby:Ruby
# optparseのライブラリ読み込み
require ‘optparse’
# オブジェクトの作成
opt = OptionParser.new

# オプションの登録
opt.on(‘-a’) {|v| p v } #引数なし
opt.on(‘-b VAL’) {|v| p v } #引数あり(必須)
opt.on(‘-c [VAL]’) {|v| p v } #引数あり(任意)

#入力コマンドの解析
opt.parse!(ARGV)
p ARGV
“`
– Rubyの初期状態ではオプションは利用できないため、
コマンドラインでオプションを利用するためのライブラリを読み込みます。
– `on`メソッドを使用することで、任意のオプションを登録できます。
ブロックの中身は引数が渡されたときの処理を記

元記事を表示

【Rails】SprocketsによってコンパイルされたCSSを文字列として取得する方法

Railsでは通常、layoutファイルで`stylesheet_link_tag`メソッドを使ってSprocketsによってコンパイルされたCSS(元々`app/assets/stylesheets/application.css`等に書いていたCSS)を参照します。

“`erb:app/views/layouts/application.html.erb




<%= stylesheet_link_tag "application" %>

“`

背景を説明すると長くなるので省略しますが、とある事情でこのコンパイルされたCSSを文字列として取得する必要が出てきました。(簡単にいうと、``でcssファイルにリンクするのではなく、HTMLに直接スタイルシートのコードを埋め込む必要があった)

いろいろ調べた結果、以下のようなコードで取得できることがわかりました。

“`ruby
Sprockets::Railtie
.b

元記事を表示

OTHERカテゴリの最新記事