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

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

RSpecで学ぶbuildとcreateの違い

# 初めに

こんにちは!taisei_codeです。
「書いて、慣れろ!」をしてると、前提知識の理解が浅いことで苦しみます。
焦らずに、知識を定着させましょう。ということで、FactoryBotのbuildとcreateについて理解できたので書きました。

# 問題

メールアドレスのバリデーション
“`ruby
validates :email, uniqueness: { case_sensitive: false }
“`

FactoryBotでテストデータを生成
“`ruby
email { “info@example.com” }
“`

テストデータで生成した小文字のメールアドレスと大文字のメールアドレス “`{ build(:admin_user, email: ‘INFO@example.com’) }“` が重複するケースを作る
“`ruby
RSpec.describe AdminUser, type: :model do
let(:admin_user) {build(:admin_user)}

describe “バリデーションの検

元記事を表示

Ruby on RailsとReactでBlogアプリを作りました。

##

使用技術一覧






Rubyの継承と定数を組み合わせるとどうなるか?

みなさん、継承についてはよくご存知のはずです。

サブクラスで基底クラスと同じ名前のメソッドを定義すると、サブクラスのメソッドが呼び出されます。

では、サブクラスで規定クラスと同じ名前の**定数**を定義するとどうなるでしょうか?

# 結果

`FOO` のように定数を直接参照するとメソッドが定義されたクラスの定数が参照されます。

`self.class::FOO`のように参照すると、selfのクラス(子クラス)の定数が参照されます。

“`ruby
class Parent
FOO = “parent”

def refer_foo
FOO # 常に Parent::FOO に解決される
end

def refer_self_class_foo
self.class::FOO # 常に Parent::FOO または Sub::FOO に解決される
end
end

class Sub < Parent FOO = "sub" end puts "refer_foo" p Parent.new.refer_foo # => “par

元記事を表示

二次元配列に対するsort_byの挙動の覚書き

初学者向けの記事です。
二次元配列(配列の中に配列が入れ子になっている)のsort_byの挙動について、大分混乱したのでメモ的に残しておきます。

*その前にsort_byメソッドはこちらの解説がわかりやすいです。
>
https://zenn.dev/ganmo3/articles/fdda007796a7cb


“`ruby
array = [[1, 6], [3, 4], [2, 5], [1, 7]]
sorted_array = array.sort_by { |a| a}
puts sorted_array.inspect
# 出力:[[1, 6], [1, 7], [2, 5], [3, 4]]
“`
二次元配列のソートでは、サブ配列(配列の中の配列)の最初の要素を比較してソートが行われる。最初の要素が同じ場合は、次の要素を比較して順序を決定する。つまり、サブ配列は最初の要素で主に昇順に並べられ、同じ最初の要素を持つサブ配列がある場合は、次の要素で昇順にソートされる。
配列`[[1, 6], [3, 4], [2, 5], [1, 7]]`では、最初の要素1,

元記事を表示

Array.newで異なる値を持つ配列を作成する方法

初学者向けの記事です。簡単なコーディング問題で学習したのでメモ的に。
※当初「Array.newで異なる値を持つ配列は作成出来ない」という記事でしたが、訂正しました。

