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

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

超初心者のためのRSpec入門ガイド

こんにちは!この記事では、RubyのテストツールRSpecの使い方を超初心者の私が説明します。一緒にステップバイステップで学んでいきましょう!

### 目次
1. RSpecって何?
2. RSpecのインストール方法
3. RSpecの基本的な使い方
4. 実際にテストを書いてみよう!
5. まとめ

# 1. RSpecって何?
RSpecは、Rubyというプログラミング言語で書いたコードが正しく動くかどうかをチェックするためのツールです。コードを書いた後に「ちゃんと動くかな?」と確かめる手助けをしてくれます。

# 2. RSpecのインストール方法
まず、RSpecを使うためにインストールします。以下のコマンドをターミナルで実行してみてください。
“`
gem install rspec
“`
Bundlerを使っている場合は、Gemfileに以下を追加してからbundle installを実行します。
“`
group :test do
    ・・・
gem ‘rspec’
・・・
end
“`
これでRSpecの準備が整いました!

# 3. RSpec

元記事を表示

【Rails】一つのモデルに対して複数の意味を持たせたい(class_name, inverse_of )

# 実現させたいこと
例えばユーザー(User)と本(Book)のモデルが存在している時
Userに二つの意味を持たせたいことがある
– 本を所有しているユーザー(User)
– 本の著者(Author)

“`rb
book.author
# => 本の著者を取得
book.user
# => 本の所有者を取得
“`

同じUserモデルを使って、author、userをそれぞれ取得できる

# モデル作成
マイグレーションファイルは以下のようにBookに外部キーとして
– user_id
– author_id

を持たせます
“`rb
class CreateBooks < ActiveRecord::Migration[7.1] def change create_table :books do |t| t.belongs_to :user, null: false t.belongs_to :author, null: false t.timestamps end end end ``` モデルは下記のよ

元記事を表示

Rubyでデザインパターン (7) Builderパターン

## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

## Builerパターンとは
Builderパターンとは、生成するインスタンスへ渡すパラメータを段階的に組み立てることで、複雑なオブジェクトの生成を容易にするデザインパターンです。
詳しくはこちらをご覧ください。

https://qiita.com/takutotacos/items/33cfda205ab30a43b0b1

## Rubyでのコード例
以下のように、生成したいクラスの定義と、そのクラスを生成するBuilderクラスの実装を行います。
それぞれのメソッドで`self`を返すようにすることで、メソッドチェーンでメソッドを書けるようにすることも可能です。

“`rb
class Computer
def initialize(cpu:, ram:, storage:)
@cpu = cpu
@ram = ram
@storage = storage
end

def to_s

元記事を表示

Crystal言語でシングルバイナリを作る

## はじめに

タイトルをキャッチーにしたのは人集めです。ご容赦ください。あまりシングルバイナリの話はしていません。調べ物のスタートに使ってください。

– Rubyでツールを配布するときにはGemにするのが一般的である。
– 単純なツールであればCrystalで書いてバイナリにすることもできる。

## Crystalで静的にリンクしたバイナリを作成する

公式では、

“`sh
crystal build a.cr –static
“`

とすればいいことにされているが、実際には動作しないことが多い。
そこで、muslのライブラリを使っている公式のDockerイメージを使用するとLinux用のバイナリを出力できる。
たとえばこんな感じ。

“`sh
docker run –rm -it \
-v $(pwd):/workspace \
-w /workspace \
crystallang/crystal:latest-alpine \
crystal build a.cr –static –release
“`

Shardsのライブラリなどを利

元記事を表示

Rails: あなたがService Objectでやりたいことは、たぶんActiveRecordで1行でできる

## はじめに

自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaをやろうかなと思っています。

それでは本題です!

## Rails歴が長くても、Railsの便利機能が使えていない人は多い

私はフリーランスとして、ここ数年でいろいろなRuby on Rails案件に入ってきました。その中で強く感じるのは、Railsの便利機能をしっかり使いこなしている人が少ないということです。これは一見シニアっぽい人でもそうです。

とても残念なので、使いこなしている人が少ない便利機能に主に焦点を当てて、Railsの素晴らしさをなるべく多くの人に知っていただこうと思っています。

[前回のviewのテストの記事](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8)もその一つでした。

今回は、ActiveRecordで関連オブジェクトを一気に作る複数の方法を紹介します。

元記事を表示

単体テストコード MySQLのエラー解消

モデル単体テストコードを実装している最中に
`MySQL client is not connected`というエラーが発生した場合の対処方法は↓
config/environments/test.rbというファイルに以下の記述を追記しましょう。

“`
Rails.application.configure do

