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

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

100日後くらいに個人開発するぞ!day041

## 今日は総合課題にチャレンジしてみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/1caa244c-389b-efac-f533-876bf718ff5e.png)

## Ruby学習レッスンIコースを終了!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/78c11293-acd0-fcba-68d4-458bf794cfa0.png)

## 今日の備忘録

* ◯の倍数は割ったときの余りが0かどうかで判別する
* 例:もし変数numberが3の倍数であれば”3の倍数です”と表記したい場合
* `if number % 3 == 0`
* ` puts “3の倍数です”`
* `end`
* 条件式で等号を用いる際は「==」にする
* ダメな例
* `if

元記事を表示

技術面接 質疑応答まとめ[未経験転職]

技術面接があったため,振り返りとして質疑応答をまとめました.
解答について間違いがあればご指摘お願いします.

## この記事を読んで分かること

オブジェクト指向やHTTPなどのwebの基礎知識に関する知識

## 前提

筆者は未経験でバックエンドエンジニアを志望しています.そのため質問内容はそれに関連したものになります.

# 質疑応答

## 質問1:RESTについて教えてください

webのアーキテクチャスタイルの一つ
クライアントがHTTPでリクエストすると,URIに対して定義したレスポンスが返される
RESTfulなWebサービスの性質として,以下の4つがあげられる

アドレス可能性:URIによりリソースを一意に指し示す性質
接続性:リソースをリンクで接続することでアプリケーションを形成する性質
統一インターフェース:命令体系が(HTTPメソッドで)統一されている
ステートレス性:サーバーがクライアントのアプリケーションの状態を保存しない性質

## 質問2:HTTPについて教えてください

クライアントがHTML文書などのリソースをサーバーから取り出すこ

元記事を表示

「Rails パフォーマンスチューニング」viewファイルで起こるN + 1問題の修正方法

controller側ではなく、viewのeachでN + 1が発生していたので修正しました。

Ruby:3.1
Rails:7.0.2.3
MySQL:8.0

## 仕様
– userはcompanyをお気に入り(favorite)登録することができる
– favoriteは中間テーブル
– companyに紐づくfavoriteの中に、ログイン中のuser.idと同じものがあればCSSのclassを追加

上記の仕様を、この様に書いていた。

“`ruby:companies_controller.rb
class CompaniesController < ApplicationController def index @companies = Company.all.includes(:addresses).page params[:page] end end ``` ```erb:index.html.erb <% @companies.each do |company| %>

<% if company.favor

元記事を表示

FakerBotがActiveHashのバリデーションにかかってしまう問題の解決法

FakerBotを使ってActiveHashを含んだテストコードを作成しようとした際、問題が発生してしまったので、その問題と解決法を書いていきます。
## 問題点:FactoryBotがバリデーションにかかるidを選択してしまい、テストに失敗する
“`ruby
class Prefecture < ActiveHash::Base self.data = [ { id: 1, name: '---' }, { id: 2, name: '北海道' }, { id: 3, name: '青森県' }, ``` ```ruby class Item < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions validates :prefecture_id, numericality: { other_than: 1 } ``` 選択肢の'---'に該当するprefecture_id: 1を選択すると、バリデーションにかかるように設定してあります。 ```ru

元記事を表示

【Rails】ActionCableの実装〜mapメソッドについて〜

## はじめに
実装の流れは長くなるので省略させていただきます。
自分が疑問に思ってノートに記録した物を記事にしていきます。

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 外部キー制約
references型の特徴
**・外部キー制約がつかない。そのため、foreign_key: trueをつける。
・_idが省略される**

中間テーブルに使用です。

“`php:migrate
# 外部キー制約:外部にその値を主キーとして持つ他のテーブルがあること
t.references :chat_room, null: false, foreign_key: true
“`

## mapメソッド
中間テーブルのChatRoomUserから、条件を書いて配列を作ることで、
createする際の条件分岐に使用。

ログインユーザーが存在しているチャットルームデータを取得

“`php:chat_rooms_controller.rb
ChatRoomUser.where(user_id: current_user.id).map(&:chat_room)
`

元記事を表示

Railsのヘヴィな重い一覧ページを改修したお話。

# 問題
User一覧画面、表示までに**20秒**ほどかかっていた。
メモリ食い過ぎで*サーバーが落ちる*こともあった

# 結論
一覧画面に**不必要なモーダル**の切り分け
ハイパー**N+1**問題
を解決することで表示時間が1秒ほどになった。

## 詳細

一部抜粋したコード(説明に不必要な箇所は省いています)

“`ruby:customers_controller.rb
CustomersController
def index
@customers = Customer.all
end
“`

“`erb:index.html.erb
<% @customers.each do |customer| %>

