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

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

Rails6 Action Text と Active Storageの実装 Cloudenaryにアップロード リッチテキスト 複数画像投稿

# 環境
“`
$ rails -v
Rails 6.1.4.4

$ ruby -v
ruby 3.0.2

macOS Monterey
version 12.2
“`

デモ
![名称未設定.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/76d47081-5093-39a4-5c91-556302a2835a.gif)

# 参考記事
https://railsguides.jp/active_storage_overview.html

https://railsguides.jp/action_text_overview.html

https://cloudinary.com/documentation/rails_activestorage

# アプリの作成

“`
$ rails new text_strage_app
$ rails g scaffold Post title:string
$ rails db:migrate
“`

# Active St

元記事を表示

[py2rb] 多重継承の6

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 多重継承 (Python)
https://qiita.com/superrino130/items/a62568fe730f6ae04c09

前回の記事のコメントにて、@Nabetani さんより`Ruby3.1`ではクラス変数のオーバーライドがエラーになることを教えていただきました。

また、クラス変数について興味深い記事を投稿されています。

https://qiita.com/Nabetani/items/bbd7fc95a9f006ab9136
# 失敗(Ruby)
“`ruby
module Base
def __init__
@name = ‘Base’
@base = ‘Base’
puts ‘Base’
end
end

module C4
include Base
def __init__
@name = ‘C4’
puts ‘C4’
super
end
end

module C2

元記事を表示

includesを使ってSQLの発行件数を減らそう(N+1問題)

## SQLの発行件数が多いと指摘を受ける。

業務にて、ある一覧画面を作成していたところ、
自分が書いたソースをみた先輩から、
「この一覧画面のSQLの発行件数が多すぎる。ちょっと減らしてみて。」とご指摘を受けました。

SQLの発行件数が多いのはN+1問題が起きていたことが原因で、
includesを使用することで
事象を解決できたのでアウトプットしてみようと思います。

## N+1問題とは
必要以上にSQLが実行されて、パフォーマンスが低下する問題。
今回指摘を受けた画面では、
ログを見ると、他のテーブルの情報を取得するため何度もSQLが発行されていました。

## includesとは

includesメソッドは、関連している複数のテーブルからデータをあらかじめ取得するメソッドです。

N+1問題を解決させるためには、
都度SQLを発行させるのではなく、あらかじめデータをすべて取得しておくことで解決することができます。

例えば、
UserクラスとPostクラスがあって、
投稿からユーザ名を取得する処理があったとします。

“`rb
# models/user.rb
cl

元記事を表示

クラス変数の持ち主

# これは何?

クラス変数の持ち主が、 python と ruby で違うことに気がついたので、他の言語どうなってるんだろと思って調査したのでその記録。ジェネリクスとテンプレートを交えながら。

# ruby の場合

“`ruby:ruby
class B
def set_v(x); @@v=x; end
def v(); @@v; end
end

class C < B;end class D < B;end c = C.new.set_v("C#set_v") d = D.new.set_v("D#set_v") p [ C.new.v, D.new.v ] #=> [“D#set_v”, “D#set_v”]
“`

クラス変数 `@@v` の持ち主は、 `class B` 。

`C` 経由で変更しても、 `D` から見た `@@v` の値が変わる。

# Python3 の場合

“`python:python3
class B:
v = “in-class-def”
@classmethod
def setV(cls,

元記事を表示

【Rails】ログイン機能をGem ‘devise’で実装

こんにちは。
早く駆け出したい修行僧です。

今回は、Gemの ‘devise’ を使ったログイン機能を学んだので、
こちらにアウトプットさせていただきます。

尚、「それは違うよ」など訂正箇所がございましたら、
愛のあるご指摘を頂けたら幸いです。

# 環境
macOS Monterey(M1) 12.2.1
ruby 3.1.0
Rails 6.1.4.6
devise 4.8.1

# ‘devise’とは
特定のページを閲覧したりユーザに制限をかけたりするためには**ログイン認証**が必要となってきます。ログイン認証とはログインやログアウトの機能を指します。
そして、それらは新規登録をしないと始まりません。そんな機能を簡単に実装してくれる優れたgemが ‘devise’ です。

# インストール
`rails new` でアプリ作成済みであることを前提とします。
まずは導入したいアプリケーションのGemfileに以下のコードを挿入します。

“`ruby:G

元記事を表示

[AtCoder 初心者] Rubyで競プロ!!! 標準入力

