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

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

FactoryBotを使用したインスタンス生成の共通化

# アウトプット
FactoryBotとは、インスタンスをまとめることができるGem。

###### spec/factories/users.rb
“`ruby
FactoryBot.define do
factory :user do
email {‘test@com’}
password {‘abcdef1234’}
password_confirmation {‘abcdef1234’}
end
end
“`

“`ruby
# FactoryBotを使用しない場合
user = User.new(email: ‘tset@com’, password: ‘abcdef1234’, password_confirmation: ‘abcdef1234’)
# FactoryBotを使用する場合
user = FactoryBot.build(:user)
“`

###### spec/models/user_spec.rb
“`ruby
require ‘rails_help

元記事を表示

SNS認証について

# SNS認証について
– 学習マッチングサイトを作成して、google認証を実装したい
– 認証機能について理解を深めたい
## 環境
– AWS:EC2,RDS(MySQL),VPC,Route53
– webサーバー:NGINX
– アプリケーションサーバー:Puma
– フレームワーク:Ruby on Rails

## 認証の仕組みについて
今回はgoogle認証であるため、登場人物は、

– googleのリソースサーバ
– エンドユーザー
– webアプリ
– googleの認可サーバー

です。
### リソースサーバーとは
リソースサーバとは、保護対象のリソースを保持しているサーバーを指します。ここでいうリソースとは、googleフォトの画像やプロフィール情報等のことと思います。
### ユーザー
リソースオーナであり、アカウントを連携したいユーザーを指す。
### webアプリ
これは、つまり、学習マッチングサイトです。
### 認可サーバー
リソースサーバーに信頼されたサーバーで、リソースオーナーの認証を行い、リソースサーバーに対するアクセストークンを発行します。

元記事を表示

Active Storageの複数ファイルを1つのzipファイルに圧縮する効率の良い方法

とある案件で、Active Storageで管理しているファイルを複数選択して、1つのzipファイルに圧縮する要件があったので実装方法を検討しました。

# 前提

この記事では下記のUserモデルの`save_selected_avatars`メソッドの実装方法を検討します。

“`ruby:user.rb
class User < ApplicationRecord has_one_attached :avatar class << self def save_selected_avatars(user_ids) # TODO: user_idsで指定したユーザーのavatarを1つのzipファイルに圧縮して保存する end end end ``` なお、この記事では下記のバージョンを使って動作確認しています。 ZIPファイルを生成する処理はrubyzipのGemを使います。 * ruby 3.1.1 * rails, activestorage 7.0.2.3 * rubyzip 2.3.2 # 実装方法検討 ## その1 ま

元記事を表示

if式やループのネストを減らす方法まとめ

# 結論

– 早期リターンする
– 条件式で代入を行う

以上のやり方でネストを減らすことができます。

### 早期リターンする

例えば、受け取った数字が50より大きいとき2倍にする関数があるとき

早期リターンしない場合。
“`ruby
def double(number)
if number > 50
number * 2
end
end
“`

早期リターンする場合。
“`ruby
def double(number)
return if number <= 50 number * 2 end ``` ループ内の場合は`next if number`でも良いですね。 ### 条件式で代入を行う 例えば、ユーザーを1つ取り出して何かしたいとき 条件式で代入しない場合 ```ruby def update user = User.find(params[:id]) if user ... end end ``` 条件式で代入する場合 ```ruby def update if user = User.find(par

元記事を表示

Rubyの基本的な構文をまとめてみる

# 初めに
こんにちは!都内でWEB制作を中心に活動しているりょうといいます!
今回はShopifyをきっかけに興味を持ったRubyの簡単な構文について、備忘録的にまとめていきます!

shopifyはRubyをもとにして作られたliquidという言語があるそうで、バックエンド全くの未経験の僕がいきなり始めるにはあまりにも敷居が高い。。。
それならRubyから始めてみよう!!

そんな経緯があってこの記事を書いた次第です!

## この記事の目的
Rubyの基本構文を忘れないうちにアウトプットする!

ではいきましょう。

### テキストの出力
~~~ruby
# コメントアウトは”#”でできる!
puts “Hello Ruby!”
puts 8
# 出力結果:Hello Ruby! 8
~~~
Rubyのテキスト出力は『puts』
言語ごとに出力方法は違うようですが、個人的にはputs、とても好きですね。
なんかかわいい

また、Rubyにおいては『文字列』と『数値』の連結はできないようです。
これは注意が必要ですね。
~~~ruby
puts “string” + 10
#出力

元記事を表示

【Python】Pythonの型名が覚えられなかったのでメモ

Java, Rubyの実務経験があり、Pythonも覚えてみたいと考えた今日このごろ。
型の種類と名前が全く一致しなかった戒め。

下記のフォーマットで自分用にメモ
###### 大枠のジャンル
“`
・Pythonでの呼び方
 ・Java, Ruby(他覚えやすかったキーワードなど)での呼び方

※あれば感想など
“`

###### 数値
“`
・int
 ・整数

・float
 ・小数点

※散々やってきたので大丈夫。小数点の計算 ^ Javaのときは「BigDicimal」を使わないとダメだぞ!と怒られた記憶がある
“`