<%= customer.mail %> <%= customer.foobar %> <%= customer.hoge %>
元記事を表示

100日後くらいに個人開発するぞ!day040

## 今日も条件分岐をやってみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/84d5244d-6678-d0a1-ddea-d7195dcd20da.png)

## 今日の学び
### 条件が成り立たない時の処理方法
* ifにelseを組み合わせると「もし〜なら・・・を行う、そうでなければ〇〇を行う」という処理ができる
* ifにelseを組み合わせた定型文
* `if 条件式`
* `       処理`
* `else`
* `       処理`
* `end`

### 条件を追加する方法
* elsifを用いると「もし〜だったら・・・を行う、そうでなくもし〇〇であれば〜を行う、いずれでもなければ・・・を行う」という条件分岐ができる
* ifにelsufを組み合わせた定型文
* `if 条件式1`
* `       処理`
* `elsif 条件式2`
* `       処

元記事を表示

Railsでmigrationかけた後にブランチをチェックアウトしてしまった時の復旧方法

rails db:migrate掛けたことを忘れて、新ブランチにチェックアウトした後
既にテーブルが作成されていることからmigrateができなくなってしまった時の復旧方法

まず、migrateしてしまった時のブランチにチェックアウトします。

そして以下のコマンド
“`zsh
rails db:migrate:status
“`

そうするとこうなっているはず。
“`zsh
Status Migration ID Migration Name
————————————————–
up 20220606000001 Create hoge
up 20220606000002 ********** NO FILE **********
down 20220606000003 Create fuga
“`
********** NO FILE **********
これはmigrate した後にコミットしなかったことで、存在しないファイルがmigrateされて

元記事を表示

【Rails】DBから最新データが取得されていない時の対処法

# 初めに

ポートフォリオのライク機能を作成した際に、`DB`のデータは変更されているのにインスタンスのデータは更新されていなかった。

## 環境

– Rails 6.1.4
– Ruby 2.7.4

## 結論

`SQLキャッシュ`がされていたので、同じ`SQL`を発行した場合キャッシュされたデータ(更新前のデータ)が返ってきた。

# 解決方法

`SQLキャッシュ`は

– 同じクエリが発生すると、データベースへのクエリを実行せずに、キャッシュされた結果を返す
– `SQLキャッシュ`は、アクションの開始時に作成され、アクションの終了時に破棄されるので、アクションの実行中しか保持されない。

なので、`reload`メソッドを利用することでキャッシュを使わずに再取得できます。

“`ruby:like_controller.rb
class LikesController < ApplicationController def create review = Review.find(params[:review_id]) like = Like.

元記事を表示

begin rescue 文

## find
与えられたどのオプションにもマッチする“`「主キー」に対応するオブジェクト“`を取り出せます。
“`
irb> customer = Customer.find(10)
“`
カラム名をつけなくていい。

## find_by
与えられた条件にマッチするレコードのうち“`最初のレコードだけ“`を返します。
“`
irb> Customer.find_by first_name: ‘Lifo’
=> #

irb> Customer.find_by first_name: ‘Jon’
=> nil
“`
カラム名をつける

“`rb
irb(main):001:0> user = User.all
TRANSACTION (0.1ms) BEGIN
User Load (0.4ms) SELECT `users`.* FROM `users`
=>
[# post = Post.

元記事を表示

LocalJumpError: unexpected return

# 結論

– ブロックの中で早期returnを使うな
– ブロックの中で、returnは呼べないので次の処理へ飛ばす場合はnextを使う

# ブロックとは

– `hoges.each do | hoge | end` や `hoges.each {|hoge| }` のようなもの
– 有名なところだと`map`や`each`などが存在する

参考

https://qiita.com/naotospace/items/3bbef4015c4390182915

# 再現手順

“`ruby
# ブロックの中でreturnを呼び出す

