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

Ruby関連のことを調べてみた2022年11月30日
目次

rubyのStringクラスの組み込みメソッドを層別してみた

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼

みなさんは組み込みメソッドという存在はご存じでしょうか?
組み込みメソッドとは自分で定義しなくてもデフォルトで使えるようになっているメソッドの集合です。
rubyの場合、stringクラス、arrayクラス、hashクラスなど、各クラスで使える組み込みメソッドが違います(共通のものもあります)

例えばstringクラスだけでも以下↓の数だけあります。
https://docs.ruby-lang.org/ja/latest/class/String.html

使えると便利なのかもしれませんが、覚えるのが大変そうですね…?

覚えるための一助となればと思い、stringクラスの一部のメソッドだけではありますが私なりにmiroというアプリで層別してみましたので、
よかったらご覧下さい。

### miro URL
https://miro.com/app/board/uXjVPHfC2SM=/?share

元記事を表示

CentOS 7 に Ruby 3.1.3 がインストールできなかったら

Ruby 3.1.3 が出たので CentOS 7 にインストールしようとしたらできなかった。
その原因と解決方法について。

# 現象

以下のようにして rbenv で Ruby 3.1.3 をインストールしようとした。

“`terminal
rbenv install 3.1.3
“`

エラーが出てインストールできなかった(後述)。

なお,同時にリリースされた 2.7.7 はインストールできた。

# 原因

CentOS 7 の gcc のバージョンが古かった。

“`terminal
$ gcc –version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
“`

gcc というのは C コンパイラーの一つ。Ruby は C(など)で書かれており,rbenv を使ってインストールする場合はこれが必要になる。

# 対策

devtoolset とかいうやつを入れると,新しい gcc が使えるらしい(元の gcc と共存可能)。

## devtoolset-11 を入れる

現時点(2022 年 11 月)では de

元記事を表示

【個人開発】今のあなたの感情に合った音楽を提案、私はこんな感情の状況のときに、こんな曲を聴くよ!を共有できるアプリを作りました!

![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1457972/600c041f-17cf-466f-7421-45bed4284ecb.png)

▼サービスURL
https://www.your-song.site

▼github
https://github.com/Hiro929/your_song

## はじめに

早速ですが、みなさん、音楽を聴こうとしたとき、何の曲聴こうかなと悩んだことありませんか?
私の場合、ハマっている曲があれば、それを聴くことが多いですが、そうでない場合は「どうしようかな〜」となることが多いです。
また、悲しい時(落ち込んだ時)など、何聴こうかな〜となることが多いです。
そういった時に、おすすめの曲を提案してくれるものがあればいいなと思いました。また、自分はこの曲に助けられているから聴いてみて!とオススメできて、ユーザーの方が落ち込んでいる方などの助けを少しでもできるようにしたいと思い、本サービスを作りました。

## サービス概要

主な機能は、2

元記事を表示

Fly.ioにRailsアプリをデプロイした時に色々なエラーが出たので解決した

# 環境
– OS
– エディション Windows 10 Home
– バージョン 21H1
– OS ビルド 19043.2130
– `ruby –version` -> `ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32]`
– `rails –version` -> `Rails 6.1.7`
– `flyctl version` -> `flyctl.exe v0.0.435 windows/amd64 Commit: c5149629 BuildDate: 2022-11-22T16:41:44Z`
# 背景
 HerokuのPostgres無料プラン終了に伴い、HerokuにデプロイしていたRailsアプリをFly.ioにデプロイし直しました。
 基本的には以下の記事を参考にデプロイしましたが、記事内に出てこないエラーに遭遇したので、どのように解決したかを書いていきます。