###### 論理
“`
・bool(Yes / No)
 ・boolean
“`

###### 文字列
“`
・str
 ・String

※大した違いじゃないからまぁいいんだけど、こういう微妙な違いがあると困るよね。
“`

###### シーケンス
“`
・list
 ・ArrayList(Java)(後から追加できるからArrayListで覚える)

・tuple
 ・list(配列)(後から変更できないからlistで覚える)

元記事を表示

bundlerまとめ

# how2use
bundle init
-> Gemfile

source “rubygems”

元記事を表示

debug gem まとめ

# how to use
s
q!

continue
finish
next
help
help next
p n

元記事を表示

PHP, Ruby の null, blank 判定比較早見表

## PHP, Ruby の null, blank 判定比較早見表

値 | | nil? | empty? | blank? | | isset | is_null | empty | if($var)
— | — | — | — | — | — | — | — | — | —
未定義 | | ~~NameError~~ | ~~NameError~~ | ~~NameError~~ | | false | ~~Undefined~~ | ~~Undefined~~ | ~~Undefined~~
$var = nil, null | | **TRUE** | ~~NoMethodError~~ | **TRUE** | | false | **TRUE** | **TRUE** | false
$var = true | | false | ~~NoMethodError~~ | false | | **TRUE** | false | false | **TRUE**
$var = false | | false | ~

元記事を表示

rbenvまとめ

# install
brew update
brew install rbenv ruby-build
rbenv –version
brew upgrade rbenv
rbenv init

# how to use
rbenv install -l
rbenv install 2.5.0
rbenv versions
rbenv global 2.5.0

元記事を表示

Ruby で Array や Hash のメソッドを使いこなしたい

Ruby には、多くのメソッドが用意されています。
私もそうでしたが、他の言語は知っていて Ruby を知らない場合、Ruby のメソッドを使いこなせていないことがあります。
他言語経験者が、知っておくべき Ruby の Array, Hash のメソッドをユースケース毎に書きたいと思います。

## 特定の要素を取得する (Enumerable#find)

特定の条件を満たす要素を取得する場合、
ループと if 文を駆使して探すことを考えるかもしれませんが、

“`ruby
tasks.each do |task|
next unless task.state == state

found = task
break
end
“`

`find` 一行で取れます。

“`ruby
found = tasks.find { |task| task.state == state }
“`

## 特定の要素を削除する (Hash#delete_if)

特定の条件を満たす要素を削除する場合、、、(以下略

“`ruby
schedules.each do |key

元記事を表示

Rubyとは?今流行のプログラミング言語の一種Rubyって何?これであなたもプログラミングへの第1歩!

こんにちは!初めまして!現在都内大学3年生になります、重村 倫音と申します。
今回は私が大学2年生の秋学期のうち3ヶ月間で習得したruby言語について簡単に初心者さんにもrubyが何なのかという説明記事を書いてみましたのでぜひ読んでみてください!

まず最初に、Rubyという言語はまつもとひろゆき氏が関数型プログラミングと命令型プログラミングを絶妙にまじ合わせて作成したものであります。その為、様々な面でバランスが取れていて、次に説明するRubyのいいところに繋がるのです。

Rubyというのは、数多くあるうちのプログラミング言語の一種です。主に多くの人に知られているウェブサイト、twitterやcookpadと言ったウェブサービスはrubyを通して作られています。数多く存在するプログラミング言語の中でも、rubyは利用者数がかなり多いです。その人気というのも、

-シンプル
-起動の速さ

という二つの観点が主に挙げられます。

最初にシンプルという観点でプログラミング初心者さんでも簡単に自分のウェブページが作れてしまうところなんです!私自身、プログラミングのプの字も知らずにrubyの

元記事を表示

テストコード(RSpec)の構文

テストコードの大まかな全体構造は、下記の通りである。

“`ruby
require ‘rails_helper’

RSpec.describe …, type: :… do
describe ‘どの機能に対してテストを行うか’ do
context ‘テストを行いたい特定の条件’ do
it ‘どのような状況のテストを行うか’ do
end
end
end
end
“`

元記事を表示

良いコードとは

# 今回のアウトプットの目的
良いコードとはどのようなものか?
良いコードを書くにはどうすればよいか?
WEBアプリケーション開発をする上でとても重要だと感じたので、
改めて整理したいと思います。

# 良いコードとは
**結論:他人が見てわかりやすく意味のわかるコードが一番良いコードだと思います**

具体的にどのようなことを意識すれば良いコードになるのか纏めてみたいと思います。
①わかりやすいコメントを書く、and 無駄なコメントはしない。
②変数名やメソッド名は誰が見てもわかりやすい名前にする。
③インデントをつけてしっかりと揃える。
④ネストしすぎない。
⑤直接数字を記述するのではなく変数を利用する。

