Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

ユーザーの結合テストコード

### 目的
– ログインについての結合テストコード
### ユーザーログインの結合テストコード
#### exampleを整理
– ログインできる時
– 保存されているユーザーの情報と合致すればログインできる
– トップページに移動する
– トップページにログインページへ遷移するボタンがあることを確認する
– ログインページに遷移する
– 正しいユーザー情報を入力する
– ログインボタンを押す
– トップページへ遷移することを確認する
– カーソルを合わせるとログアウトボタンが表示されることを確認する
– サインアップページへ遷移するボタンやログインページへ遷移するボタンが表示されていないことを確認する
– ログインできない時
– 保存されているユーザーの情報と合致しないとログインできない
– トップページに移動する
– トップページにログインページへ遷移するボタンがあることを確認する
– ログインページへ遷移する
– ユーザー情報を入力する
– ログインボタンを押

元記事を表示

railsAPIをaxiosで叩いた時のエラーの取得について

## はじめに
RailsのAPIからデータを取得する際に、axiosを使用してエラーが発生した場合、レスポンスを取得することができずに困った

## 問題点
Railsでエラーが発生した場合、通常はstatusコードとmessageをレスポンスボディとして返すので取得の仕方を変えないといけなかった

### 例えば

“` ruby
if user.save
render json: { status: 200, data: user }
else
render status: :unprocessable_entity, json:{ messages: user.errors.full_messages }
end
“`
この場合、フロントでaxiosを使用してAPIを呼び出すと、エラーが発生した場合、以下のようなエラーが発生する

“` JavaScript
axios
.post(process.env.API_URL + ‘/api/v1/users/signup’)
.then((res) => {
console.log(res)
}

元記事を表示

rbenv install 3.3.0で失敗した時の備忘録

# “rbenv install 3.3.0“を実行すると、エラーが生じた。
実行環境: MacOS M2チップ
“`
$ rbenv install 3.3.0

ruby-build: using openssl@3 from homebrew
==> Downloading ruby-3.3.0.tar.gz…
-> curl -q -fL -o ruby-3.3.0.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.0M 100 21.0M 0 0 21.7M 0 –:–:– –:–:– –:–:– 21.7M
==

元記事を表示

paizaラーニング解答: 文字列処理メニュー[Ruby]

# 文字列処理メニュー
https://paiza.jp/works/mondai/string_primer/problem_index?language_uid=ruby

paizaのスキルチェックや他の問題集でもよく使うメソッドが登場しますので、初心者向けのメニューでした(一部問題を除く)。
## 文字列の出力
“`ruby
puts “paiza”
“`

## 文字列の受け取り
“`ruby
s = gets.chomp
puts s
“`

## i 文字目の出力
“`ruby
s = gets.chomp
i = gets.to_i
puts s[i-1]
“`

## 文字列の条件判定
“`ruby
s = gets.chomp
puts s == “paiza” ? “YES” : “NO”
“`

## 文字列の文字数
“`ruby
s = gets.chomp
puts s.length
“`

## 文字の検索
“`ruby
s = gets.chomp
c = gets.chomp
puts s.index(c) + 1
“`
ind

元記事を表示

ベンチマークのスコアは、常に高ければ高いほど良いのでしょうか?

私の書籍やニュースレターを読まれている方なら、私がパフォーマンスエンジニアリングを支持していることをご存じかもしれません。パフォーマンスエンジニアリングとは、パフォーマンス作業を行う際、要件と制約を前もって明確にし、それらを満たすようにシステムを設計することをいいます。求められるもの以上に良く(もしくは悪く)システムを設計するのではなく、求められる仕様に忠実にシステムを設計するのがエンジニアリングです。求められるよりも 2 倍大きな箱を設計したとしても、顧客の棚にフィットせず、顧客が希望する倍のコストがかかり、構築に規定の倍の時間がかかるとしたら、それは「より良い」箱を設計したことにはなりません。間違った箱を設計しているのです。

あらゆる計算機システムには、性能要件があります。もしそうでなければ、世界が終わりを迎える寸前に仕事を終えるようなシステムですら、要件を満たすことになってしまいます。そのようなシステムにお金を払ってくれる顧客はいないでしょう(もしいたら、ぜひ紹介してください)。

では、性能要件として求められるレイテンシーやスループットを上回るのは、常に良いことと言えるでし

元記事を表示

【Rails】キーワード引数とハッシュの判別