# はじめに #
AtCoderを始めたので、自分用の整理、メモとして投稿します。
間違えている箇所があれば指摘して下さると幸いです!!!!!!!!!!!!

# 1つの要素を取得 #

“`ruby:test.rb
A = gets.chomp
p A
“`
例: 1を入力

“`
-標準入力-
1
“`

“`
-出力-
“1”
“`

・getsメソッドで入力した値は、文字列(Stringクラス)で返される。**数値(Integerクラス)として扱いたい場合は、to_iメソッドを使う。**
・chompメソッドは文字列末尾の改行コード \n を削除するメソッド。基本的にこいつは使う。

“`ruby:test.rb
A = gets.chomp.to_i
B = gets

p A
p B
“`

例: Aに1、Bに2を入力

“`
-標準入力-
1
2
“`

“`
-出力-
1
“2\n”
“`

# 1行の複数の要素を取得 #

“`ruby:test.rb
A = gets.chomp.spilt(” “)
p A
“`

例: 1 2 3

元記事を表示

Rspecのallow_any_instance_ofを書き換える

# はじめに
インスタンスメソッドのスタブを `allow_any_instance_of` で書いていたのですが、どうやらこれが非推奨らしいので、これを書き換える方法をメモがてら記事にしました。

# allow_any_instance_of を使ったテスト

テスト対象のファイルはこちら

“`ruby:test.rb
class Test
def test_method
hoge = Hoge.new
hoge.hello
end
end

class Hoge
def hello
“hello!”
end
end
“`

そして `allow_any_instance_of` を使ったスペックファイルがこちら

“`ruby:test_spec.rb
require_relative ‘test’

describe ‘Test’ do
context ‘test_method’ do
before do
allow_any_instance_of(Hoge).to receive(:hello).and_

元記事を表示

【個人開発】面倒くさがり屋のための糖質収支ジャッジアプリ「Sugarjudge」をリリースしました

## はじめに
みなさんは食事管理が得意ですか?
「痩せたくて食事制限をしようとしても面倒ですぐにやめてしまう」
そんなことありませんか?
私はそんな面倒くさがり屋のために食事管理のハードルを下げたアプリ「Sugarjudge」を作成しました。

## サービス概要
アプリURL https://www.sugarjudge.com/
GitHub https://github.com/udakohei/Sugarjudge
![9pz4Ykqg6Htc1JR1643600668_1643600722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534184/166a6996-d662-4a41-0a89-58623e2e4d79.png)
痩せたいけど食事を管理、制限することが面倒で難しいという悩みを持った人に、
簡単でざっくりと楽しく糖質を管理、制限できる環境を提供する、
糖質収支ジャッジアプリです。

* 糖質収支を、一食の摂取糖質量から一食に摂取しても良い上限の糖質量を引いた値として考え

元記事を表示

作ったシェアリングプラットフォームが2年目にしてGMV580%成長するまでにやったこと。

![chart1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2467362/7956497f-6333-760a-d4fc-78469ed6173c.jpeg)

こんにちは!HANOWAの新井です。
歯科医療人材のシェアリングプラットフォームやってます。

12月末で3期目を終え、ローンチ2年目の2021年度は年初来GMV(流通人件費)6.8倍、580%の成長で終えることが出来ました。
(年が明けてもグイグイ伸びてます)

スタートアップの成長率は、ローンチ初月からの比較でたまに「1,200%成長!」とか見かけるのですが、上の図のようにローンチ1年目は無視した数字です。

ここでは特に、マーケットプレイス型のプロダクトで起業しようとするエンジニアさんの参考になればと思い、書いていきます。

# 前提

**プロダクトや開発環境について**
 [フロントエンド]
  ・言語:Nuxt.js/Vue.js
  ・OS:Linux
  ・DB:FirebaseのFireStore
  ・デプロイ先:F

元記事を表示

【Ruby On Rails】radio_buttonを数値として扱いparamsを使って合計点数など計算する

# 環境
– Mac(12.2.1)
– MacBook Pro (13-inch, 2020)
– 2 GHz クアッドコアIntel Core i5
– 16 GB 3733 MHz LPDDR4X
– ruby (3.0.0p0)
– rails (7.0.1)
– mysql2 (0.5.3)

# 実現したい内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/747746/e578b5ca-28c4-3194-3c10-810d75bd1631.png)

上記の質問内容に対してラジオボタンを押したときに

* はい=>2点
* いいえ=>0点
* どちらでもない=>1点

と、それぞれのラジオボタンを点数として取り扱う

更に、それらの点数を合計し、結果をDBに保存する

# 主に使用したメソッド
・ [form_with]
・ [radio_button]
・ [label]
・ [submit]
・ [params]

# viewには何を書く?
vie

元記事を表示

「Herokuの起動が重すぎる」を解決する方法

#はじめに
 現在オリジナルアプリで朝散歩習慣化アプリを作っています。
Herokuにデプロイしているのですが、立ち上がりがとにかく遅くて使い勝手が悪い。
今回はHerokuの立ち上がりを早くする方法について学んだのでまとめます。

#なぜ起動が遅くなるのか
 Herokuの立ち上がりが遅い原因は、「30分アクセスがないとスリープモードになる」という仕様があるためらしいです。
そのため、スリープにしないために設定を変える必要があります。

#Herokuにスケジューラを追加

まずはターミナルで下記のコマンドを打ちます。

“`
% heroku addons:create scheduler:standard
“`
すると以下のような表示が出ます。

“`
Creating scheduler:standard on ⬢ morning-walk… free
To manage scheduled jobs run:
heroku addons:open scheduler