#省略

config.active_job.queue_adapter = :inline #追記

#省略
“`
## Active Jobのキューアダプタ設定
これはRailsのバックグラウドジョブフレームワークです。
デフォルトのジョブは非同期で行われるが`:inline`に設定する事でジョブは非同期ではなく、同期的に実行されます。
## ジョブの実行タイミング
`inline`に設定する事でジョブが即座に実行されるよになります。これはテスト環境で特に有効的です。
理由はテスト中にバックグラウンドでジョブが実行されるのを待つ必要がなくなり、テストの実行がより予測可能になるからです。
## テスト解消の理由
テスト環境で非同期ジョブを使用すると、ジョブが非

元記事を表示

僕のrubocom設定

# はじめに
基本のrubocop設定を自分用の備忘録として記述します。

# Rubocopとは
RuboCop とは、Ruby のコードがコーディング規約に沿っているかを検査することができる「静的コード解析ツール」の一つです。
RuboCop をアプリケーションに取り入れることで、コードの品質を保つことができます。

# Rubocop 基本設定

“`ruby:.rubocop.yml
AllCops:
# チェック対象から除外するディレクトリ,ファイル
Exclude:
– “vendor/**/*”
– “db/**/*”
– “bin/*”
– “node_modules/**/*”
– “config/initializers/devise.rb”
– “config/environments/*.rb”
– “Gemfile”
– “Rakefile”

# # frozen_string_literal: true というマジックコメントのないファイルの許可
Style/FrozenStri

元記事を表示

Railsのviewテストを書こう

## 挨拶

自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaをやろうかなと思っています。

日々、下記のことを考えて開発したり、Xにポストしたりしています。

1. Railsのテスト戦略。Viewのテストも
1. シンプルだけどUXを犠牲にしないHotwireの書き方
1. ActiveRecordのあまり知られていない機能を使いこなして、シンプル・高機能・堅牢なコードを書くコツ
1. なるべくScaffoldの型を保ちつつ、複雑な処理を書く方法

でも、ちゃんと記事をまとめるまでの気力がまだないので、サクッと書けるものを中心に書いていきます。内容は薄めでも背景は意外と考えているので、コメントを残してもらえれば長文解答します!

ではいよいよ本題です!

## あなたは何のテストを書いているのか?

私が見てきた現場のほとんどでは以下のテストしか書かれていなかった。

1. Model spec
1. Reques

元記事を表示

[比較]map と pluck

業務で`map`と`pluck`の違いを意識することが増えたので、整理する

| |map |pluck |
|:– |:– |:– |
| 公式doc | https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COLLECT | https://railsdoc.com/page/model_pluck |
| | RubyのArrayクラスのメソッド | RailsのActiveRecordのメソッド |
| | 各要素に対してブロックを評価した結果を全て含む**配列**を返す | 指定したカラムのレコードの**配列**を返す |
| 特定のカラムの配列を取得したいときの記法 | Array.map(&:カラム名) | モデル.pluck(:カラム名) |
| ActiveRecordインスタンスの生成 | する(必要なカラム以外の全てのカラムをloadする) | しない(必要なカラムのみを取得する) |
| 使い分け | インスタンスからカラムの配列を取得したいとき | インスタンス以外から直接カラムの

元記事を表示

「単体テストの考え方/使い方」を読んでテストの本質を学ぶ(第1部)

:::note warn
この記事の内容は技術書を読んだ感想や個人的な考察です。
:::

# はじめに
どうもこんにちは、もきお([@mokio_50](https://twitter.com/mokio_50))です。
今までなんとなく書いてきたテスト。テストの質について考えたことって意外とないですよね?えっ、それは自分だけだって?笑

そんな自分にテストの考え方を改めて考えさせてくれた本がこちら。今回から3部に渡ってこの本の要約というか感想文をつらつらと書き連ねたいと思います。

### 書籍情報

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595926/0701cf35-4a48-7075-f491-658b5513a116.png)

**質の高いテストを行い、ソフトウェアに価値をもたらそう!**

著作者名:Vladimir Khorikov
編集者名:須田智之

[Unit Testing Principles, Practices, and Patterns](ht

元記事を表示

Sidekiq、Redis って何が嬉しんだっけ? 〜ECサイトを具体例にまとめてみた〜 [Rails]

# はじめに
本記事は、私自身が開発を行う中で、「結局、Sidekiq、Redis って何が嬉しんだっけ?」 という疑問に対して、それぞれの特徴や、どのような通信の順序でシステムに恩恵を与えてくれているのかについて備忘録も兼ねて整理したものとなります。
また、具体例があると分かりやすいので、ECサイトを元に記述しています。

# 具体例として利用するECサイトのインフラ構成図
Railsアプリケーションでよく見る構成図だと思います。
また、Renderを利用していますが、AWSでもheroku でもOKです。(もちろん、DBもpostgres以外でもOKです)

![Frame 6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552488/b2256aba-b6fa-fa1b-d6b1-4b933fa48b15.jpeg)

# 基本説明のおさらい

### Sidekiq とは?
Sidekiqは、バックグラウンドジョブを非同期に処理するためのツールです。これにより、時間がかかるタ

元記事を表示

RubySilverに合格できたお話

## はじめに
初めまして、@jinta_02と申します。
未経験からエンジニアに転職して、早3ヶ月が経ちましたが、業務をする上で、「これ何してんだ?、どんな書き方?」と思おうことが多々あったので、RubySilverを受験してきました。
これから受験される方の参考になればと思ったので、受験記録を残します😀

## スキルレベル
– エンジニア歴3ヶ月(未経験からWebエンジニア)
– 転職前に、10ヶ月ほどプログラミングスクール受講(主に、Ruby, Railsを学習)
– 以下のポートフォリオを作成できるレベル
[個人開発】服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースしました](https://qiita.com/jinta_02/items/329abd44056277a17d739)

## 受験のきっかけ
エンジニアに転職して実際にサービス開発に携わる中で、チームメンバーが書いているコードを理解できない部分があったので、もう少しRubyの文法だったりライブラリについて学ぶ必要があると感じたからです。また、学習するなら何か形に残るものにしたかったのと、R

元記事を表示

polymorphicと中間テーブルの違い

polymorphicと呼ばれる、初めましての概念と出会ったので記録します。
polymorphic自体は理解したつもりだったのですが、中間テーブルの違いはなんなのかなと思った時に分からなかったので聞いてみました。

以下本文

ポリモーフィック(polymorphic)と中間テーブル(join table)は、データベース設計において多対多の関係を扱うための異なるアプローチです。それぞれの違いと特徴を以下に説明します。

### ポリモーフィック(Polymorphic)

**定義:**

ポリモーフィック関連は、一つのモデルが複数の他のモデルに関連付けられる方法です。ポリモーフィック関連では、関連するテーブルに追加のカラムを使用して、関連付けのタイプを識別します。

**使用例:**

例えば、コメント(Comment)モデルが、記事(Article)や画像(Image)など、複数の異なるモデルに関連付けられる場合があります。この場合、ポリモーフィック関連を使用します。

“`ruby

# Migration to create comments table with pol

元記事を表示

Rails 7.2 をちょこっと試す (insert_all returning オプション編 (ただしMariaDBに限る))

## はじめに
Rails 7.2 では、MariaDB で、`insert_all` に `returning` オプションが使えるようになりました。
MySQL では使えないので注意が必要です。
(PostgreSQL では、以前から `returning` オプションが使えます。)
## 環境
– Ruby 3.3.2
– Rails 7.2.0.beta2
– MariaDB 11.4.2
– MySQL 8.4.0

## 準備
Bookモデルを作ります。
“`sh
$ bin/rails g model Book title
“`

## MySQL での挙動

MySQL では `returning` オプションを使うとエラーになります。
MySQL に接続するように `config/database.yml` を修正して以下を実行します。
“`sh
$ bin/rails db:create db:migrate
“`

Rails コンソールで `insert_all` を `:returning`実行するとエラーになります。
“`ruby
$ bin/r

元記事を表示

【Rails7】to_sでwrong number of arguments (given 1, expected 0) (ArgumentError)が発生する

## はじめに
Rails7にアップデート中、to_sを使用している部分でエラーが発生したので、解消方法をまとめていきます。

## 問題
エラー内容
“`ruby
date = DateTime.now
puts date.to_s(:db)

`to_s’: wrong number of arguments (given 1, expected 0) (ArgumentError)
“`

## 解決方法
to_sをto_fsに変更することで解消します。

“`ruby
date = DateTime.now
puts date.to_fs(:db)
“`

## 参考
https://scrapbox.io/ukuh1r8-86980398/Rails7%E3%81%8B%E3%82%89Active_Support%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%AEto_s%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%ABformat%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E

元記事を表示

Rspec WrongScopeError発生

Rspecでテストを走らせた際に発生した問題について、備忘録として投稿します。

## 発生した問題

“`
Failure/Error:
raise WrongScopeError,
“`#{name}` is not available from within an example (e.g. an ” \
“`it` block) or from constructs that run in the scope of an ” \
“example (e.g. `before`, `let`, etc). It is only available ” \
“on an example group (e.g. a `describe` or `context` block).”

`name` is not available from within an example (e.g. an `it` block) or from construct

元記事を表示

【React導入】既存のRailsアプリにReactを導入する

## はじめに
この記事では、既存のRailsアプリにReactを導入する方法についてまとめています。

環境構築段階からReactを導入する方法についての記事は多いですが、途中からReactを導入する記事は少ないため、私自身かなり苦労しました。同じように苦戦している方の助けになれば幸いです。

https://ja.react.dev/

## 環境/前提
– Ruby 3.2.3
– rails 7.1.3.4
– TaiwindCSS使用
– Docker環境
– 「**esbuild**」で開発を行っていること
– バックエンド(ruby、rails)のみで環境構築していること

## Webpackerについて

以前は「Webpacker」を使用するのが一般的でしたが、最近では「Import Maps」や「esbuild」、「Vite」などの新しいツールが推奨されています。Webpackerは廃止されたわけではないですが、公式では使わない方向にシフトしています。この点を押さえておくと良いでしょう。

既存のRailsアプリにReactを導入するための記事が少なく、ChatG

元記事を表示

i18nの設定がconfig.i18nにまとまってconfig.action_viewは非推奨となった

Rails6からRails7へアップデートした時に、このような警告が出るようになりました。

“`zsh:
DEPRECATION WARNING: action_view.raise_on_missing_translations is deprecated and will be removed in Rails 7.0. Set i18n.raise_on_missing_translations instead. Note that this new setting also affects how missing translations are handled in controllers.
“`

警告の内容は、i18n(国際化)の設定を`config.i18n`にまとめたため、今まで使用していた`config.action_view`の方は非推奨になるというものです。

環境設定の中でi18nの設定をしている場合は、このように変更すると警告が出ななります

“`diff_ruby
– config.action_view.raise_on_missing_tr

元記事を表示

範囲オブジェクト

# 範囲オブジェクトとは
範囲オブジェクトとは、「〇から〇まで」のような、値の範囲を表すオブジェクトのこと。

## 作成方法
1から10までの場合以下のように表す。
“`
a = 1..10
a.include?(10)
=> true
“`
include?メソッドで確認すると、10まで範囲に含まれていることがわかる。
10を含めたくない場合は、「.」の数を3つにすることで範囲を10未満にすることができる。
“`
a = 1…10
a.include?(10)
=> false
“`

# 使用例
〇以上〇以下や、〇以上〇未満を判定したい時は、不等号を使用するよりも、範囲オブジェクトを使用した方がシンプルに記述することができる。

“`
def number_of_people(num)
1 <= num && num < 10 end ``` ↓ ``` def number_of_people(num) (1...10).include?(num) end ```

元記事を表示

君の名は?(配列でよく見かけるこいつ→<<)

配列でよく見かけるこの子 `<<` ですが、ショベル演算子(shovel operator)と呼ぶそうです。 ※ChatGPTの解説と記事で使われたていた名前です。 日本語としては正確性には欠けるかもしれませんが、ひとまずこの名前で呼びたい。 外国の記事も添付してありますが”shovel operator”って呼んでるしまあセーフ 以下GPTによる解説 私が知りたかったのは1の配列の内容でした。 Rubyの「ショベル演算子(shovel operator)」、つまり`<<`演算子について詳しく解説します。この演算子は、複数の用途で使用される非常に便利な演算子です。以下に、各用途について具体的な例を交えて説明します。 ### 1. 配列への要素追加 `<<`演算子は、配列の末尾に新しい要素を追加するために使用されます。これは配列を変更する破壊的な操作です。 ### 例: ```ruby array = [1, 2, 3] array << 4 puts array.inspect # => [1, 2, 3, 4]
“`

この例では、配列`array`に`4`を追加し

元記事を表示

OTHERカテゴリの最新記事