**またDRYの原則も重要だと思います**
DRY(Don’t Repeat Yourself)とは?
=「同じ情報を繰り返し定義しない」という考え方
ダメな例
“`not_dry.rb
a = 100 * 1.1
b = 200 * 1.1
c = 300 * 1.1
“`
良い例
“`dry.rb
tax = 1.1
a = 100 * tax
b = 200 * t

元記事を表示

オブジェクト指向とは

オブジェクト指向について整理したいと思ったのでアウトプットします。

# オブジェクト指向とは?
A.「ある役割を持ったモノ」ごとにクラス(プログラム全体の設計図)を分割し、モノとモノとの関係性を定義していくことでシステムを作り上げようとするシステム構成の考え方のこと。

# そもそもオブジェクトとは何なのか?
(わかりやすい記事があったので自分なりに解説)
A.ざっくりでいうと「モノ」
プログラミング視点で考えてみる。
例えばケータイでいうと、
**オブジェクト:ケータイ**
**クラス:スマートフォン**
**インスタンス:iPhoneやAndroid**
こんな感じで考えるとわかりやすいと思った。

# オブジェクト指向のメリット
①効率よくプログラムを設計・開発できる
例、サイト制作などで色違いのボタンを5つ作るとします。
オブジェクト指向を使用しない場合は5つ全てにプログラムを実装しなければならない。
しかしオブジェクト指向を使用すれば1つのボタンの「モノ」として作成し設定してしまえば、
色を変えたり、文字を変えたりするだけで済む。

②不具合の原因を特定しやすくなる
オブジ

元記事を表示

本日のRuby基礎練習問題(22/4/5)

# 問題
以下の要件を満たすbubble_sortメソッドを実装しましょう。
要素が数値である配列を受け取り、数値の小さい順に並べ替えること
小さい順に並べ替えた結果を出力すること
**↓雛形**
“`ruby.rb
def bubble_sort(data)
# 配列の数を数える処理を記述
length =

# for文を2つ使用する
# 先頭から隣の数同士の大きさを比べる
# 先頭側の要素の方が大きい場合は、配列の位置を隣同士で交換する
end

# 呼び出し例
number = [1,23,4,6,12,45,79]
bubble_sort(number)
puts number
“`
出力例
1
4
6
12
23
45
79

**ヒント**
・for文を使う
・for文の入れ子を使う
・「隣同士の大きさを比較し、もし先頭側の文字の方が大きい場合は位置を交換する」という処理をする
・配列内の要素の入れ替えを行う
方法:array[a], array[b] = array[b], array[a]

# 私の回答
“`ruby.rb
def bub

元記事を表示

テストコード(RSpec)の種類

単体テストとは、モデルやコントローラーなどの機能ごとに、問題なく動作するか確認するテスト。
結合テストとは、ユーザーがブラウザで操作する一連の流れを再現して、問題なく動作するか確認するテスト。

元記事を表示

Dockerとは 開発環境やファイルについて解説

# はじめに
Dockerの開発環境とはどのようなものか、Dockerでの環境構築の際に作成するファイルについてまとめました。
*この記事は環境構築のやり方を解説した記事ではないため、この記事を参考にして環境構築した場合の動作の保証は一切しません。
# Dockerの開発環境
Dockerのソフトウェアをインストールすると、Moby LinuxというLinuxの軽量な仮想マシンが裏で作成されます。
そして、DockerでRubyの実行環境を立ち上げると、Moby Linux上にコンテナという仮想環境が作成されます(RubyのコンテナはDockser HubというサイトにあるファイルをDLして作成される)。
コンテナのもとになるファイルをまとめたものをイメージと呼びます。Rubyのイメージには、RubyそのもののプログラムやRubyに関するライブラリが含まれています。また、Linuxとして動作するために最低限必要なファイルも含まれています。このコンテナにPC上のRails用のフォルダをマウントして開発を行う。これによって動作確認が行えるわけです。
![image.png](https:/

元記事を表示

【LeetCode】5. Longest Palindromic Substringを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの5. Longest Palindromic Substringを解いていく。

## 問題文を和訳
– 文字列sが与えられた場合、sで最も長い回文部分文字列を返します。
– Input: s = “babad”
– Output: “bab”
– Note: “aba” is also a valid answer.

## 回答
“`5_LongestPalindromicSubstring.rb
def longest_palindrome(s)
left = 0
right = 0
for i in 0…s.length do
odd = length_from_center(s, i, i)
even = length_from_center(s, i, i + 1)
longest = [odd, even].max
if longest > right – left
left = i – (longest – 1) / 2
right =

元記事を表示

TOTO くじ を題材として Ruby で スクレイピング

# はじめに
`Nokogiro`の練習として、TOTOくじを題材にスクレイピングをやってみました。
# TOTOくじ
https://toto.yahoo.co.jp/vote/toto

例えば、投票状況から皆さんが本命視している組合せを調べます。
# Nokogiri
“`rb
require ‘nokogiri’
“`
`require`します。
“`rb
doc = Nokogiri::HTML.parse(html)
“`
htmlソースをパースします。
今回は、細かなオプションなしでうまくいきました。
“`html

// 必要な部分を抜き出す ↓

<

元記事を表示

OTHERカテゴリの最新記事