numbers = [1,2,3,4,5]

numbers.each do |num|
return if num % 2 == 0
end

“`

実行すると、以下のエラーが出る

“`
LocalJumpError: unexpected return
“`

# 解決策

– returnを使わずに処理しよう
– 特に早期returnなどで利用する場合はif文で対応しよう
– 例)1-5の値で偶数の値をeven_numbe

元記事を表示

ArgumentError: wrong number of arguments (given x, expected y)

# このエラーは何?

– 引数で求めている数が本来はy個なのに、x個与えられているよ
– 引数で必須の引数の数を入れてね。

# サンプル

以下のようなコードに対して、

“`ruby

def add(a, b, c)
a + b + c
end

“`

引数が足りないものを呼ぶとエラーになる。

“`

add(1,2)

# => ArgumentError: wrong number of arguments (given 2, expected 3)
“`

# 今回ハマった問題

– メソッドの呼び出し位置によって、引数の数が変わる処理をした際

“`ruby
def add (a, b, c)
a + b + c
end

add(1, 2, 3) => 6 で出力される
add(1, 2) => 3で出力させたいけど、cがないのでArgumentErrorが起こる

“`

– こういう場合は、cが存在しなければ0になるように代入してあげればよい。

“`ruby
def add (a=0, b=0, c=0)
a + b + c

元記事を表示

[初心者用]Railsチュートリアル アプリ作成〜ユーザー登録

## はじめに
Railsチュートリアルを一通り学びポートフォリオ作成に入る前に内容の確認兼、ポートフォリオをチュートリアルの内容を確認しながら作成できるよう大まかにまとめます。

## プロフィール
プログラミング未経験 金融機関勤務 社会人3年目 
web系エンジニア転職のため、2022年3月ごろにProgateを初めて触りweb制作を中心に学習。

## Railsチューリアルの流れ
※ポートフォリオ作成方法にの大まかな流れ関してまとめるため、環境構築やhtml cssの具体的なコード等については省略します。
アプリ名    sample_app
コントローラ名 User
モデル 
|Users|
| —- |
|id|
|name|
|email|
|password_digest|
|remember_digest|

### ・アプリの新規作成とコントローラ、モデル作成
“`rails new sample_app“`をコマンド実行し、もとになるファイルなどを作成
“`rails g controller Users [アクション名]“`を

元記事を表示

Bundler の Platform 一覧 (Mac OS / Linux版)

## はじめに

– Bundler 2.2.x から 適切なプラットフォームを `Gemfile.lock` に記載する必要があった
– すべての環境をすぐに用意、再現できるマシンが複数手元にないため Platform 一覧を作成した
– Mac OS は新しい OS が公開後更新します

## Platform一覧
– Linux, Mac 別に記載します
– 32bit 環境や Windows マシン は手元に無いため省略しています
– 以下に記載する Platform 名を `bundle lock –add-platform ` コマンド実行時に渡すことで、実行環境の追加できます

### Linux

| OS | x84_64 | arm64 |
|:–|:–|:–|
| Linux | x86_64-linux | arm64-linux |

### Mac OS (darwin)
– Mac OS は新しい OS が公開されたら Platform 指定が変更になるため、アップグレード後追記します

| OS | x84_

元記事を表示

100日後くらいに個人開発するぞ!day039

## 今日は条件分岐をやってみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/230b3ef9-a7f6-d619-045d-888a8ae8425e.png)

## 今日の学び

### 条件分岐の方法(if文)
* 条件分岐とはある条件が成り立つときだけある処理を行うようプログラムすること
* if文を用いると「もし〜ならば・・・を行う」という条件分岐が可能になる
* if文の書き方
* `if 条件式`
* `      処理 `
* `end `
* if文の書き方例:scoreが80より大きい場合は「よくできました」というテキストを出力する
* `score = 94`
* `if score > 80`
* `puts “よくできました”`
* `end`

### 真偽値
* 真偽値にはtrueとfalseという2つの値が存在する
* 条件式はが成り立つと「true」、成り立たなけれ