Created scheduler-flexible-28737
Use heroku a

元記事を表示

[py2rb] 多重継承の5

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 多重継承 (Python)
https://qiita.com/superrino130/items/baafa3d35870e63cd5bf#comment-4d89a0f12472ee16fec8

前回の記事の [コメント](https://qiita.com/superrino130/items/baafa3d35870e63cd5bf#comment-4d89a0f12472ee16fec8) にて、@Nabetani さんよりメソッドのまとめ方を教えていただきましたので、それを踏まえて再びやってみました。

![20220224a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/45899ae7-6363-8b1e-246e-741e977e44ed.png)

+ 一番目の行は、ファイル名(Rubyですとmodule名)
+ C:class, SC:継承するsuperclass

元記事を表示

Ruby の rescue の注意点

今更ながら Ruby技術者認定試験のGOLD を受けようと思い
模擬試験問題を解いていたところ…奇妙なコードに出くわした。
忘れると痛い目を見そうなので、ここに記述する

“`ruby
begin
‘aaa’.bbbb
rescue
puts “レスキュー出来たね”
end

#=> レスキュー出来たね
“`

何も問題はない

“`ruby
begin
‘aaa’.bbbb
rescue NoMethodError
puts “レスキュー出来たね”
end

#=> レスキュー出来たね
“`

これも問題ない
期待通りの動きである

“`ruby
begin
‘aaa’.bbbb
rescue NameError
puts “レスキュー出来たね”
end

#=> レスキュー出来たね
“`

– むむ?
– エラーの種類が違うのでは?

“`ruby
begin
‘aaa’.bbbb
rescue StandardError
puts “ここには来ないよね?”
rescue NoMethodError
puts “レスキ

元記事を表示

bundle exec rspec実行時にSelenium::WebDriver::Chrome#driver_path= is deprecated.〜 エラーが発生した

# bundle exec rspec実行時のエラー解決備忘録

## エラー内容

– RSpecでテストを実行使用とした際に、下記エラーが発生した。

“`
$ bundle exec rspec2022-02-23 18:27:19 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
“`

## 解決方法
– Gemfileの記載内容を修正
– gem ‘chromedriver-helper’ を削除
– gem ‘webdrivers’ を追加し、bundle installを実行
– 再度bundle rspec test を実行し、無事テストが走った

“`
group :test do
# Adds support for Capybara system testing and selenium driver

元記事を表示

Ruby returnで複数の値を返す

# はじめに
学習記録アプリの開発中、グラフの作成のために1週間分の日付の取得する処理を、「今週」「最後に学習した日の週」「最後に学習した日の前週」の3つそれぞれ記載していました。Rubyでは、メソッドの戻り値を複数返すことができるということなので、3つの処理を1つにまとめていきたいと思います。

# 環境
– rails 6.0.4.4
– ruby 2.6.5
– chart.js 2.8.0

# 複数の戻り値を返し方
returnの後にカンマで区切って返す値を記述します。

“`
def calc(a, b)
x = a + b
y = a – b
return x, y
end

a = 20
b = 15
x_1, y_1 = calc(a, b)
puts x_1, y_1
“`
このように、x_1とy_1の変数にそれぞれ値が入っています。

“`ターミナル.
35
5
“`
ちなみに1つの変数に対して、複数の戻り値を代入すると、自動的に配列に変換されます。
正確には、データそのものが配列形式で入るのではなく、データの場所の情報が入り、配列と同じ記述

元記事を表示

【解決方法1】We’re sorry, but something went wrong. If you are the application owner check the logs for more information.

【事象】
RailsTutorial第6版の7章。
herokuへのデプロイ後に本番環境を確認したところ、なぜか/signupへのリンクで下記エラーが発生。
**「We’re sorry, but something went wrong. If you are the application owner check the logs for more information. 」**

開発環境では問題なく作動しているが本番環境の/signupへのリンクで何か問題が起きていることが発覚。

【やったこと】
下記コマンドでログを確認したところ、status=500の赤いテキストを発見。
“`heroku logs –tail“`

500エラーとはサーバーのエラーとなり、heroku側のエラー。
本番環境でマイグレーションしていないことに気づき、下記コマンドを実行。解決。
“`heroku run rails db:migrate“`

元記事を表示

外部キーのテストコードが上手くいかない

簡易的なフリマアプリを作成中。

単体テストコードにて、エラーが発生。
下記ターミナル内のエラー内容。

“`:ターミナル

Failures:

1) OrderDelivery 購入者情報の保存 内容に問題がある場合 userが紐ついていなければ購入できない
Failure/Error: expect(@order_delivery.errors.full_messages).to include( “” )
expected [] to include “”
# ./spec/models/order_delivery_spec.rb:81:in `block (4 levels) in

2) OrderDelivery 購入者情報の保存 内容に問題がある場合 itemが紐ついていなければ購入できない
Failure/Error: expect(@order_delivery.errors.full_messages).to include( “Item must exist” )

