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

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

paiza Bランク「神経衰弱」Rubyで解いてみた

## はじめに
paiza x Qiitaコラボ企画に乗っかってみました。

## 問題概要
問題文は[こちら](https://paiza.jp/works/mondai/b_rank_skillcheck_archive/concentration)
トランプの神経衰弱です。
最初にカードの配置と各ターンでどの位置のカードが捲られたかの情報が与えられ、それを元に各メンバーが何枚カードをゲットしたか出力します。
与えられる入力のフォーマットは下の通りです。
“`
H W N # トランプは縦H枚、横W枚並べられ、プレイヤーはN人
t_{1,1} t_{1,2} … t_{1,W} # H行にわたってトランプの番号の情報が与えられる
t_{2,1} t_{2,2} … t_{2,W}

t_{H,1} t_{H,2} … t_{H,W}
L # 捲られたトランプの情報が以降L行に渡って与えられる
a_1 b_1 A_1 B_1 # 1ターン目ではa_1行b_1列のトランプとA_1行B_1

元記事を表示

【Ruby】eachメソッドで便利なやつ

## 概要
eachメソッドで使える便利なものをまとめました。
配列のメソッドがほとんどなのでそっち調べたほうが早いかも。

https://qiita.com/yyykms123/items/e1bcb838f56100d12025

## 起点、回数の指定
### **`first(n)`**
* 先頭からn個の要素分まで実行する(回数指定)

~~~ ruby
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 先頭から3回まで
num.first(3).each do |num|
puts num
end

# result
1
2
3
~~~

### **`last(n)`**
* 末尾n個の要素分、実行する(起点指定)

~~~ ruby
alphabet = [“A”, “B”, “C”, “D”, “E”,]

# 末尾3回分まで
alphabet.last(3).each do |num|
puts num
end

# result
“C”
“D”
“E”
~~~

### **`list[n1..n2]`**
* n1個目からn2個

元記事を表示

【Rails6.1】ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: )の対処法

## はじめに
Rails6.1へのアップデート中に以下のエラーが出たので、このエラーの対応方法をまとめていきます。
“`ruby
ActionController::BadRequest (Invalid request parameters: Invalid encoding for parameter: xxxxx)
“`

## 問題
Rails6.1からUTF-8以外を含むPOSTリクエストはエラーが出るようになったようです。

> Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.

https://github.com/rails/rails/blob/6-1-stable/actionpack/CHANGELOG.md#rails-610-december-09-2020

## 解決方法
skip_parameter_encodingを対象のアクションに対して設定します。
“`ruby
class TestController < ApplicationCon

元記事を表示

Ruby ワンライナー 入門2

## 前置き

### ワンライナー

手元で〜 [Ruby ワンライナー 入門 #Ruby – Qiita](https://qiita.com/atm-snag/items/08f13e591444cbe80fa6#%E3%83%AF%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%8A%E3%83%BC)

## 準備

– たまに使うもの
– `%q`
– ワンライナーを書いていると,`’`(シングルクォート) や `”`(ダブルクォート) と戦うことになる.
– 戦いを回避するのに,`%` 記法を使ったりする.[^quote]
– `;`
– 既に使っているが行を区切るのに使う.使わなくてもいい.
– `Hash.new(0)`
– 初期値指定.集計するときに使ったりする.
– `BEGIN{h=Hash.new(0)};k,v=$F;h[k]+=v.to_i;END{h.each{|k,v|puts [k,v].join(” “)}}` みたいな

元記事を表示

FactoryBotの基本的な使い方

# はじめに

こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。

現在、私はRSpecを使ってモデルのテストコードを書いています。その際にFactoryBotを活用しているため使い方をまとめます。

## 目次
1. [FactoryBotとは?](#factorybotとは)
1. [Gemfileの設定](#gemfileの設定)
3. [FactoryBotの設定](#factorybotの設定)
3. [基本メソッドの使用](#基本メソッドの使用)
・[buildメソッド](#buildメソッド)
・[createメソッド](#createメソッド)
3. [モデルのテストコード](#モデルのテストコード)
4. [最後に](#最後に)

## FactoryBotとは?
FactoryBotは、テスト用のデータを簡単に作成するためのライブラリです。テストケースごとにデータを手動で作成するのは面倒ですが、FactoryBotを使うことで、再利用可能なテンプレートを使って効率的にデータを生成できます。

:::note info
#### メリッ

元記事を表示

Rubyのsendメソッドとメタプログラミングを少しだけ理解した

## はじめに
Rubyでは通常のメソッド呼び出しとは別に、`send`メソッドでメソッドを呼び出すことができます。

この記事では`send`メソッドの使い方とメタプログラミングとの関連、使用する際の注意点についてまとめます。

なおこの記事におけるRubyのバージョンは**3.3**です。

## `send`メソッドとは?
`send`メソッドはレシーバが持つメソッドを文字列またはシンボルで指定して呼び出せるメソッドです。

実際のコードで確認します。

“`ruby
class Greeting
def hello
puts ‘Hello, World!’
end
end

greeting = Greeting.new

# 通常のメソッド呼び出し
greeting.hello
#=> Hello, World!

# sendメソッドを使ったメソッド呼び出し(文字列)
greeting.send(‘hello’)
#=> Hello, World!

# sendメソッドを使ったメソッド呼び出し(シンボル)
greeting.send(:hello)
#=

元記事を表示

Rails7でannotateのgemで自動でアノテーションを付与する

# やりたかったこと
モデルファイルにdbのマイグレーションをした際に自動でスキーマ情報を記載し、わざわざdbを確認しに行く手間を省きたい
“`ruby:こんな感じ
# == Schema Information
#
# Table name: boards
#
# id :bigint not null, primary key
# author_name :string(255)
# body :text(65535)
# title :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class Board < ApplicationRecord validates :author_name, presence: true, length: { maximum:10 } validates :title, presence: true, lengt

元記事を表示

paiza×Qiita Bランク 名刺バインダー管理を解いてみた

# はじめに

https://paiza.jp/pages/campaign/paiza-qiita

paiza が面白そうなキャンペーンを行っていたのでやってみました。

# 作成したコード&解説

今回は[名刺バインダー管理](https://paiza.jp/works/mondai/b_rank_skillcheck_archive/name_card)を解いてみました。
表裏に名刺を入れられるファイルが存在し、1 つのファイルには n 個のポケットがついています。
(1 つのファイルには 2n 枚の名刺を収納できる)
そのファイルに収納されている m 番目の名刺の裏の番号を求めよという問題です。

### コードを書く前に考えたこと

まず、同じファイルであれば表と裏の総和は一定だということに気づきました。

“`
ひとつのファイルにあるポケットが3つの場合

1 枚目 2 枚目 3 枚目

1, 2, 3 7, 8, 9 13, 14, 15 (表)
+ 6, 5, 4

元記事を表示

5 つの文字列の半角スペース区切りでの分割

>5 つの文字列の半角スペース区切りでの分割し、1行ずつ出力する問題をRubyを使って解きました

“`ruby
array1 = [“one”,”two”,”three”,”four”,”five”]
for str in array1 do
puts str
end

“`

出力結果
“`
one
two
three
four
five
“`

元記事を表示

Twi●●er風サービスの日次サマリー機能を例にRuby on Railsでバッチ処理テストを極める

## はじめに

本記事では、Ruby on Railsを使用したバッチ処理の実装とテスト方法について、実践的な例を交えて詳しく解説します。Twitter風のサービスで日次サマリーを生成するバッチ処理を題材に、効果的なテスト手法を紹介します。

## 1. プロジェクトのセットアップ

まず、新しいRailsプロジェクトを作成し、必要なgemをインストールします。

“`bash
rails new twitter_summary_app –database=postgresql
cd twitter_summary_app
“`

次に、`Gemfile`を以下のように編集します:

“`ruby
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

ruby ‘3.1.2’

gem ‘rails’, ‘~> 7.0.0’
gem ‘pg’, ‘~> 1.1’
gem ‘puma’, ‘~> 5.0’
gem ‘bootsnap’, r

元記事を表示

Ferrum を使って特定の要素のスクリーンショットを撮影する

# はじめに

[Ferrum](https://github.com/rubycdp/ferrum) は [CDP (Chrome DevTools Protocol)](https://chromedevtools.github.io/devtools-protocol/) を使用して Ruby で Chrome を操作できる Gem です。今回はこの Gem を使用して、Web ページ上の特定の要素のスクリーンショットを撮影してみます。

# 例

[Yahoo!天気・災害](https://weather.yahoo.co.jp/weather/) で [福岡県福岡市](https://weather.yahoo.co.jp/weather/jp/40/8210.html) の本日の天気の部分を撮影したいです。

![weather.yahoo.co.jp_weather_jp_40_8210.html(PC).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/9dfc77eb-1a9a-

元記事を表示

技術選定しよう! ~ ビルドツール編 ~

# 技術選定しよう!
技術選定は、重要で大変な作業ですよね。
適切な技術を選ぶためには、候補をしっかりとリストアップし、それらを比較し根拠を持って判断することが欠かせません。
そこでこの記事では、技術選定を行う際のポイントや役立つ情報について紹介しています。
それにより、担当システムに最適な選択肢を見つける手助けとなるでしょう。
ぜひこの記事を参考にして、より適切な技術選定ができるようにしてください!

# 今回選定する技術
今回選定するのは

**ビルドツール**」 です!

webpack一択の時代は終わりを迎え、新たなツールが人気を集めています。

# 候補一覧
下記2つのツールをピックアップしました!
– [webpack](https://webpack.js.org/)
– [Vite](https://ja.vitejs.dev/)

# 背景
比較する前に、今回記事に取り上げようと思った背景を説明いたします。
本題までスキップしたい方は[こちら](https://qiita.com/q_halleluja

元記事を表示

デフォルト値付きのHashを宣言する

## やりたかったこと

`{ x:1, y:2 }` みたいなハッシュを宣言しつつデフォルト値も与えるっていうのを1行でやりたかった。

## パターン1 : Hash.new + merge

ハッシュを定義しつつデフォルト値も、っていう魔法のメソッドは無くて、2つのメソッドをチェーンするしかないっぽい。
悪くはないけど `Hash.new` ってあんまり馴染みが無いから若干意図が伝わりづらい気もする。

“`rb
hash = Hash.new(5).merge(x: 1, y: 2)

hash[:x] #=> 1
hash[:y] #=> 2
hash[:z] #=> 5
“`

## パターン2 : ハッシュリテラル + tap

さっきより長くなっちゃったけど、こっちの方が意図が明確で好きかな。

“`rb
hash = { x: 1, y: 2 }.tap { |h| h.default = 5 }

hash[:x] #=> 1
hash[:y] #=> 2
hash[:z] #=> 5
“`

元記事を表示

Ruby2.7から3.2にアップデートした時につまづいたところ一覧

## 重い腰を上げた
プラットフォームの期限切れも近づいており、そろそろRuby2.7→3.2にあげないといけないタイミングになった。
コケたところを備忘録として残す。

### アップデート内容
“`
ruby ‘2.7.6’ → ‘3.2.2’
rails ‘6.0.3’ → ‘~> 6.1′
“`

# 起きた問題一覧

## Macで Ruby 3.2.2 のダウンロードができない
“`terminal
$ bundle install
rbenv: version `3.2.2’ is not installed
$ rbenv install 3.2.2
BUILD FAILED (macOS 14.4.1 on x86_64 using ruby-build 20240727)
“`

下記の記事を元に3.2.2のインストール完了(感謝)
https://qiita.com/orangeQ/items/117826cdf55806f4209c

## bundle update 時の依存関係エラー
### nio4rエラー
“`terminal
$ bundle

元記事を表示

Rubyではメソッドの最後の引数がハッシュの場合、{}を省略できる

## はじめに
メソッドの引数に関するRuby特有の挙動がわからずハマったため、備忘録としてまとめます。

なおこの記事におけるRubyのバージョンは**3.3**です。

## 問題
以下のようなコードを見かけました。

“`ruby
class A
attr_reader :arg1, :arg2, :arg3

def initialize(arg1:, arg2:, arg3:)
@arg1 = arg1
@arg2 = arg2
@arg3 = arg3
end

def execute
# キーワード引数で3つの引数を渡しているつもり
B.execute(param1: arg1, param2: arg2, param3: arg3)
end
end

class B
# 引数は1つだけ、キーワード引数でもない
def self.execute(params)
params.each do |key, value|
puts “#{key}: #{value}”
end

元記事を表示

Ruby:多重ループを抜ける大域脱出とは

※この記事は初学者が自分なりにまとめたものになります。

# 目次
– [はじめに](#はじめに)
– [大域脱出とは](#大域脱出とは)
– [代表的な大域脱出方法2選](#代表的な大域脱出方法2選)
– [1. return](#1-return)
– [2. throw catch](#2-throw-catch)
– [まとめ](#まとめ)
– [使い分けのポイント](#使い分けのポイント)

# はじめに

今日は、Rubyにおいて2重3重に重なったループを一撃で抜ける方法を調べてみました!

### 大域脱出とは

この何重にも重なったループを抜け出す処理を”**大域脱出**”と言います。

# <代表的な大域脱出方法2選>

以下は、Rubyの大域脱出の方法で代表的なもの2つです。

**1. return**

メソッドやブロックの実行を終了し、呼び出し元に制御を戻します。メソッドの中で使われることが多いです。

**2. throw catch**

特定のスコープから大域脱出するための方法で、throwは指定されたシンボルを投げ、対応するcatc

元記事を表示

【Rails】Railsチュートリアル第6章 復習用

はじめに

今日もチュートリアルに取り組んでいく。
今回はモデルを主に扱っているようだ

Userモデル

・Railsでは、データモデルとして扱うデフォルトのデータ構造のことを **モデル(Model)** と呼びます
・データベースを使うことで長時間データを保存することができる
・データベースをやりとりするライブラリ(テンプレのようなもの)を **Active Record** という
・ActiveRecordにはデータの作成、保存、検索のメソッドが用意されている
・これらをつかうためにSQLを意識する必要がない!!
・**マイグレーション** = Rubyでデータのはいったテーブル(表)を操作する仕組み

Railsにおける属性

・第4章では`attr_accesor`を用いてUserクラスにnameとemail属性を定義した。
・しかしこれはRubyだから必要なのであって、実はRailsでは属性を定義する必要がない(デフォルトでその仕組が提供されている)

モデル作成

・ここでこれらのユーザー情報を保存するモデルを作成する
・Control

元記事を表示

Docker 環境で binding.pry を使ってデバッグする方法

## 初めに
Ruby アプリケーションを Docker コンテナ内でデバッグする際に、`binding.pry` を使いたいと思ったことはありませんか?この記事では、Docker 環境で `binding.pry` を設定する手順を解説します。

## ステップ 1: Gemfile に pry を追加

まず、`Gemfile` に `pry-byebug` を追加します。

“`ruby
gem ‘pry-byebug’
“`

これで、`bundle install` を実行

“`bash
bundle install
“`

## ステップ 2: docker-compose.yml の設定

`docker-compose.yml` ファイルを作成または編集して、デバッグ用の設定を追加します。

“`yaml
docker-compose.yml
web:
build: .
command: bash -c “rm -f tmp/pids~

/////↓この2文を追加
stdin_open: true
tty: true
“`

## ステップ 4

元記事を表示

[paiza×Qiita記事投稿キャンペーン] Rubyでmod7占いを解いてみた

この記事は **paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」** キャンペーンへの参加記事です。

https://paiza.jp/pages/campaign/paiza-qiita

今回キャンペーンの候補問題の中から、ランクSの「mod7占い」を解いてみました。

https://paiza.jp/works/mondai/s_rank_skillcheck_sample/mod7

解いたソースコードの全体像は以下にあります。

https://github.com/Umekawa/paiza-open-problem/blob/main/mod7.rb

## 問題分

問題文の詳細ははPaizaの記事の方を読んでいただくとして、要点は

– 最初にカード数が与えられ、その後カードの数だけ入力が与えられる
– すべて異なるカードがn枚与えられる (nは3以上)
– 与えられたカードから同時に3枚選び、3枚のカードの和が7の倍数になる組み合わせ数を出力する

の3点です。

では実際に作成していきましょう。

## 実

元記事を表示

【AWS SAM】入門してみた dockerで環境構築 ruby

# はじめに
今までserverless frame workを使用して、lambdaのデプロイを行ってきたのですが、serverless frame work V4から有料化ということを受けてSAMへ移行したいと思いました。

https://dev.classmethod.jp/articles/sls-migrate-cdk-or-sam/

# 環境構築
dockerで行いました。
* ruby3.3.4
* node 20.16.0
* aws-sam-cliをzipで公式ページから取得しインストール

https://github.com/yuuki4135/sam-test-app

“`dockerfile
FROM ruby:3.3.4-slim-bookworm

RUN useradd -u 1000 developper \
&& apt-get update -qq && apt-get install -qq –no-install-recommends \
curl awscli unzip wget git vim

RUN wget h

元記事を表示

OTHERカテゴリの最新記事