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

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

引数をそのまま戻すメソッドを作る際の注意

# クイズ:引数をそのまま戻すメソッドを作りなさい。

与えた引数がそのまま戻ってくるメソッドってありますよね、`p`とか。そんなメソッドを作ってください。ただし引数は 1 つとは限りません。(キーワード引数やブロックは考えないことにします。)

つまり、以下のような結果が得られるメソッドです。

“`ruby
return_args() # => nil
return_args(1) # => 1
return_args(1, 2) # => [1, 2]
“`

クイズ形式にしてみましたが、私自身がそんなメソッドを作った際に引っかかってしまったので戒めの記事です。無駄に長くなってしまったので、結論だけ知りたい人は[#結論](#結論)へどうぞ。

記事中の実行結果はすべて以下のバージョンの Ruby を用いています。

“`
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux]
“`

## 引数転送 `…` が使えるのでは?

Ruby 2.7 で`…`による引数の転送ができるよう

元記事を表示

form_withについて

## はじめに
form_withは初学者にとって理解しずらい部分だと思います。
modelオプションとurlオプションのところで、よく分かってなかったことがありました。
## フォームとは
ユーザーが情報を入力する入力欄のこと。
アカウント登録ページに出てくる名前とかemailとかを入力する四角い箱の事です。
## form_withとは
フォーム作りを助けてくれるヘルパーメソッドです。
ヘルパーメソッドとはRailsにおける、主にビューでHTMLタグを出現させたりテキストを加工するために使うメソッドの総称です。

例えば、HTMLで以下のように書くのを

“`html



“`

以下のように書きます。

“`ruby
<%= form_with url: "/tweets", method: :post, local: true do |f

元記事を表示

AWSのS3で画像が保存できない

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

AWSのS3に画像を保存するための実装を実施。
必要なファイルや記述なども終え、まずローカル環境で画像がS3に保存できるかの挙動確認を行う。

が、__エラー発生。__

エラー文は以下の通り。

“`
NoMethodError (undefined method `upload’ for nil:NilClass):
“`

「スペルミスでもしたかな?」

まずは今回新たに追記した`config/environments/development`と`config/storage.yml`のファイルを見直す。
しかし特に間違っている様子はない。

次にエラー内容をgoogleにて検索。
すると、同じ境遇の方々がたくさんいらっしゃいました笑
それぞれの記事を見ていると「:が抜けている」や「””を忘れている」などの内容が多かったので、再度その辺りを確認するため、各コードを見直し。
が、やはり間違いが見当たらない・・・

S3に入る直前に挙動確認を行った際は、問題なく画像が保存されていたので、コードの書き間違いは考えにくい。
間違いがあるのはcon

元記事を表示

テスト

・テスト

元記事を表示

【RSpec】テストコードはループを使わない方がベター

# なぜループ処理を使わない方がいいのか

テストコードは仕様がひと目でわかることが大事なため、可読性が下がるループはしない方がベター

“`ruby
describe ‘#format_date_of_birth’ do
it ‘生年月日を和暦で表示すること’ do
%w(1977-06-06 1988-06-06 1989-06-06 2016-06-06).each do |date_text|
date = Date.parse(date_text)
person = Person.new(‘Taro’, date)
jp_year = date.year >= 1989 ? “平成#{date.year – 1988}年” : “昭和#{date.year – 1925}年”
expected = “#{jp_year}#{date.month}月#{date.day}日”
expect(person.format_date_of_birth).to eq expecte

元記事を表示

AWSのEC2の環境構築で参考にしたサイト(rails,docker,nginx)

以下のインフラ環境を構築するまでに参考にしたサイトをご紹介します。

# 1,AWSの全体的な知識を付けるために参考にしたもの
<動画教材>
WEBエンジニアの山浦さんのUdemyの動画教材です。
解説が初心者に優しく、わかりやすいのでおすすめです。

https://www.udemy.com/course/aws-and-infra/

<書籍>
解説がわかりやすいです。
イラスト使って説明してくれるので、なにをやっているのかイメージしやすく、すぐに読み終えることができました。

https://www.amazon.co.jp/Amazon-Services-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89-%E6%94%B9%E8%A8%823%E7%89%88/dp/4296105442/ref=sr_1_15?__mk

元記事を表示

私が作ったオリジナルアプリを公開します!

はじめに

スクール卒業後に、独学で完成させました。
まだまだ未熟ですが、誰かの参考や希望になればと思い、投稿します。

①「冷蔵庫の中身がわかるアプリ」

https://reizoko-app.herokuapp.com/
(ユーザー名: reizoko /パスワード: 11770)

[GitHubコード:https://github.com/mina153/reizoko-app ]

冷蔵庫の中身を記録するアプリです。
同年代の方と「どんなアプリが欲しいか」というテーマで討論したときに、出た意見を参考にして、このアプリを作りました。

工夫した点は、
 ・ユーザーが飽きないように、CSSを使ったアニメーションを追加した
 ・hoverを使うなどして、アプリに動きをつけた
 ・テストコードも書き、より実務に近づけた
 ・Basic認証でセキュリティを考慮した (今回は誰でも触れるように公開してます。)
です。

②「自分の好きなものについて投稿できるインスタ風のアプリ」

オリジナルアプリ:https://ramen-app-3.herokuapp.com/
(ユーザー

元記事を表示

「Herokuで画像表示できない」を解決

# はじめに
 現在オリジナルアプリの開発中です。Heroku環境でアプリをアップロードしているのですが、assetsに配置した画像が表示されないという問題がありました。解決方法がわかったのでまとめておきます。

# 問題
 app/assets/images 配下に設置した画像が表示されない。(ローカル環境では表示されている)

ローカル環境では表示されているため、本番環境では追加の設定がいるのかもしれない。と思い調べると解決方法が出てきました。

# 解決方法
 解決方法は image_tagのファイルの指定方法を修正することでした。

“`qiita.rb
<%= image_tag "/assets/top.png" ,class:"img-fluid" %>
“`

image_tagに渡す画像のバスの指定方法を間違えていました。
この書き方では、ローカルだと表示されるのですが、本番環境だと表示されません。

以下に修正しました。

“`qiita.rb
<%= image_tag "top.png" ,class:"img-fluid" %>
“`

結果無

元記事を表示

【Rails】find_or_initialize_byとfind_or_create_byの違い

# find_or_create_by

条件を指定して初めの1件を取得(find)し、1件もなければ作成(create)
作成する時に呼ぶメソッドが**create**なので、新規作成して保存まで行う

“`ruby
Category.find_or_create_by!(name: “ディナー”)
Category Load (0.6ms) SELECT “categories”.* FROM “categories” WHERE “categories”.”name” = $1 LIMIT $2 [[“name”, “ディナー”], [“LIMIT”, 1]]
TRANSACTION (0.5ms) BEGIN
Category Create (2.0ms) INSERT INTO “categories” (“name”, “created_at”, “updated_at”) VALUES ($1, $2, $3) RETURNING “id” [[“name”, “ディナー”], [“created_at”, “2022-02-21 12:19:1

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事