# はじめに
RailsでRubyのコードを触っていたときのある日、今まで触っていたコードのメソッドを見て
あれ?これってずっとハッシュを引数として渡していたと思ってたけどキーワード引数なのでは?という疑問が生じ、その疑問を解消するために色々調べたので記事にしてまとめてみました。

結論を先に書くと
# 結論:Rails側(定義元)でなんとかしてくれてるからハッシュかキーワード引数か気にしなくていい

# 実際にRailsで書いていたコード
以下のコード読みほぐしていく。(turboの説明は省略)
“`ruby:
redirect_to root_url, status: :see_other
# controller内に書いていたredirect

validates :title, presence: true, length: { maximum: 100 }
# model内に書いていたvalidation

link_to ‘削除’, todo_path(todo), data: { turbo_method: :delete , turbo_confirm: ‘本当に

元記事を表示

初心者でもわかるDockerってこんな感じ

# Dockerでの環境構築

## 概要
Dockerを使用して環境を構築する方法と、Docker事態の概要をまとめる

### Dockerとは
軽量で高速なコンテナ型の仮想環境が構築できるもの
=仮装環境技術の一つ

– Dockerの特徴
1. ゲストOSが存在しない
仮想マシン→ホストOSの上にゲストOSを乗せる形で開発などを行う
Docker  →ホストOSの上にDockerコンテナを乗せる形で開発する
     =ゲストOSを使わなくて良いので仮想マシンより軽量になる

1. テスト環境と本番環境を同一にできる
→コンテナ内で作業するため、コンテナをそのまま本番環境で使用できる
 =本番環境に移行した時に起こる予期せぬエラーなどを防止できる
1. 開発環境を共有できる
→コンテナの作成するファイルを共有することでチームで同一の環境で開発できる

—-
※解説(ITエンジニア未経験野方向け)
→プログラミングを使って開発する際に様々な問題が起きるが、製作物ではない問題が起きることがある

例えば、
– OSによる問題
メンバーごとにPCが異なるため、同じソースコードを書

元記事を表示

paizaラーニング解答: 論理演算メニュー[Ruby]

# 論理演算メニュー
https://paiza.jp/works/mondai/logical_operation/problem_index?language_uid=ruby

できるだけシンプルなコードになるよう工夫しました。
## STEP: 1 論理積( AND )の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts a & b
“`

## STEP: 2 論理和( OR )の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts a | b
“`

## STEP: 3 否定( NOT )の基本
“`ruby
a = gets.to_i
puts !a.zero? ? 0 : 1
“`

## STEP: 4 排他的論理和( XOR )の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts a ^ b
“`

## STEP: 5 NAND 演算の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts !(a.n

元記事を表示

Ruby Silver練習問題個人的詰まったやつ

# Rexより
– 次のコードを実行するとどうなりますか
“`ruby
a = [1, 2, 5, 7, 8]
b = [1, 3, 6, 7, 9]
c = nil || a & b | a && a | b
p c
“`
## 考え方
1.左から“||“を評価していく
“||“は左辺が偽(nil,false)の時に“||“の右辺を実行する
2.“&&“を評価する
“&&“は左辺が真の時に“&&“の右辺を実行する
※“a & b | a“をしているがnilやfalseにならないので真
3. “a | b“の結果を出力
“`ruby
# c
[1, 2, 5, 7, 8, 3, 6, 9]
“`

## 使いそうな場面
nilチェックとか
“`ruby
# aがnilの場合は右辺の処理をする
a || ( a = 20 )
# 自己代入で書くと↓(a = a + 1 => a +=1 )
a ||= 20
“`

## 参考

https://qiita.com/oknoamazia/items/cc856a39c93f61a94410

元記事を表示

結合テストコード

結合テストは本当に難しいです・・・
ただ、一個一個分解すると理解できてきました!
復習の備忘録です!

### 結合テストコード
ユーザーがたどる一連の流れを確認する

### System Spec
結合テストコードを記述するための仕組み

### Capybara
System Specを記述するために必要なGem。 標準で導入済み

`rails g rspec:system users`

#### exampleを整理
– ユーザーが新規登録できる時
– 正しい情報を入力すればユーザー新規登録ができてトップページに移動する
– トップページに移動する
– トップページにサインアップページへ遷移するボタンがある
– 新規登録ページに移動する
– サインアップボタンを押すとユーザーモデルのカウントが1上がる
– トップページへ遷移することを確認する
– カーソルを合わせるとログアウトボタンが表示される
– サインアップページへ遷移するボタンや、ログインページへ遷移するボタンが表示されていない 
– ユーザー新規登録で

元記事を表示

