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

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

【Ruby】そのassert_raisesの使い方、本当に合ってる? – assert_raisesでエラーメッセージをテストする方法

## はじめに
以下のテストで次の2点をテストしようとしています
– 特定の条件でraiseが発生しているか
– エラーメッセージが正しく出力されているか

このテストの何が悪いか皆さんは分かりますか?
“`sample_code.rb
class SampleCode
def self.animal_check(animal)
raise ‘猫はアレルギーだからダメ’ if animal == ‘cat’

raise ‘犬は可愛すぎるからダメ’ if animal == ‘dog’

pp ‘他の動物は許す’
end
end
“`

“`test.rb
test ‘猫はアレルギーだからraise’ do
assert_raises(RuntimeError, ‘猫はアレルギーだからダメ’) do
SampleCode.animal_check(‘cat’)
end
end
“`
とあるプロジェクトのテストコードを眺めていたところ、陥りがちなあるミスを発見したので戒めとして記事にしようと思います。
では、なぜ

元記事を表示

EC2インストールにrbenv install -v 3.3.0を実行して失敗した

## 問題
EC2インスタンスに`rbenv install -v 3.3.0`を実行して失敗した。

## 原因
`fiddle`と`psych`がコンパイルされていない。

## エラー
“`
*** Following extensions are not compiled:
fiddle:
Could not be configured. It will not be installed.
/home/ec2-user/tmp/ruby-build.20240629031939.85872.yDcKUz/ruby-3.3.0/ext/psych/tmp/ruby-build.20240629034052.97576.6eBHYO/ruby-3.3.0/ext/fiddle/extconf.rb:78: missing libffi. Please install libffi or use –with-libffi-source-dir with libffi source location.
Check ext/fiddle/mkmf.log for more de

元記事を表示

Rails newからデプロイまで

## はじめに
はじめまして!2024/04/11よりRUNTEQというプログラミングスクールに在学中のみうらと申します。
`Ruby on Rails` を学習中です。
今回は`Docker` を使った`Rails`の環境構築からデプロイまでの一連の流れについて記していきたいと思います。(2024/06/30時点)
## 今回の流れ
– Rails new
– Git hubのリポジトリ作成
– デプロイ

上記の3点についてまとめていきたいと思います。

## 今回使用技術
– ruby:3.2.3
– Rails: 7系統 (7.1.3.4)
– Docker
– Git Hub
– Render

## Rails環境構築

[こちら](https://hackmd.io/@SKjw2RY-RNCUNSdJfEWPig/HJE0GUClC)を参考に環境構築。
その際、`PostgreSQL`と`MySQL`、`Bootstrap`と`Tailwind`お好きな方を使ってください。
また`docker compose up`の際にエラーが起きた場合[こちら](https://q

元記事を表示

【Rails】「アセットパイプライン」とは

# はじめに

改めてアセットパイプラインについてまとめてみました

# 目次

[1.アセットパイプラインについて](#1-アセットパイプラインについて)
[2.主な機能](#2-主な機能)

# 1. アセットパイプラインについて

アセットパイプラインは、Ruby on Railsアプリケーションで使われる便利な仕組みです。これは、ウェブサイトやウェブアプリで使うJavaScriptやCSSなどのファイルを、効率よく扱えるようにしてれくます。

例えば、アセットパイプラインを使うと、複数のJavaScriptやCSSファイルを1つにまとめて、ブラウザが1回のリクエストで取得できるようにできます。それに加えて、ファイルのサイズを小さくするための工夫もしてくれます。つまり、使っているJavaScriptやCSSが少ないリクエストで、早くページが表示されるようになるんです。

# 2. 主な機能
具体例を交えて4つ紹介します。

## SHA256フィンガープリントを挿入する機能:
この機能は、ファイル名にSHA256フィンガープリントを含めることで、ブラウザとCDNによってファイル

元記事を表示

Ruby 小数点の計算結果の誤差について

## なぜ小数点の計算結果は誤差が生じるのか
“`
x = 122 * 1.1
puts x
#出力結果は134.2000000000002となる
“`
実際に計算をしてみると計算結果は「134.2」となります。
なぜ、このような間違いが起きるのでしょうか?
コンピューターが2進数であることに起因しているようです。

引用
数値として2進浮動小数点数が用いられる場合
定数を10進表記で表していても内部では2進数で処理される
有限の2進数で小数を表した場合の計算は、常に誤差を伴いうる
と言うことを覚えていただいた方が良いでしょう。
引用元
https://ja.stackoverflow.com/questions/49377/javascript%e3%81%ae%e6%8e%9b%e3%81%91%e7%ae%97%e3%81%ae%e7%b5%90%e6%9e%9c%e3%81%8c%e8%a8%88%e7%ae%97%e6%a9%9f%e3%81%ae%e7%b5%90%e6%9e%9c%e3%81%a8%e7%95%b0%e3%81%aa%e3%82%8b%e3%81%ae

元記事を表示

【個人開発】生成AIを使って名言を提供するサービスを開発しました【Rails】

## はじめに
こんにちは![ずっと大地🦦](https://x.com/zuttodaichi)と申します!!
2023年11月より、オンラインスクールのRUNTEQにて、未経験からのWebエンジニア転職を目指して学習をしています。
前職はスポーツ選手として活動しておりました。

今回、生成AIを使った名言提供サービス『MeigenOtter(名言おったー)』を開発したので、記事にしたいと思います。
間違いや不備などありましたら、教えて頂けると幸いです。

## サービス名
[MeigenOtter](https://meigenotter.com/)
ユーザー登録をしなくても、ランダムでの名言取得は可能です。気軽に覗いて頂けると幸いです。

**▼サービスURL**
https://meigenotter.com/

**▼GitHub URL**
https://github.com/daichi3102/wordpass

![MOtop.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37737

元記事を表示

Rubyのメソッド(随時更新)

# charsメソッド
charsメソッドは、その文字列を文字ごとの配列に変換するメソッド。
例えば、”QIITA”という文字列に対しては、[“Q”, “I”, “I”, “T”, “A”]という配列を返す。
“`ruby:qiita.rb
str = ‘QIITA’
str.chars
=>[“Q”, “I”, “I”, “T”, “A”]
“`

# each_with_indexメソッド
配列の各要素に対し、その要素と要素のインデックス(位置)をブロックに渡して繰り返し処理を行うメソッド。
例えば、[“Q”, “I”, “I”, “T”, “A”]という配列に対して、最初の繰り返しでは”Q”とそのインデックス0が渡される。次に”I”とインデックス1、その次に”I”とインデックス2、その次に”T”とインデックス3…という具合に続く。
“`ruby:qiita.rb
str = ‘QIITA’
str.each_with_index do |word, index|
p [word, index]
end
=>[“Q”, 0]
[“I”, 1]
[“I”,

元記事を表示

[Ruby]とりあえずsuperって書いてない?super・super()・super(*)・super(**)は違うんだよ

親クラスのメソッドを呼び出す際に使用される`super`には、`super`、`super()`、`super(*)`、`super(**)`など、いくつかの異なる呼び方があります。
この記事では、それぞれの呼び方の違いと具体的な使用例について説明します。

これで僕みたいにとりあえず`super`って書いておけば良いんでしょって人が減ると嬉しいですね。

## super
`super`は、現在のメソッドに渡された引数をそのまま親クラスのメソッドに渡します。
“`ruby
class Person
def initialize(name, age)
@name = name
@age = age
end
end

class Yuusha < Person def initialize(name, age) super end end yuusha = Yuusha.new('tarou', 28) ``` 親クラスのメソッドが、現在のメソッドと同じ引数を必要とする場合に使用します。コードがシンプル

元記事を表示

単一責任のメソッドがもたらす4つの恩恵 – Ruby編

「オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方」という書籍を読みながらオブジェクト指向設計について学んでいます。
自分の学習用として書いていきます。

メソッドに単一の責任を持たせることは、クリーンコードを書く上で重要な原則の一つです。本記事では、単一責任のメソッドがもたらす4つの主要な恩恵について、Rubyのコード例を交えて詳しく解説します。

## 1. 隠蔽されていた性質を明らかにする

単一責任のメソッドは、そのメソッドが何をするのかを明確に示します。これにより、コードの意図が明らかになり、理解しやすくなります。

### 悪い例:

“`ruby
def process_order(order)
total = order.items.sum(&:price)
tax = total * 0.1
shipping = calculate_shipping(order)

order.total = total + tax + shipping
order.status = ‘processed’

元記事を表示

[Rails] Capistranoが不要なので、削除する

# はじめに
元々、`Capistrano`を使用してデプロイをしていたみたいですが、デプロイ方法が変わって、使用されなくなっていました。

なので、調査をした上で、削除する方針に決まりました。
その内容をアウトプットいたします。

:::note warn
本記事では、削除をメインに記載いたします。
Capistranoについて詳しく知りたい方や実装方法は、別記事を参照していただくようお願いいたします。
:::

# Capistrano とは
https://github.com/capistrano/capistrano

簡単にいうと、デプロイを自動化してくれるGemになります。
詳しくは、以下の記事がわかりやすかったです。

https://pikawaka.com/rails/capistrano

# 確認方法
まず、本当に`Capistrano`を使用していないか、確認します。
デプロイに使用する実行コマンドは、以下のようになると思うので、リポジトリ内・外を調査します。

“`sh
bundle exec cap production deploy
“`

使われ

元記事を表示

VSCodeのRuby LSPが正常に動作しないときの対処法

## 概要

VSCodeのRuby LSPの拡張機能をインストールした際に繰り返しエラーが発生しました
安定して動作するように修正する方法がつかめたので共有です

## 環境

* WSLのUbuntu 20.04
* rbenv
* Ruby

## 環境準備

WSLのUbuntu 20.04にrbenvを入れる

“`bash
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y gcc g++ make git libssl-dev libreadline-dev zlib1g-dev
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ ~/.rbenv/bin/rbenv init
# 1度入りなおす
$ which rbenv
/home/username/.rben

元記事を表示

【Ruby】オライリー本の備忘 ~rubyプログラムの構造と実行

## 概要
[プログラミング言語Ruby](https://www.oreilly.co.jp/books/9784873113944/)を読んでの備忘録
本の中の章ごとに分けることとする

## 識別子の記号
– ?

booleanを返すメソッド名の末尾には疑問符をつける
“`ruby:example
def empty?(str)
# booleanを返す処理
end
“`

– !

オブジェクト自身を破壊的に変更する場合につける
“`ruby:example
def sort!(arr)
# 破壊的処理
end
“`

## 改行
rubyでは四季が不完全な場合に解析が次の行に続く
“`ruby:example
total = x + # 式が不完全なため解析が次の行に続く
y

total = x # 式が完全なため解析がここで終了する
+ y
“`
:::note info
行の中で最初に現れた空白以外の文字がピリオドである場合、
その行は前の行からの後続だと見なされる
:::

“`ruby:example
animals = Arra

元記事を表示

requireするケース

“`
# frozen_string_literal: true

+require ‘net/http’
+require ‘uri’
+require ‘mini_magick’
+require ‘fileutils’
“`

上記のようにrequireするケースは、Rubyに標準で存在しない場合など、あえて書かなければいけない場合のみ記載する。

Gemfileに記載されたGemは、Bundlerによって自動的にロードされるため、手動でrequireする必要はない。既に入っている場合は不要。

それ以外は基本的にはRubyの標準機能であるため記載不要。

元記事を表示

RSpecでよく使うメソッド集(備忘録)

RSpecの検証に使うメソッドを忘れがちなので、アウトプットしてみるようにしました。
他にもよく使うけど、忘れるようなメソッドがあれば、どんどん残していきます!

## pageの中に、文字列があるかどうかを判断するマッチャ
“`ruby
expect(page).to have_content(‘テキスト’)
“`

## 現在のページが指定したページかどうかを判断するマッチャ
“`ruby
expect(page).to have_current_path(path)
“`

## 指定した範囲の中で検証を行う
“`ruby
within(‘.class’) do
# expect(page).to have_content(‘テキスト’)
end
“`

元記事を表示

ホワイの(感動的)rubyガイドが読み物として面白い

# 読書をしているか?

読書をしているか? 『リーダブルコード』を読んだ? 面白かったか? ほんとうか? 次は『オブジェクト指向でなぜつくるのか』を読む? 本当か? **本当にそんな役に立つものばかり読むのか?**

リーダブルコードは結構ユーモアにあふれて読みやすく、好きだった。
しかしたまには不真面目な読書もしたい。

『ママ、なぜおうちにサーバーがあるの?』も読め。

たぶん非売品なのだが作者さんが全文をのっけてくれている。

https://qiita.com/uikou/items/e4843f0bce940927de96

そのタワーが「デスクトップPCではなくサーバーである」と理解しているお子さんはもうなんていうか、それだけでおかしい。

## ホワイの(感動的)rubyガイドを読め(無料だ)

ところで、俺は『ホワイの(感動的)rubyガイド』が好きだ。
しかもこれは無料である。
ユーモアにあふれていて面白いので、いろんな人に読んでほしいと思っている。

http://www.aoky.net/articles/why_poignant_guide_to_ruby/

元記事を表示

Rubyで英語名称のポケモンの名前を日本語で当てるゲームを作ったよ

### 読んで欲しい人

– rubyでプログラムを作ってみたい人
– 過去の自分

### 動作環境

– ruby 3.3.3

### アプリについて

#### ファイル構造
“`ファイル構成
.
├── pokemon.rb
├── pokemon.csv
“`

#### ソースコード
“`ruby:pokemon.rb
# ファイル内でcsvライブラリ(モジュール)を使用するための記述
require ‘csv’

# CSVファイルを読み込む
def load_pokemon_from_csv(file_path)
pokemon_data = []
# foreachにheaders: trueをすると、keyとvalueをいい感じに扱ってくれる
CSV.foreach(file_path, headers: true).each_with_index do |row, _i|
pokemon_data << row.to_hash break if _i == 150 end pokemon_data end def ma

元記事を表示

Rubyでオウム返しプログラミングの練習…

お久しぶりです。Javaの勉強し直してます。
Javaでオウム返ししろと言われましたが、手癖でRuby…

※注意事項。
→が、実行結果です。

“`ruby
cat oumu.rb
→puts gets.to_s

ruby oumu.rb
→1
→1
“`

では、この辺で…

元記事を表示

Ruby on Rails ECサイト作成

## はじめに
Zennの記事を元にECサイトを作成してみました。
今回はオリジナルではありませんが今後ECサイトを作りたいので練習で制作しました。とても勉強になったのでECサイトを作ってみたい方はぜひチャックしてみてください。

https://zenn.dev/farstep/books/7f169cdc597ada

## 機能紹介
大きく2つに分けることができます。
・ECサイトの管理者側の機能
・ECサイトを利用する顧客側の機能

どちらもログインすることで閲覧できます。

Githubリポジトリ

https://github.com/Killua0615/ecommerce_practice

### 管理者側以下の内容が確認できます

#### 注文履歴
status は「Normal」「Withdrawn」「Banned」のどれかに変更することができる
![スクリーンショット 2024-06-27 10.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/7fe7

元記事を表示

【Ruby】privateとprotectedの違い

# 初めに
rubyのclassにおけるprotectedが理解できず調べていたのですが、分からなかった理由はprivateの理解を誤っていたからでした。
今回は思考の整理のため、privateメソッドとprotectedメソッドの違いについてまとめてみます。
# 共通点
・クラス内かサブクラス内でのみ呼び出せる点(他の言語ではprivateはサブクラス内では呼び出せない場合もあるみたいですが、Rubyではそうではないです)
・レシーバがselfの場合、privateメソッドでもprotectedメソッドでも挙動は変わらない。
bメソッドの中でaメソッドを呼び出している部分は、省略されているだけでその前にselfがあります。
“`

class Parent
def initialize(name)
@name = name
end

def b
a
end

protected #privateでも同じ結果が出ます

def a
puts “a”
end
end

parent = Parent.new(“Alice”)

par

元記事を表示

data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合

## はじめに
data-turbo=”false”とdata: { turbo_method: :post }をどうしても一緒に使う必要があった時の話です。

※後述しますが、ajax化した場合ですと今回の書き方ではうまくいきません。予めご了承ください。

## 環境
ruby 3.2.2

rails 7.1.3.2

hotwire

Bootstrap5系

Google Map API

## 今回例示するアプリ画面についての説明

現在、「自分の好きな本屋を紹介し、また好きな本屋が増える事を支えるサービス」がテーマのポートフォリオを作成中です。

今回は開発途中で壁に当たった時の対処法としてここに記していきたいと思います。

## 今回のシチュエーション

ブックマークボタン(画像にある栞のマーク)を押すたびに、javascriptが読み込めなくなりGoogleMapが表示されなくなりました。

![turboメソッドの記事写真1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372657

元記事を表示

OTHERカテゴリの最新記事