Ruby関連のことを調べてみた2022年09月16日

Ruby関連のことを調べてみた2022年09月16日

Rubyで配列や文字列を部分的に反転

以前に next_permutation のアルゴリズムを[勉強していた](/HMMNRST/items/26786552a2660735d34f)際、**配列の一部分だけを逆順に並べ替える操作**が(メソッド一発では)できないことが気になった。 C++ の [`std::reverse`](https://cpprefjp.github.io/reference/algorithm/reverse.html) であれば、列の始端と終端を指定するので部分的にもできそう。

メソッドが無いなら作っておけばいいか、ということで作ってみた。

実装に使うメソッドは範囲指定可能な `#[]` と `#[]=` のみなので、配列だけでなく文字列にも適用できる。複数のクラスを拡張するならモジュール化しておくと良さそう。

“`ruby
# Array と String に共通のメソッドを使って実装
module SequenceExtension
# 破壊的メソッド
# ※ #[] が列を返さないような引数は考慮していない
def reverse_in_range!(*args)

元記事を表示

ActiveRecordでの条件付きのリレーションについて

# 概要
ActiveRecordでは「has_many, has_one, belongs_to」をモデルに定義することでテーブル間同士の関連性を表すことができます。
この関連性ですが、単純なテーブル同士の関係だけではなく、条件を定義することで任意の関連性を表現出来るので、そのことについてまとめます。

# 基本
開発チームとチームメンバーをDBで管理する場合を考えてみます。
開発チームには複数のチームメンバーがいるので、開発チームとチームメンバーの関係は1対nになります。
名前を`teams`, `members`とします。
![名称未設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264889/da52d669-a155-4c27-8ee0-04a3be6f7c0f.png)

モデルで定義すると以下のようになります。
“`ruby
class Team < ApplicationRecord has_many :members end class Member < Applica

元記事を表示

さくっとベンチマーク取る時のメモ

# 前提
– メモリ使用量と処理時間
– Ruby 2.7.4

# メモリ使用量
## Gem
– [memprof2](https://github.com/sonots/memprof2)を使う
– Ruby コードのどの行がどのぐらいメモリ(bytes)を消費しているか調べられる
– [かなりリソースを喰うらしい](https://qiita.com/sonots/items/c14b3e3ca8e6f7dfb651#memprof2-gem-dancers:~:text=%E6%B3%A8%E6%84%8F%3A%20%E3%81%8B%E3%81%AA%E3%82%8A%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E5%96%B0%E3%81%86%E3%81%AE%E3%81%A7production%E3%81%A7%E3%81%AF%E3%81%94%E5%88%A9%E7%94%A8%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%9B%E3%82%93)

“`r

元記事を表示

include?メソッドとGemのCode Runnerで文字入力した備忘録

今日も学んだことを忘れない為にメモします

### include?メソッドとは?
include?メソッドは、指定した値が配列や文字列内に含まれているかを判定するメソッド。指定した値が含まれている場合はtrueを、含まれていない場合はfalseを返り値として返す。
“`
array = [“foo”, “bar”]
puts array.include?(“bar”)
# => true
puts array.include?(“hoge”)
# => false
“`
配列arrayを作成してinclude?メソッドで引数に含まれているか確認した文字or数字を入れる。
“bar”は含まれているのでtrue
“hoge”は含まれていないのでfalse

### 含みたくない文字の確認にも使える
ピリオドと空白は入力しないで名前を登録して欲しい時、以下のような記述で確認出来る。
“`
def check_name(str)
if str.include?(“.”)
puts “!エラー!記号は登録できません”
elsif str.include?(” “)

元記事を表示

Gem::ConflictErrorについて

### Gem::ConflictErrorについて

**【書いた理由】**
チェリー本に書かれているMinitestが突然起動しなくなってしまいました。
調べてみたところエラー解決できたため、まとめてみます。
ちなみに、プログラミング歴1ヶ月の超初心者なのでご容赦ください:bow:

**①まずは原因解明**

エラー文を読んでみます。

“`
/Users/takaya/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/specification.rb:2247:in `raise_if_conflicts’: Unable to activate railties-6.0.5.1, because activesupport-6.1.4.1 conflicts with activesupport (= 6.0.5.1) (Gem::ConflictError)
“`

「Gem::ConflictError」と書いてあります。
よく読んでみると「activesupport-6.1.4.1」がコンフリクトしているようです。
ググっ

元記事を表示

曜日を表示するコード

復習のメモ。

# Dateクラス
Rubyの標準ライブラリ。以下のようにライブラリから呼び出す。
“`
require “date”
“`
Dateクラスを用いて今日の曜日を取得。
“`
Date.today.wday
“`
wdayは曜日を0(日)から6(土)の整数で取得することができるDateクラスのメソッド。

# 特定の条件だけの出力
今日が金曜日だった場合→今日は金曜日だ!!!
それ以外の曜日の時→今日は月曜日です。

“`practise.rb
require “date”

day = Date.today.wday

days = [“日”, “月”, “火”, “水”, “木”, “金”, “土”]

if day == 5
puts “今日は#{days[day]}曜日だ!”
else
puts “今日は#{days[day]}曜日です”
end
“`

dayが5(金曜日)だった場合かそうでないかを条件分岐する。
今日が金曜日だった場合はday=5となり、daysの5番目の値である金曜日が出力される。
金曜日じゃない場合、例えば今日が木曜

元記事を表示

Rails・Rubyで benchmark を使って簡単にパフォーマンス計測をしてみよう!

## はじめに
先輩や上司に、「どのロジックがパフォーマンス良いか調べてみて」と言われることはありませんか?
または、先輩や上司にコードを見せる前にどのロジックがパフォーマンス良いか調べたいことがありますよね。

`Rails パフォーマンス計測` で検索すると、`rack-mini-profiler`のGemが出てくると思います。
ただ、実務においてGemを導入するのはハードルが高いです。

そこでRubyに標準である`benchmark`を使ってみましょう。

## `benchmark`とは
https://docs.ruby-lang.org/ja/latest/library/benchmark.html

ベンチマークの計測ができます。そのままですね。

https://docs.ruby-lang.org/ja/latest/method/Benchmark/m/bm.html

こちらの`bm`メソッドを使用していきます。

サンプルコードは以下になります。

~~~ruby
require ‘benchmark’

n = 50000
Benchmark.bm do

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの四則演算の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlの四則演算の比較

# Python

https://qiita.com/hiroyuki_mrp/items/d7e4c2d75e947ab99caf

# Ruby

https://qiita.com/mat827/items/ee569f6549b83bb954e2

# PHP

https://qiita.com/koala_56/items/7ed631f62cf0f225f5a6

# Java

https://qiita.com/takahirocook/items/748990882f2de7a630a1

# JavaScript

https://qiita.com/_haya_/items/dbe80010a0a8ac9d70b1

# Perl

https://perlzemi.com/blog/

元記事を表示

Rails フォームヘルパー Cheat Sheet !

フォーム作成時に構文を毎回調べているので備忘録兼ねてまとめました。

### バージョン

下記のバージョンで確認
Rails version: 7.0.2.2

## ActionView::Helpers::FormHelper

“`erb
<%= form.color_field :favorite_color %>
<%= form.date_field :born_on %>
<%= form.datetime_field :user, :born_on, min: Date.today %>
<%= form.datetime_local_field :graduation_day %>
<%= form.email_field :address %>
<%= form.file_field :post, :image, multiple: true %>
<%= form.hidden_field :parent_id, value: "foo" %>
<%= form.month_field :birthday_month %>
<%= form.number_fi

元記事を表示

今まで知らなかった開発で使ったRailsメソッド備忘録

## なぜ記事を書こうと思ったか
Railsアプリの開発をする際に適切なメソッドを調べる時がある為、今まで知らなかったまたは理解が曖昧な開発で使用するメソッドを中心にこの記事にまとめようと思います。

## railsメソッド一覧
### Regexpクラス
– escapeメソッド
メタ文字をエスケープした結果を返す。

“`
pattern = Regexp.escape(‘1+2=3,2*3=6’)
p pattern
# ‘1//+2=3,2//*3=6’
“`

### Stringクラス
– subメソッド
文字列中で pattern にマッチした最初の部分を文字列 replace で置き換えた文字列を生成して返す。

“`
greeting = “I am name. My favorite food is meet.”
pattern = { “name” => “James”, “meet” => “beef” }
replaced = article.sub(/name|meet/, pattern)

p replaced # “I am James.

元記事を表示

each_with_indexメソッドを使ってみた備忘録

今日も学んだことを忘れない為にメモします

### each_with_indexメソッドとは?
each_with_indexは、Rubyに標準で組み込まれている要素の繰り返し処理であるeachメソッドに、その要素が何番目に処理されたのかも表すことが出来る機能がついたメソッド。
これを使えば任意の数字が配列の中の何番目に格納されているかを確認できるプログラムを実装できる。

例えば下記のようにランダムな数字が入った配列があるとする。
“`
[3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
“`
この中から任意の数字を探して何番目に含まれているかいない確認した場合は下記のように記述する。
“`
def search(target_num, input)

input.each_with_index do |num, index|
if num == target_num
puts “#{index + 1}番目にあります”
return
end
end
p

元記事を表示

【個人開発】現役鉄道運転士が作った鉄道運転士のための情報共有アプリ

# はじめに

こんにちは@shunsuke0810と申します。
鉄道運転士をしております。
DIVE INTO CODEで4ヶ月間、未経験からWeb開発について学んでおりました。
この度卒業制作として初めて個人開発したアプリ「Trails」が完成いたしましたのでご紹介いたします。
ちなみにTrailsの由来はTrain(列車)・Rail(線路)・Rails(ruby on rails)の3つ言葉を掛け合わせました。

【Twitter】

【アプリURL】
https://hidden-sands-43685.herokuapp.com/

【GitHub】
https://github.com/Shunsuke0810/Trails

# アプリ制作のきっかけ

みなさん、駅のホームの端っこでこんな光景みたことありませんか?
![スクリーンショット 2022-08-30 20.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

RubyKaigi 2022参加レポート

こんにちは。RubyKaigi 2022に参加してきました。
今年は久々のオフライン開催ということで、現地三重に行ってまいりました!
現地の様子も合わせてレポートしていきたいと思います。

![6D920E91-FABD-4271-A141-D2C3BA3060C0.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558817/6298fb48-bfe8-4d37-8b1e-8a58662124e3.jpeg)

会場の三重県総合文化センター!(初日は生憎の雨だったため、こちらは2日目の写真になります)

![A80385C4-3498-49C1-A258-2AEF8F3993D7.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558817/0880d93e-acc2-4a95-75aa-4ff60d7931b4.jpeg)

近づいてみるとRubyKaigiの看板が…

![ADB7A904-B193-4DD9-B

元記事を表示

値に名前をつけて平均点を求める

基礎からまた復習するため、メモ。

# 問題
国語が80点、英語が50点、数学が70点の場合のテストの平均点をターミナルに出力しろという時。

# 回答
“`practise.rb
japanese_score = 80
english_score = 50
math_score = 70

average = (japanese_score + english_score + math_score) / 3

puts “3教科の平均点は、#{average}点です。”
“`

各教科の変数に点数の値をそれぞれ代入し、今度は各教科の平均を求めた計算結果をaverageという変数に代入。
ターミナルに出力する際は文字列と数値の組み合わせだから式展開で記述しとく。

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlのデバッガ(デバッグ)の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlのデバッガ(デバッグ)の比較

# Python

https://qiita.com/kaitolucifer/items/dc58efebd72d72a8feb2

# Ruby

https://qiita.com/port-development/items/5ea6448eb2b45c70ef65

https://qiita.com/suketa/items/52c60d79332c9a24f973

# PHP

https://qiita.com/ryouya3948/items/0055c1935b7bd62ba3b9

# Java

https://qiita.com/gatchan03/items/3c43b674e2b7c4b5c5cb

# JavaScript

https://qiita.com/a_

元記事を表示

Dateクラスで日時の取得

## 日付に関わる処理に使えるのでメモ

### Dateクラスとは
Rubyの標準ライブラリの機能で日付を扱うためのクラスとして用意されている。
使うためにはまず下記の記述をする
“`
require “date”
“`
todayメソッドを使えば今日の日付を取得出来る
“`
Date.today
“`

他にもたくさんのメソッドがある
“`
today = Date.today
today.year # 作成したDateオブジェクトから年を取得
today.mon # 作成したDateオブジェクトから月を取得
today.mday # 作成したDateオブジェクトから日を取得
today.wday # 作成したDateオブジェクトから曜日を0(日曜日)から6(土曜日)の整数で取得
“`

wdayメソッドは曜日ごとに処理が変わるようなコードに使える
“`
day = Date.today.wday
days = [“日曜日”, “月曜日”, “火曜日”, “水曜日”, “木曜日”, “金曜日”, “土曜日”]
if day == 5
puts “今日は#{days[

元記事を表示

FactoryBotの導入と使い方の基本 [RSpec]

FactoryBotの使い方や導入方法をメモしておきます。
# FactoryBotを使うには
### 1, gemのインストール
“`
gem “factory_bot_rails”
“`
bundle installを実行する。
### 2, ジェネレートする
“`
rails g factory_bot:model モデル名
“`
`spec/factories`というディレクトリが生成される。その中に`モデル名s.rb`というファイルが生成される。このファイルにテストデータを作成していく。
# FactoryBotの使い方(例としてUserモデルを扱う)
### サンプルデータの作成
“`ruby
FactoryBot.define do
#この中に書いていく
factory :user do
first_name { “aaa” }
last_name { “aaa” }
email { “aaa@example.com” }
password { “password” }
end
end
“`
### サンプルデータを呼び出す
“`

元記事を表示

ActionController::RoutingErrorの凡ミス

# ログイン機能のつけている最中に。
今回は、ログイン機能を実装しようとしたところ、ログインボタンを押しても、画面も動かず、ターミナルにしれっとエラーが出てくるだけで、意外と時間を食ってしまいました。

## 読まずに進めるのは危険
エラーが出てしまうと、どうしても拒否反応が出てしまって、読む気にならない時ありますよね。私もそうでしたし、たまにそうです。
しかしながら、エラーが出るということは、後で大きなエラーになる前に気づけたということなので、ポジティブに行きましょう!笑

### ソースコード
“`ruby:config/routes.rb
Rails.application.routes.draw do
get ‘/login’, to: “sessions#new”
post “/login”, to: “session#create”
namespace :admin do
resources :masters
end

get ‘master/index’
root to: ‘top#index’
resources :users

e

元記事を表示

mimemagicのbundle installに手間取った件

## 起きたこと
しばらく昔に触っていたローカルでそのまま動かしていたRuby on Railsプロジェクトを久々に動かそうと`bundle install`したら、以下のエラーが。

“`terminal
Gem files will remain installed in /Users/hoge/projects/hogehoge/vendor/bundle/ruby/2.7.0/gems/mimemagic-0.3.9 for inspection.
Results logged to /Users/hoge/projects/GitHub/hogehoge/vendor/bundle/ruby/2.7.0/extensions/x86_64-darwin-21/2.7.0/mimemagic-0.3.9/gem_make.out

An error occurred while installing mimemagic (0.3.9), and Bundler cannot continue.
Make sure that `gem install mimemagic -v

元記事を表示

【初心者向け】moduleの使い分け

# 執筆経緯
moduleは色々な使い方ができるのは知っていたのですが具体的にどうやって使えばいいのかを
勉強していて気付いたことを共有したいと思い執筆に至りました。

# 対象の読者
– ruby初心者の方
– moduleの使い方がわからない方

上記の方たちに向けて記事を書いていこうと思います!

# moduleの使い方その1
moduleは色々な使い方がありますがまず紹介するのは名前空間としての使い方です!

“`ruby:
class OtukaTakashi
def initialize(from,age)
@from = from
@age = age
end
end

class OtukaTakashi
def initialize(job,talent)
@job = job
@talent = talent
end
end
“`
上記の様に別々に定義されて使い方も異なるclassがあります。
それぞれ違うところで1個のclassのみが使われている内はいいですがある日一緒に使うことになったら
どうやって区別すれば

元記事を表示

OTHERカテゴリの最新記事