投稿アプリのコントローラーの単体テストコード

モデルのテストはよくしていましたが、コントローラーはあまりやっていなかったので
いい復習になりました!

### 目的
– Request Spec の流れを理解
– レスポンスを判定するテストコードを記述

### コントローラーの単体テストコード
#### テストコードを書く方針
あるアクションをリクエストを送った時、想定通りのレスポンスが生成されるかどうか確かめる
### Request Spec
コントローラーのテストコードを書くために特化した手法

`rails g rspec:request tweets`

### tweetsコントローラーindexアクションの単体テストコード
#### exampleを整理
– indexアクションにリクエストすると正常にレスポンスが返ってくる
– indexアクションにリクエストするとレスポンスに投稿済みのツイートのテキストが存在する
– indexアクションにリクエストするとレスポンスに投稿済みのツイートの画像URLが存在する
– indexアクションにリクエストするとレスポンスに投稿検索フォームが存在する

####creat

元記事を表示

paizaラーニング解答: 算術・代入演算メニュー[Ruby]

# 算術・代入演算メニュー
https://paiza.jp/works/mondai/arithmetic_substitution_op/problem_index?language_uid=ruby
## STEP: 1 足し算
“`ruby
puts 1_231 + 5_178
“`

## STEP: 2 引き算・掛け算
“`ruby
a, b = gets.split.map(&:to_i)
puts “#{a – b} #{a * b}”
“`

## STEP: 3 割り算
“`ruby
a = 437_326
b = 9_085
puts “#{a / b} #{a % b}”
“`

## STEP: 4 掛け算 2
“`ruby
a, b, c = gets.split.map(&:to_i)
puts “#{a * a} #{b * b + c * c}”
“`

## STEP: 5 累乗
“`ruby
a, b, c = 202, 134, 107
puts ((a + b) * c) ** 2
“`

## FINAL問題 累乗 2

元記事を表示

paizaラーニング解答: データセット選択メニュー[Ruby]

# データセット選択メニュー
https://paiza.jp/works/mondai/data_structure/problem_index?language_uid=ruby

この問題集にチャレンジする前にハッシュ(辞書)と集合について学んでおくことをお勧めします。
## STEP: 1 ランダムアクセス
“`ruby
n, m = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
puts a[m – 1]
“`

## STEP: 2 複数回のランダムアクセス
“`ruby
n = gets.to_i
a = gets.split.map(&:to_i)
q = gets.to_i
b = gets.split.map(&:to_i)
b.each do |i|
puts a[i – 1]
end
“`

## STEP: 3 最大値と最小値
“`ruby
a, b, c = gets.split.map(&:to_i)
puts [a, b, c].max – [a, b, c].min
“`

##

元記事を表示

続: Rubyでかの有名な水の移し替えパズルを解く(ちゃんと探索アルゴリズムを使う)