—–
`Array.new(n)` は、指定された要素数 `n` で新しい配列を作成するRubyのメソッドです。このメソッドは、`n` を引数に取り、その数だけnilで初期化された配列を生成します。
“`rb
arr1 = Array.new(3)
puts arr1.inspect
# 出力:[nil, nil, nil]
“`
—–
ブロックを与えることで、ブロックの評価結果を各要素に代入した配列を作成することもできます。
“`rb
arr2 = Array.new(3) { ‘a’ }
puts arr2.inspect
# 出力:[“a”, “a”, “a”]
“`
—–
続いてArray.newで異なる値を持つ配列を作成する方法です。
まず直接的に異なる値を持つ要素を生成することはできません。例えば、[“a”, “b”, “c”]みたいな配列を作成しようと、`Array.new(3)

元記事を表示

PHPerがRuby(Ruby on Rails)を約3年経験した結果

# はじめに
Hubbleでバックエンドエンジニアをしている @power3812 です。オブジェクト指向大好きマンで、神クラスを作れないかと模索の日々です:innocent:

今回はHubbleに転職して約3年経つので、振り返りの意味も込めてPHPerで一切Rubyを触ったことがなかった僕が、約3年Rubyを使った所感を書こうと思います!

# 筆者のサマリ
大学は電子情報で大学院は技術経営を学んでしました。大学院は21卒なので21卒で就活をして、サマーインターンでWeb開発を知り、PHPと出会い、Web開発の沼にハマりました。

しかし、大学院にいるよりも早く実践を積みたいと、大学院を中退し、20卒としてソーシャルゲーム会社に就職しました。
ソーシャルゲームということで、PHPをそのまま経験、その後受託系の会社に転職し、そこにはPHPerKaigiの運営にも携わっている方にPHPの真髄を叩き込まれました。

その後、自分が完全未経験のRubyで開発しているHubbleに入社しました。

# 結論
RubyもPHPも本質はなにも変わらないです。
これはその通りと言えば、その通りのこ

元記事を表示

rubyで画像の色を変更してみた

# はじめに
今回は遊びで画像の色を変換させるプログラムを作成したので、
メモ程度に投稿します。
# 本題
### 前提
この記事のゴールとしては、
画像の色を反転させる、または一部色を指定して変更させることです。

1. Docker環境の準備
2. 色を反転
3. 色の変更

作成したファイルは以下になります
“`
作成したファイル
– Dockerfile
– docker-compose.yml
– detail.rb
– reverse.rb
– color_change.rb
“`

画像は以下の画像で試してみることとします。
(調べた限り著作権的にも問題なさそうなので?)
画像を実行ファイルと同様のディレクトリに配置した場合を仮定して、以下記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295486/5e48c7a7-22f4-3acb-7dff-0f5b8a88a9e8.png)

### 1. Docker環境の準備
まずはDocker環

元記事を表示

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う GPIO編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino](https://wiki.seeedstudio.com/Grove-Beginner-Kit-For-Arduino/) というものを買ったので、数回に分けて Arduino と Ruby での使用レポートを書いてみようと思います。

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* Ruby – Raspberry Pi + [Grove Base HAT for Raspberry Pi](https://www.seeedstudio.com/Grove-Base-Hat-for-Raspberry-Pi.html)
* mruby/c – [Rboard](https://www.sjc-inc.co.jp/service/rboard)

予定しているレポートは、以下の通りです。

1. デジタル入出力 – GPIO編 (今回)
2. アナログ入力

元記事を表示

RSpecによるRailsテスト入門を読んで

# はじめに
今回はRSpecによるRailsテスト入門という本を読んだので、そちらの感想を書いていこうと思います!

今回読んだ本はこちらです。

https://leanpub.com/everydayrailsrspec-jp

# 良かったところ
RailsやRubyの書籍はたくさん存在していますが、自動テスト(RSpec)についての日本語の書籍はなかなか見たことがありませんでした。よくRailsの書籍の最後の方に少しだけのっていたり、動画の中で少し触れていたりというものはありますが、ガッツリテストの本って見かけないのでテストの学習をしたい方にはとても良いと思いました。

# 悪かったところ
テストって結構簡単に書けると思われているのか、Railsなどの書籍に載っている部分だけの印象だったので、かなりのボリュームに圧倒しました。
そして、購入は海外のサイトなので、ドルでの支払いでした。最近は円安が続いているので、ちょっと高くつくなーって思ってしまいました。(必要なものなので、即決で買いましたが笑)
値段がその時々によってかなり異なってくること。支払い方法が限られているのでその

元記事を表示

【Rails】find_eachで大量データを扱う

# この記事で言いたいこと
大量データのループ処理を扱う際には`find_each`がメモリ節約に有効である。

# きっかけ
先日、Ruby on Railsで大量データを扱う機会がありました。
その際`find_each`というメソッドがあることを学んだので、`each`との違いを明らかにしながらまとめていこうと思います。

# eachを用いた例
`Student`というモデルがあると仮定します。
studentsテーブルにある生徒の名前(nameカラム)を全員分出力したい場合、皆さんはどのようなコードを書きますか?

“`ruby
Student.all.each do |student|
puts student.name
end
“`

上記のように`Student.all`でレコードを全件取得してから`each`メソッドを使用することで、studentsテーブルにいるすべての生徒の名前を出力することができます。

レコード数が少ない場合は上記の例のように書くのがよいでしょう。
しかしレコードが大量にある場合は、上記のようにレコードを一気に取得する方法だとメモリ

元記事を表示

【Rails】Youtube APIを使ってIDで動画を検索する

# はじめに
この記事では学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため、理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。

# やりたいこと
YouTubeの動画IDから動画情報を検索し、タイトル・概要欄・サムネイルを取得する

# 準備
– APIキーの取得
– APIキーを環境変数に設定
– YouTube Data API v3を使うためのgemをインストール

この3つを準備していきます。

## APIキーの取得
– Google Cloud Consoleにログイン
– 新しいプロジェクトを作成

![77772AA8-87F8-4842-93B5-FAAF741B9554_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3671013/b59aafd9-fba9-448f-e181-76b62371327a.jpeg)

– 使用するAPIの有効化

**APIとサービス**の**ライ

元記事を表示

rubyの個人的推しメソッド take_while を使ってみよう

rubyの組み込みメソッド一覧を見ていると
「こんなメソッドがあったんだ!」という
マイナー(個人の感想です)なメソッドを見つけることがありますよね。
痒いところに手が届くような、豊富なメソッドがrubyにはありますが
そんなメソッドの中、個人的推しメソッドである`take_while`を紹介します。

## take_whileの機能
`take_while`は、Enumerableモジュールのメソッドです。

**Enumerableオブジェクトの要素を順に評価し、
falseになった最初の要素の、手前の要素までを配列で返却します**

## こんな時につかおう!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391935/7710e1fc-be69-3505-eaba-671124132451.png)

例えば、シャッフルしたデッキのトップからカードを順に引いていき、JOKERが出るまで手札に加えるような処理を想定します。

“`ruby
deck = [‘♠️2’, ‘♦️5

元記事を表示

色々な言語の Dictionary のキーの型の扱いについて調べてみた

Dictionary や object のキーに複数の型を指定した場合、どういった扱いになるのかが非常に気になったので、自分の知っている範囲の言語で試してみました!

# Python の場合

“`python:Python
a = {}
a[1] = “int”
a[1.0] = “float”
a[“1.0”] = “str”
# => {1: ‘float’, ‘1.0’: ‘str’}
“`

int と float は同一視されるようです。Python では `1 == 1.0` が成立するので、これは合理的な気もしますね。使う側は非常に安心できます。他にも、True, False, Fraction, Decimal なども同一視されるようです。

> Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).

