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

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

テストコード(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

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

<

元記事を表示

RESTとは

## RESTとは

– RESTとはアプリを作る時の考え方のこと!
「ネットワーク上に置かれたデータ(リソース)に対して表示、作成、更新、削除などの操作を行う」という考え方のこと!

“`
Representational : 代表的なもの
State : ある状態
Transfer : 転送、伝達
“`

この考え方に基づいて作られたアプリをRESTフルという。
このRESTフルなアプリ作ることで、結果的に何度も同じことを書かずに済み、開発や保守がより簡単になる

## QどうやってRESTフルなアプリなアプリを作るのか。

ルーティング(routing)

ルーティング(routing)とはURLとアクションを結びつけるもの

URL
URLとはインターネット上に存在するデータを場所を示すもの。身の回りのもので例えると住所と似ている。
“`
Uniform :ユニフォーム、画一的、同じ
Resource :資源、資料、仕様
Locator :位置情報、所在地
“`

元記事を表示

Railsのコーディング規約を作る際に参考にしたもの

# 初めに
Rails/Rubyのコーディング規約やコーディングルールを整備した時に参考にしたもの、使ったものなどをまとめました。

# コーディング規約
独自の規約を作るよりは、一般的なコーディング規約を参考にしましょう。
– Ruby
– [Rubyアソシエーション: コーディング規約](https://www.ruby.or.jp/ja/tech/development/ruby/050_coding_rule.html)
– Rails
– [The Rails Style Guide](https://github.com/rubocop/rails-style-guide/blob/master/README.adoc) / [日本語訳](https://github.com/satour/rails-style-guide/blob/master/README-jaJA.md)
– Rspec
– [Better Specs. Testing Guidelines for Developers.](https://www.betterspecs.o

元記事を表示

Railsの認証ソリューション deviseを使おう

# 初めに
ちょっと前の記事でOpenID Connectを書いたは良いものの、そもそもdevise導入しなきゃな…
ということでdeviseの導入をやっていきます。ただ、OpenID Connectやるだけだったらdevise入れなくても大丈夫です。

# deviseとは
Railsで最もメジャーな認証系のgemです。ログイン機能やパスワード変更など簡単に行えます。

– [heartcombo/devise: Flexible authentication solution for Rails with Warden.](https://github.com/heartcombo/devise)

# 環境
– OS: Windows11 Pro 64bit
– Version: 21H2
– OS build: 22000.493
– WSL2: Ubuntu 20.04.4 LTS
– Ruby: 3.1.1p18
– Rails: 7.0.2.2

# deviseの導入
公式の[Getting started](https://gith

元記事を表示

rails app 取得したデータを並び替えるには orderメソッド

# 結論

orderメソッドを使う。
取得したデータを並び替えるメソッド。

“`
モデル名.order(並び替えたいカラム名:)
“`

## 具体例

モデル名:userの時

“`app/controller/モデル名_controller.rb

class UsersController < ApplicationController def @users = User.order(:id) end # @usersに格納している、右の内容を # idの順番で並べる。 end ``` 一旦、以上です。

元記事を表示

【selenium】session not created: This version of ChromeDriver only supports Chrome version XXX

# 1. 環境
“`Ruby:terminal
$ ruby -v
ruby 2.6.9p207 (2021-11-24 revision 67954) [x86_64-darwin19]
$ rails -v
Rails 5.2.7
“`
“`Ruby:Gemfile
gem ‘rspec-rails’, ‘~> 3.7’
gem ‘factory_bot_rails’, ‘~> 4.11’
“`
– System Specを実行するドライバとして、“`Headless Chrome“`を使うため、“`selenium_chrome_headless“`をドライバーとして設定。

# 2. はまったこと
– [「現場で使える Ruby on Rails 5速習実践ガイド」](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3

元記事を表示

Ruby 試験対策 例外処理編

# 基本形
第一引数、`例外クラス`、第2引数,`エラー文`
“`
raise 例外クラス、ORそのインスタンス , “エラー文”
“`
※第一引数は、省略可能。その場合は、`RuntimeError`クラスの例外が発生。
ただ、このままだとエラーが発生した場所で止まってしまう。
## RuntimeErrorとは
特定の例外クラスには該当しないエラーが発生した場合や例外クラスを省略した場合などに起こる

## 変化形
“`
err = 例外クラス.new(“エラー文”)
raise err
“`
## 例外処理のbegin
“`
begin
通常はここが実行
rescue
  エラーがあれば、実行
else
  通常が実行されれば、実行
ensure
  絶対の実行
end
“`

参考図書
[Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書](https://gihyo.jp/book/2017/978-4-7741-9194-2)

元記事を表示

vscode rails環境構築時のエラー brew doctor

# vscodeにrailsの環境構築の中で出たエラー
homebrewをインストールした後“`brew doctor“`を行った時
“`
Homebrew/homebrew-core (git ******** last commit *******)
*****@mbp ~ % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don’t worry or file an issue; just ignore this. Thanks!

Warning: Your Command Line Tools are too outdated.
Update them from Software Update in System Preferences or ru

元記事を表示

定数だけを切り出したファイルを作り、複数クラスで使えるようにする

### やりたいこと
Rubyで定義した定数を他のクラスでも使いたいとき、クラス名::定数名のように書くと思う。

ほとんどの場合は問題ないけれど、ときどき下記のような違和感や問題を感じるときがある。

– 関連が強いor内容が似てる複数のクラスで同じ定数を使いたいとき、特定のクラスにだけ定数を記載し、他のクラスではクラス名::定数名と書くことへの違和感
– クラス名が長いときなどに読みづらくなる

なのでより読みやすい、使いやすい形にしたかった。

( “`config/initializers/constants.rb“`で共通の定数を設定する方法もあるが、そこまで全体的に使いたい訳でもない場合を想定 )

### どうするか
定数用のmoduleを作って、定数を使いたいクラスにそのmoduleを読み込んで使う

### やりかた

1. moduleを作成し、定数を記載する
2. 使いたいクラスで読み込む

#### ① moduleを作って定数を書く

HogeConstants.rbを作成し、定数を書く

“`
module HogeConstants

NEKO

元記事を表示

AtCoder ABC の自分の参加状況をスクレイピングで調べてみる

# 概要

わたしは AtCoder の過去問をテキトーに解くだけでやっているうち、どの問題をどれだけ解いたのかわからなくなってしまいました。なので、スクレイピングで過去の ABC の解答状況を表示させるコードを書いてみました。

公式 API があればいちばんよいのでしょうが、どうもないようなので、Ruby を使ってスクレイピングしています。問題があればコメント欄で御指摘願います。

# 結果

“`
ABC245
B – Mex (Elixir (1.10.2))
D – Polynomial division (Elixir (1.10.2))
C – Choose Elements (Elixir (1.10.2))
A – Good morning (Elixir (1.10.2))
D – Polynomial division (Ruby (2.7.

元記事を表示

いいね Ajaxにする

# Ajaxとは?
ページを更新することなくページの内容だけを入れ替えられる。
ajaxの中核を支えているのはJavacriptの技術。

デメリットもあるらしいがそれを差し引いてもメリットがあると今は理解した。
何から手を出していいのかわからない。

## 早速実践
### ボタン
#### my_app/app/views/favorites/_favorite.html.erb
“`html
<% if current_user.like?(micropost) %>
<%= button_to user_favorite_path(current_user, micropost), method: :delete remote: :true do %>
<%= micropost.liked.count %>

<% end %>
<% else %>
<%= button_to user_favorites_path(current_user, micropost), meth

元記事を表示

Crystalにさわり始めてから半年ぐらいの人が感じたRubyとCrystalの違い

こんにちは。

初心者の所感というのは意外と大切で、初心者でなくなってしまうと得られた知識が空気のようになってしまい、忘れられてしまうことがあります。なので、Crystalにさわりはじめてから半年ぐらいの段階で、Rubyとここが違うなと感じたことをメモしておこうと思います。基本的に**ポエム**です。

## 大クラス主義の配列とHashがないけどなんとかなる

Rubyだと、大クラス主義の配列がいろいろな役目を果たしてくれます。配列に異なるクラスのデータを詰め込んで、あとから簡単に追加したり削除することができます。Crystalだとできません。

これは実はそこまで大きな問題ではなくて、記述量は多くなりますが、雑多なクラスを配列やHashに詰め込む変わりに、自作のクラスを定義したり、構造体を使ったり、タプルを使うことでだいたい解決できると感じます。

## evalが使えない

わたし、よくわかってないんですが、直感的にはこれがRubyとCrystalの本質的な違いではないかという予感がしています。CrystalでEvalを実行するためには、Crsytal本体を実行ファイルに含めて、

元記事を表示

【LeetCode】104. Maximum Depth of Binary Treeを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの104. Maximum Depth of Binary Treeを解いていく。

## 問題文を和訳
– 二分木の根を与えられて、その最大の深さを返します。
– 二分木の最大深度は、ルートノードから最も遠いリーフノードまでの最長パスに沿ったノードの数です。
– Input: root = [3,9,20,null,null,15,7]
– Output: 3

## 回答
“`104_MaximumDepthofBinaryTree.rb
def max_depth(root)
if root
return [max_depth(root.left), max_depth(root.right)].max + 1
else
return 0
end
end
“`

## 最後に
難易度はEasyでした。

元記事を表示

rails seeds.rbファイル とは

# 結論

初期データを作ってくれるファイル。
webアプリのテスト動作などに役に立つらしい。
データを一件入れる場合
“`seeds.rb
モデル名.create!(カラム名:値)
““

* seeds:種

# 具体的な使用例 userモデルオブジェクトの場合

アプリを作り、実際にデータを入れて動かしたい時
データを一件入れる場合
“`seeds.rb
user.create!(name:”倉本”) #!を付けるとエラー画面が表示される。つけないとnilを返すのみ。
““

データを100件入れる場合
“`seeds.rb
100.times do |n|
User.create!(
name:”test#{n+1}”
)
end
“`

# まだテストデータは反映されていない
“`ターミナル.
rails db:seed
“`
これでテストデータが読み込まれます。

# あ、後からテストデータを追加したい時
“`ターミナル.
rails db:migrate:reset
“`
これでテストデータが反映されます。
以上です。

元記事を表示

whereメソッドを使ってDBから取り出すデータを絞り込む

## 実現したかった実装
送られてくるパラメーターの条件を満たしたデータをDBから取り出す実装をしたくて辿り着きました。

## whereメソッドを使用する
モデル名.where(条件)とする事で条件に一致したデータを取り出せます。

## 行った実装
whereメソッドに渡す引数はハッシュの形でいいことに気づき下記のようなクラスメソッドを書きました。

“`ruby
def self.match_recipes(dates)
hash = {}
dates.each{|key, value|
unless value.blank?
hash[key] = value
end
}
Recipe.where(hash)
end
“`
引数に条件の形となるハッシュを渡します。
“`ruby
dates = {“category_id”=>”1”, “genre_id”=>”1”, “type_id”=>””}
recipe = Recipe.match_recipes(dates)
“`
呼び出しのイ

元記事を表示

【LeetCode】3. Longest Substring Without Repeating Charactersを解いてみた

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

## 問題文を和訳
– 文字列sが与えられた場合、
– 文字を繰り返さずに最長の部分文字列の長さを見つけます。
– Input: s = “abcabcbb”
– Output: 3
Explanation: The answer is “abc”, with the length of 3.

## 回答
“`3_LongestSubstringWithoutRepeatingCharacters.rb
def length_of_longest_substring(s)
longest = 0
left = 0
right = 0
str = []
while right < s.length if str.include?(s[right]) left = str.index(s[right]) + 1 str = str[left..-1]

元記事を表示

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

# 問題
前回の問題に機能を追加をしよう。

**今回新たに追加実装してもらう機能は主に以下の2点です。**
・商品ごとの利益・利益率を表示させる
・商品の合計(総売上・総利益・平均利益率)を表示させる

利益の計算方法
利益 (円):販売価格 – 仕入れ値
利益率 (%):利益 ÷ 販売価格 × 100
“`雛形.rb
def register_item(registered_item)
item = {}
puts “商品名を入力してください:”
item[:name] = gets.chomp
puts “販売価格を入力してください:”
item[:selling_price] = gets.to_i
puts “仕入れ値を入力してください:”
item[:cost_price] = gets.to_i
line = “—————————”

puts “商品名 : #{item[:name]}\n#{line}”
puts “販売価格 : #{item[:selling_price]}円\n#{lin

元記事を表示

OTHERカテゴリの最新記事