# はじめに
先日は下記 **[「Rubyでかの有名な水の移し替えパズルを解く」](https://qiita.com/jerrywdlee/items/c7bbcbb6c68e37e7ef71)** を投稿しました。

https://qiita.com/jerrywdlee/items/c7bbcbb6c68e37e7ef71

@nodai2h_ITC さんよりコメントを頂いて、**「[幅優先探索](https://ja.wikipedia.org/wiki/%E5%B9%85%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2)」** を活用した方が、ランダムウォークよりも合理であると指摘されました。

まったくご指摘通りでした🙇‍♀️。

しかし私の不勉強である故、なかなか綺麗な探索木のコードを書けなくて(~~決してゲームに没頭したせいではありません~~)、記事の更新を放置してました。
昨日、@mogamoga1337さんよりJavaScriptで探索木を使った解き方が投稿されたので、サボっては行けないと思い、連休中殴り書いたRuby版探索木コードを整理し

元記事を表示

paizaラーニング解答: 標準入力メニュー[Ruby]

# 標準入力メニュー
https://paiza.jp/works/mondai/stdin_primer/problem_index?language_uid=ruby
## STEP: 1 1 行の入力
“`ruby
s = gets.chomp
puts s
“`

## STEP: 2 2 行の入力
“`ruby
s = gets.chomp
t = gets.chomp
puts s
puts t
“`

## STEP: 3 3 行の入力
“`ruby
s = gets.chomp
t = gets.chomp
u = gets.chomp
puts s
puts t
puts u
“`

## STEP: 4 10 行の入力
“`ruby
10.times { puts gets.chomp }
“`

## FINAL問題 【行入力】1,000 行の入力
“`ruby
1000.times { puts gets.chomp }
“`

## STEP: 1 2 つの文字列の半角スペース区切りでの分割
“`ruby
puts “Hello paiz

元記事を表示

paizaラーニング解答: 標準出力メニュー[Ruby]

# 標準出力メニュー
https://paiza.jp/works/mondai/stdout_primer/problem_index?language_uid=ruby
## STEP: 1 1 行の出力
“`ruby
puts 813
“`

## STEP: 2 2 行の出力
“`ruby
puts 8
puts 13
“`

## STEP: 3 3 行の出力
“`ruby
puts 8
puts 1
puts 3
“`

## STEP: 4 10 行の出力
“`ruby
puts %w[813 1 2 923874 23648 782356 3256 2342 24324 112]
“`
%w記法を使うことで配列にできます。
## FINAL問題 【改行あり出力】1,000 行の出力
“`ruby
(1..1000).each do |i|
puts i
end
“`

## STEP: 1 2 つの数値を出力
“`ruby
puts “1 1”
“`

## STEP: 2 3 つの数値を出力
“`ruby
puts “8 1 3”
`

元記事を表示

投稿アプリのモデルの単体テストコード

テストコードは本当に理解できず一周目は正直飛ばしてましたが
復習してなんとなく理解できました!
というわけで復習の備忘録です!

目的
– Userモデルの単体テストの実装を通して、正常系テストを理解
– Userモデルの単体テストの問題を解いて、異常系テストに関する知識を定着
– Tweetモデルの単体テストの問題を解いて、モデル単体テストに関する知識を定着

####文字数制限のバリデーションを設置
「保存できる値は最大6文字まで」というバリデーションを設置
app/models/user.rb
“`ruby
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :reme

元記事を表示

findとfind_byの違い

# はじめに
`find`と`find_by`は、Railsでデータベースからレコードを取得するためのメソッドですが、いくつかの違いがあります。
findとfind_byの違いについて理解が曖昧だったため備忘録も兼ねてまとめます。
# 検索条件の指定方法
`find`: 主キー(通常はid)を指定してレコードを取得します。例えば、`User.find(1)`は`id`が1であるユーザーを取得します。

`find_by`: 様々な条件を指定して検索できます。例えば、`User.find_by(name: ‘John’)`は`name`がJohnであるユーザーを取得します。
“`ruby
# 主キーを指定して取得
user = User.find(1)

# 条件を指定して取得
user_by_name = User.find_by(name: ‘John’)
“`
# エラーハンドリング
`find`: 主キーが見つからなかった場合、`ActiveRecord::RecordNotFound`例外が発生します。主キーが存在しない場合、エラーが発生するため注意が必要です。

`fin

元記事を表示

Optparseの使い方

optparseを使う機会があったので、整理を兼ねて使い方を書いてみます。

Rubyでは沢山のライブラリが用意されており、Gemfileを通して追加することなく使用できるものが沢山用意されています。
その中でも特に使用頻度が高いとされているものは組み込みライブラリと呼ばれ、requireを使って呼び出すことなくそのまま使用することができます。
optparseはコマンドライン上でオプションを受け取る為の呼び出しが必要な標準ライブラリです。
optparseを使う時は以下の3ステップを踏んで進めていきます。

1, `OptionParser`を使ってオブジェクトoptを生成
“`ruby
require ‘optparse’
opt = OptionParser.new
“`

2, オプションを扱うブロックを作成
“`ruby
opt.on(‘-m int’) {|m| month << m.to_i} ``` `on`メソッドで`opt`オブジェクトに登録するオプションを定義する。 `-m`で数値として(intで数値として指定)受け取ったオプションをブロック内で`month

元記事を表示

ルーティングの記述方法

# はじめに
ルーティングの記述方法の理解が曖昧だったため備忘録も兼ねてまとめます。
# ルーティングとは
Webアプリケーションにおいて、クライアントからのリクエストを処理するために、どのコントローラのどのアクション(メソッド)が呼び出されるかを指定する仕組みです。Railsでは、config/routes.rbファイルでルーティングを設定します。
“`config/routes.rb
Rails.application.routes.draw do
root “sample#index”
get “/new” => “sample#new”
post “/create” => “sample#create”
resources :articles
end
“`
# Rootとは
ルートは、アプリケーションのトップページを指します。上記の例では、SampleControllerのindexアクションがルートに設定されています。
# GETとは
indexアクションやshowアクションのようにデータの取得が目的のアクションです。
# POSTとは
c

元記事を表示

OTHERカテゴリの最新記事