https://docs.python.org/3.5/lib

元記事を表示

Redmineをv1.4からv5.1へアップグレード

最近、とあるお仕事で長年運用してきたRedmine v1.4をRedmine v5.1へアップグレードしました。
Redmineの構築は約10年ぶり。作業しながらだんだん思い出してきましたが、Redmineのインストールはとても面倒です。Redmineの、というよりは、Ruby on Railsベースのアプリの、というほうが正しいのかもしれませんが。
作業のログを残しておきます。

# 要件

* __OSのEOSL対応__。元々Redmineを運用してきたサーバーのOSのEOSL対応が必要なため、別途新しくサーバーを用意してRedmineをインストールする。
* __基盤をさくらのVPSからAWSへ移行__。構築や運用における様々な利便性を考慮し、新しいサーバーOSはAWS上に構築する。
* __旧環境のデータを新環境へ移行__。旧環境のRedmineからデータベース内の全データとディスク上の添付ファイルを移行する。
* __DBもEOSL対応__。OS同様にEOSL対応が必要なため、新しいサーバー上に最新のMySQLをインストールする。
* __RDS化やコンテナ化はなし__。移行

元記事を表示

必要そうなのを全部入れておいたマイコンの中のmRuby量産型

計算機

a)データ

b)ロジック

c)Net

システム

元記事を表示

WSL2でrbenvからRubyをビルドしようとしたら、すんなりいかなかった話

# 今回のサマリ
WSL2上のUbuntuでrbenvからRubyをビルドしようとしたら、ライブラリが足りずにエラーが出ました。
足りなかったライブラリは以下の通りです。
* `libyaml`
* `fiddle`
* `openssl`