[Fly.ioでデプロイする手順(Window) – Qiita](https://qiita.co

元記事を表示

RailsのCurrentAttributesをより有害にするGemを作ってみた

## なんでこんなGem作った?

こんにちは!合同会社イービルマーシャンズと合同会社Sampo Development代表のサンポです。
フィンランドから台湾経由で日本に来ました。
(このGemは一切Evil Martiansと関係ありません)

CurrentAttributesは有害と言われる時もありますが、より有害にできないか、という想いから今回のGem作りを始めました。

面白そうなので、もっと便利に使えるようにしました。

RubyGemsは[ここ](https://rubygems.org/gems/super_current)で、ソースは[ここ](https://github.com/sampokuokkanen/SuperCurrent)で確認できます。

## CurrentAttributesとは何か?

ActiveSupport::CurrentAttributesはRailsの便利機能の一つです。
グローバルで使える値を設定できるので、値を渡さないといけないことが少なくなります。
そしてリクエストごとに自動的にリセットされるので、データの漏洩も心配なし!(

元記事を表示

【RUBY】FizzBuzz問題

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 概要
スクールの問題でFizzBuzz問題というものが出てきて、かなり有名なプログラミングの問題ということでした。
まず、1〜100までの数字をターミナルに出力して、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、3と5の倍数である「15の倍数」のときはFizzBuzzと出力するというプログラムを作っていきます。

作るプログラムの雛形は下記↓
“`ruby
def fizz_buzz
# ここに処理を書き加えてください
end

fizz_buzz
“`
条件の概要を整理すると、以下の4点でした。
・数字の1~100を出力する
・値が3の倍数のときだけ、”Fizz”という出力に置き換える
・値が5の倍数のときだけ、”Buzz”という出力に置き換える

元記事を表示

構造化データについて

# 構造化データとは

## appleのmacbookについて説明したいけど、、
appleのmacbookの情報をWebページで紹介しようとした時、人間の目ではりんごとmacbookの区別がつきますが、
検索エンジンが理解する言語は人と異なるため、別途説明がないと、りんごに関する情報のWebページだと認識するかもしれません。

もちろんmetadata等に明確に情報が明記されていれば、検索エンジンもコンテンツの内容を把握してくれると思いますが、
そうではない場合は意図したように認識してくるない可能性があります。
| ページ名|説明したい内容|
|——-|:———-:|
|appleMacbook.html|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/0dc1436f-1dc4-0765-9eba-4e5c25935cf4.png)
|apple.html|![image.png](https://qiita-image-store.s3.ap-n

元記事を表示

devise導入していれば使えるauthenticate_user!について

# はじめに
備忘録です。

## authenticate_user!とは?
主に2つ理解する必要があります。

・deviseのメソッドである
・ユーザがログインしているかどうかを確認し、ログインしていない場合はユーザをログインページにリダイレクトする。

## authenticate_user!の使い方の一例

before_action :authenticate_user!, except: [:show, :index]
基本的にはbefore_actionと一緒に使います。

上記のコードの意味としては、
全てのアクションの前に、ユーザーがログインしているかどうか確認する。
ただし、showアクションと、indexアクションが呼び出された場合は、除くよ。という意味になります。

基本的にindexアクションや、showアクションはログインされていなくてもみられるアプリが多いためです。
(Twitterはログインしていなくても、ツイートの一覧、ツイートの詳細は見ることができる)

## 参考記事

https://qiita.com/gogotakatak

元記事を表示

railsにおけるテーブル修正の流れ

# はじめに
テーブル設計を誤り、実行する中で間違いに気がついたとき、どのようにテーブルの修正を行えば良いかわからなくなってしまったため、記録に残す。
誤っている解釈があれば、ご指摘お願いします。

## テーブルの修正で気にかけること
– マイグレショーンファイルのstatusをup→downへ変更
rails db:migrate:statusでstatus状況を確認→rails db:rollback
– モデルの削除
rails d model モデル名
(マイグレーションファイルも同時に消される)

元記事を表示

zipを使った中間テーブルへのレコード追加

コードそのままはやばそうだからテーブル名とかは変えてる。
“`ruby:controller
def create
answer = Answer.new(answer_params)
dates = answer.dates
sc_answers_params.zip(dates) do |status, date|
answer.sc_answers.build(date_id: date.id, status:)
end
if answer.save
render json: [answer, answer.sc_answers]
else
render json: answer.errors
end
end
“`
createメソッドで親テーブルに値を追加すると同時に子テーブルにも値を追加してる。
buildメソッドで作ってるけどnewメソッドでもいける。ただ、子テーブルに関連レコードを作るときは慣習的にbuildメソッドを使用するらしい。

元記事を表示

インターン中、不採用になった書き方集

不採用になった書き方を追記していきます。

## ruby
### 複数テーブルの値を一気に引っ張ってくる
“`ruby:不採用
status_count = Event.joins(possible_dates: :schedule_answers).select(“events.*, possible_dates.*, schedule_answers.*”).where(id: @set_event.id).group(:status).size
“`
“`ruby:採用
render json: @set_event.adjust_show_json
“`
別記事で紹介してる小技のやつを使って、メソッドをモデルに実装した。
不採用になったやつは可読性も低いし、めっちゃメソッド使ってるから処理速度的にもきついかも(わからんけど)。

元記事を表示

railsでjson出力するときの小技

railsで処理を書いているとき、renderを使用してjsonで処理結果だったりDBのデータを返すことがあると思います。
そんなときに習った小技をメモしておきます。
## 書き方
処理はcontrollerのindexメソッドとかに書くと思います。
でも小技としてはmodelに処理を書きます。
“`ruby:event.rb
def adjust_json
{
event: {
id: self.id,
user_id: self.user_id,
category_id: self.category_id,
name: self.name,
description: self.description,
is_public: self.is_public,
},
dates:
self.dates.map do |date|
{
id: date.id,
at:

元記事を表示

【Rails】引数は必要な分だけ渡すかまるごと渡すか【リファクタリング】

## 環境
Rails 6.1.3.1
ruby 2.7.1
mysql Ver 8.0.26

## 前提

(1)User -> (多)Attendance

## before
“`create_or_update_time!“`はざっくり言うと
・idがなかったら新規登録
・idと時間の指定があったら特定して更新
・idはあるが時間が指定がなかったら削除
を行うメソッド。

この場合、“`create_or_update_time!“`メソッドに引数を必要な分3つのみ(“`parameter[:punch_in]“`と“`parameter[:date]“`と“`parameter[:type]“`)渡している。
引数が3つというのが少し多い気もするが、必要な分の引数を渡す方法で一見良いような気がする。

“`ruby
parameter = {
id: employee.id,
punch_in: { id: 1, value: ’11:30′ },
type: ‘home’,
date: ‘2022/10/01’

元記事を表示

多対多のアソシエーションを設定する

# はじめに
railsで多対多のアソシエーションを設定する際に必要な知識を忘れないために記録に残します。
なお、テーブル間の関係は、userテーブルとroomテーブルが多対多の関係性であるとする。

# アソシエーションの手順
railsにおいて、多対多のアソシエーションを表現するためには、中間テーブルという概念を利用する。
中間テーブルとは、2つのテーブル間に配置するテーブルのこと。

– 中間テーブルに紐づくモデルを作成する

% rails g model room_user

– カラムを設定
中間テーブルのマイグレーションファイルに外部キーを記載

class CreateRoomUsers < ActiveRecord::Migration[6.0] def change create_table :room_users do |t| t.references :room, null: false, foreign_key: t

元記事を表示

MacOS 12.5.1 に rbenv で Ruby 3.1.3 をインストールする

今後、 Ruby を使うことになりそうなので、ローカルPCに Ruby を rbenv でインストールしようとしたら

“`zsh
BUILD FAILED (macOS 12.5.1 using ruby-build 20221124)
“`

でつまづいた。
対応策ふくめてインストール方法をメモしておく。

## 環境

– MacOS 12.5.1
– anyenv 1.1.5

## インストール手順

### 1. anyenv で rbenv をインストールする

anyenv でコマンドを叩いていく。

“`zsh
# rbenv があるのを確認
$ anyenv install -l
Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
jlenv
kubectlenv
luaenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
swiftenv
tfenv

# インストール
$ anyenv

元記事を表示

RSpecで遅いテストをふだんskipして、たまに全部実行する方法

https://twitter.com/isochikuwa/status/1597044717224886272

上のツイートを見て、どうやるのがいいか考えてみました。
以下がその方法です。

遅いテストに`:slow`タグを付けます(名前は`:slow`じゃなくても可)。

“`ruby
it ‘めちゃくちゃ遅いやつ’, :slow do
# …
end
“`

`.rspec`ファイルに以下の行を追加します。

“`erb:.rspec
<%= '--tag ~slow' unless ENV['ALL_RUN'] %>
“`

デフォルトでは`:slow`タグが付いているテストは実行されなくなります。

“`
# :slowタグが付いているもの以外を実行する
$ bundle exec rspec
“`

全テストを実行したいときは環境変数`ALL_RUN`を指定します(`ALL_RUN`以外の環境変数名でも可)。

“`
# :slowタグが付いているものも、付いていないものもすべて実行する
$ ALL_RUN=1 bundle exec
“`

元記事を表示

【RUBY】.floorメソッドを用いて小数点の切り捨てを行う

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 前提
ECサイトのポイント付与サービスを考えならがら、.floorメソッドの使い方を学びます。

購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント
このように付与されるポイントを出力するメソッドを作成。
ただし誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てる。
“`ruby
呼び出し方:
calculate_points(amount, is_birthday)

出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイン

元記事を表示

Active Record の transaction を雰囲気で書いて rollback されてなかったということがないようにしたいメモ記事

# ApplicationRecord.transaction do を理解する

大きく分けて2種類書き方がある

“`rb:rollbackされる
def do_rollback
ApplicationRecord.transaction do
Member.create!(email: ‘duplicate@gmail.com’, password: ‘a’)
end # ← end で block を閉じた場合 rollback 処理が行われます。
rescue ActiveRecord::RecordInvalid
p “エラー”
end
end
“`

“`rb:rollbackされない
def do_rollback
ApplicationRecord.transaction do
Member.create!(email: ‘duplicate@gmail.com’, password: ‘a’)
# end を入れない場合、rollback が行われません。

元記事を表示

【RUBY】if,elseを用いた指定された複数の引数をそれぞれの条件で四則計算するプログラムの実装

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 以下の仕様を満たすメソッドnumを作成
・メソッドの実引数として「1以上の正の整数」を3つ用意し、それぞれを仮引数a,b,c としてnumメソッド内で使用する
・第一引数と第二引数は足し算をし、変数abに代入する
・第三引数が3以下の場合は変数abを第三引数の値で割り、結果を出力する
・第三引数が4以上の場合は変数abを第三引数の値で掛け、結果を出力する

“`ruby
def num(a, b, c)
# ここに条件式を実装する
end

# 呼び出し例
num(1,5,3)
num(1,5,5)

# 出力例
num(1,5,3) → 2
num(1,5,5) → 30
“`
“`ruby
def num(a, b, c)
ab = a + b
“`
まず、「・第一引数と第

元記事を表示

Railsにおける配列への代入とリファクタリング

# 問題のルール

1. lengthとwidthが引数で渡され、最大サイズの正方形を可能な限り求めて、その正方形の一辺の長さを配列にまとめて戻り値にする。
2. lengthとwidthが同じ長さの場合はnilを返す
イメージ図は下記で、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264678/2d63c005-7786-5382-ac9f-a37d958444a2.png)
テストとしては下記のようなものになる

“`ruby
sqInRect(5, 3) should return [3, 2, 1, 1]
sqInRect(3, 5) should return [3, 2, 1, 1]
“`

# 最初に書いたコード
ざっと以下のように書いたが、毎度ながら`空の配列list`の定義が少し見にくい時がある。

“`ruby
def check_smallest_square(line_a, line_b, list)
## sortの代わりにminm

元記事を表示

OTHERカテゴリの最新記事