元記事を表示

Rubyの基本

## Rubyの基本
#### Rubyとは?
Rubyは、1995年頃に開発された**オブジェクト指向のスクリプト言語**。

C言語やJavaといったプログラミング言語は、**コンパイラ言語**と呼ばれており、プログラムを実行するために「コンパイル」という手続きを行うことで初めてそのプロジェクトを実行するができる。対して、Rubyのような**スクリプト言語**では、上記のコンパイルという処理が一切不要。そのままプロジェクトを実行することができる。

そのため、コンパイラ言語に比べてRubyはプログラミングを手軽に行えるのが特徴となっている。つまりRubyは、上から下へ書いた内容を実行する手続き型言語ではなく、実体(オブジェクト)を組み立てながら作る、**オブジェクト指向の中でも比較的容易に実装できるプログラミング言語**。

#### Rubyで何をすることが多いのか?
* ユーザー同士の交流ができるSNSサービス開発
* 人と人をつなぐことのできるマッチングサービス開発
* 動画や音楽などの配信サービス開発
* 業務効率化ツールやソフトの開発
* 機会を制御するためのソフト開発

元記事を表示

Ruby on Rails7.0.3 × MySQL8.0 のDocker環境構築

おはよう。:relaxed:
色々あってRuby on Railsに入門するので、環境づくりをしたよ。

## Ruby on Railsって何? :thinking:
Webアプリケーション開発フレームワーク。
特徴的だと思ったのは「最善の開発方法は1つ」という信念のもと設計されているところで、手法を学び、手法に則ることで生産性向上につながるとのこと。

哲学2つ
・Don’t Repeat Yourself: DRY
– 同じ意味や機能を持つ情報を複数に重複しておくことは避けましょうの考え方。
・Convention Over Configuration
– 規約>設定:Rails側で既にWebアプリケーションの「最善の方法」を明確にし、各種設定にもデフォルト値を設定している。アプリケーションが迷走することを避けるために、規約の遵守を推奨しているらしい。

## 今回用意する環境

今回はRailsの現時点最新バージョン7を使用したいので、Rubyも公式推奨の3.0で設定するよ。
Ruby: 3.1
*https://hub.docker.com/_/ruby
Rail

元記事を表示

Ruby コーディングテスト 便利メソッド一覧

※自分用メモ
Rubyによるコーディングテストまたは競技プログラミングにうまく使えそうなメソッド一覧

## Array#combination
“`
a = [1, 2, 3, 4]
a.combination(1).to_a #=> [[1],[2],[3],[4]]
a.combination(3).to_a #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
“`

## Array#product
“`
[1,2,3].product([4,5]) # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
[1,2].product([1,2]) # => [[1,1],[1,2],[2,1],[2,2]]
[1,2].product([3,4],[5,6]) # => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
“`
## Array#inject or Hash#inject
“`
# 合計を計算する

元記事を表示

DockerでRuby on Railsの環境を構築する際のmysql.cnfのコマンド及びコード理解

## なぜ記事を書こうと思ったか
mysql 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## entrypoint.shのコマンド説明
mysql.cnf
“`
[mysqld]
default_authentication_plugin = mysql_native_password
skip-host-cache
skip-name-resolve

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = SET NAMES utf8mb4
skip-character-set-client-handshake

[client]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
“`

以下にコマンド及びコードの解説を致します。
– `

元記事を表示

Ruby + Victor でSVGお絵描き(簡単な散布図を描いてみた)

Victor は Ruby で SVG 画像を作るための gem です。pure Ruby なので気軽に使えます。


https://github.com/DannyBen/victor

リポジトリの [examples ディレクトリ](https://github.com/DannyBen/victor/tree/master/examples) を見ると雰囲気が分かります。

これを使ってためしに簡単な散布図のようなものを描いてみました。

# できあがり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/f5616253-b1da-62a8-f236-14c8d1d0ecac.png)

ブラウザで表示させてスクリーンショットを撮ったもの。
色付きのグラフも良いものですが、白黒のも渋くて好きです。

# コード

感触がなんとなく分かればOK という程度の試み

元記事を表示

OTHERカテゴリの最新記事