# 環境
* WSL2(windows11)
* Ubuntu.22.04LTS
* rbenvのバージョンは以下の通り
“`
~$ rbenv -v
rbenv 1.2.0-87-ge8b7a27
“`

# 今回の困りごと
今度はWSL2上でのUbuntuの話です。
WSL2上で運用しているUbuntuでrbenvからRubyをビルドしようとしたら、下記のようなエラーを吐かれました。

“`
$ rbenv install 3.2.3
==> Downloading openssl-3.1.4.tar.gz…
-> curl -q -fL -o openssl-3.1.4.tar.gz https://dqw8nmjcqpjn7.cloudfront.net/840af5366ab9b522bde525826be3ef0

元記事を表示

【Rails・デザパタ】マイグレーションで学ぶCommandパターン

## Commandパターンとは
Commandは「命令」という意味で、「命令」をオブジェクトに表したデザインパターンです。命令オブジェクトごとにステータスを保持されることで、複数のコマンドの履歴管理や、複数の命令をまとめて実行・ロールバックすることが容易になります。

## Rails の ActiveRecord での Commandパターン
`Rails` の `ActiveRecord` のマイグレーション機能ではテーブルを追加したり、カラムの変更を行うことができます。本来はSQLを直接実行することでDBに変更を加えますが、マイグレーションは専用のスクリプトファイルを用意し、それを実行します。

## マイグレーションの基本動作

マイグレーションファイルの作成はコマンドで実行することができます
“`terminal
rails generate model Cat name:string age:integer
“`

“`db/migration/20240315_create_cats.rb
class CreateCats < ActiveRecord::Mi

元記事を表示

【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法

## 概要

`Rails` で `API` を開発する際に、`ActiveModelSerializers` のバージョン `0.10.x` を使用しているとネストされた関連オブジェクトをレンダリングできないという問題に直面しました。この問題は、`render` メソッドで `include` オプションを明示的に指定することで解決できます。

## 原因

`ActiveModelSerializers` のバージョン `0.10.x` では、デフォルトでネストされた関連オブジェクトの自動レンダリングがサポートされていません。これにより、期待通りにネストされた `JSON` を返却するために追加の手順が必要になります。

## 対処法: `include` オプションの使用

期待通りにネストされた `JSON` レスポンスを生成するためには、`render` メソッド内で `include` オプションを使用して、明示的にネストされたオブジェクトを指定する必要があります。以下は、店舗情報とその関連オブジェクトをレンダリングする `Rails` コントローラーの実装例です。

元記事を表示

Ryby/Ruby on Railsを習得するためにやったこと まとめ(随時更新)

バックエンド言語「Ruby」およびWebフレームワーク「Ruby on Rails」を習得するためにやったことをここにまとめます。随時更新中!!

RubyもインストールしてHello worldしてみる。

※参考:[初めてのRuby:インストール確認、REPL、Hello worldまで](http://idr-zz.hatenablog.com/entry/2018/11/20/224131)

6年ぶりのRyby再開計画発動!!Rubyistに、俺はなる!?

※参考:[Rubyistに、俺はなる!? 6年ぶりのRyby再開計画発動](https://www.i-ryo.com/entry/2024/03/24/201632)

最新版のRubyをGemini先生に助けられながらインストールする

※参考:[【Ruby】最新版Rubyをインストール 〜苦戦の記録〜(ありがとうGemini先生)](https://www.i-ryo.com/entry/2024/03/26/225903)

元記事を表示

マイグレーションとmerge の関係性

マイグレーションに記入した
“`ruby
class CreatePrototypes < ActiveRecord::Migration[7.0] def change create_table :prototypes do |t| t.string :title t.text :catch_copy t.text :concept t.references :user, null:false, foreign_key: true t.timestamps end end end ``` 上記の通り `t.references :user, null:false, foreign_key: true` を記述すると ストロングパラメーターに`merge`を付けることを忘れずにする!!これをせずにいるとうまく遷移できなかった。 具体的に ```ruby private def prototype_params params.require(:photo).permit(

元記事を表示

OTHERカテゴリの最新記事