元記事を表示

RubyでGoogle Calendar APIを使えるようにするための設定

# はじめに

GoogleCalendarの情報を取得してRubyで何かプログラムを作りたいと思い、その時のGoogle側の設定が少しややこしかったので記録します。

# 前提

– Googleアカウントを持っている
– macOS
– Ruby 2.0以上が実行できる環境 ([公式ページより](https://developers.google.com/calendar/api/quickstart/ruby))

# 設定手順

大まかな流れは以下の通りです。

– GCPのコンソールを使えるようにする
– GCP内でプロジェクトを作成
– Google Calendar APIの有効化
– OAuth 同意画面の設定
– OAuth 2.0 クライアント IDの作成
– Ruby quickstart で動作確認

# GCPのコンソールを使えるようにする

以下画面にアクセスしてトップ画面を開きます。

https://console.cloud.google.com/getting-started

# GCP内でプロジェクトを作成

トップページの`プロジェクトの選

元記事を表示

Railsで使用しているDBの情報を取得する

# はじめに
`rails console` とかで今使っているDBの情報をパパッと表示したいと思って調べたら出てきたのでメモ代わりに書き出します。

# 結論
`connection_db_config` メソッドを使う(`connection_config` メソッドもあるが、こちらはRails 6.2で Deprecated となっている)

# 確認方法
ここではirbで確認してみる。

このようにDBの接続状況が `DatabaseConfigurations::HashConfig` オブジェクトで返ってくる。ちなみに `connection_config` メソッドでは `Hash` オブジェクトで返ってきていた。

“`ruby
irb(main):001:0> ActiveRecord::Base.connection_db_config
=>
#“sqlite3”

元記事を表示

【2022年2月】未経験から自社開発企業内定までの記録・感想

# はじめに

2021年6月より学習を開始・2022年2月頭から転職活動を開始し、三週間ほどで都内の自社開発企業様2社から内定を頂きました。
内定企業の技術スタックはRuby,Rails,Vue.js,Docker,CircleCiといったところです。

今後の未経験転職希望者の方々の参考になればと思い記録や感じたことを記事にします。

|見出し |概略|
|:|:|
|[自己紹介](#自己紹介)|学歴・職歴・資格
|[転職活動結果](#転職活動結果)|応募社数・使用媒体等
|[ポートフォリオ](#ポートフォリオ)|PFの内容・技術スタック等
|[学習記録](#学習記録)|総学習時間・PF作成の過程等
|[転職活動過程](#転職活動過程)|PF完成後に取り組んだ事等
|[面接内容](#面接内容)|面接で聞かれたこと・評価された事等
|[総評](#総評)|現在の未経験転職市場に対する個人的見解

# 自己紹介

年齢:25歳(社会人3年目)
出身大学: 慶應義塾大学法学部
現職:一部上場メーカーの営業
資格:TOEIC905点

プログラミング言語は昨年6月に初めて触りました。

#

元記事を表示

OTHERカテゴリの最新記事