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

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

Rails7.1、ruby3.34を詰まらずインストールしたい人へ

rubyのインストール中にライブラリ不足によるコンパイルエラーが複数回発生し、解消したら次のエラー、それも解消したらまた次の・・・のように無駄に時間がかかったので、スムーズにインストールできるようにまとめてみました。

## 環境
WSL(Ubuntu 22.04.4 LTS)

## 手順

### 必要なライブラリをインストール
“`console
sudo apt update -y
sudo apt upgrade -y
sudo apt install build-essential -y
sudo apt install -y libssl-dev libreadline-dev zlib1g-dev libyaml-dev libz-dev libffi-dev
“`
### rbenvとrubyをインストール
“`console
# rbenvをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘

元記事を表示

Ruby技術者認定試験に合格してみて【Silver編】

## はじめに
2024年の6月27日に**Ruby Association Certified Ruby Programmer Gold version 3**(以下「Ruby Gold」)に合格しましたので、どのように勉強したのか、実際に役立ったのか等を**Silver編**と**Gold編**の二つに分けて記事にしようと思います。
Silverは90点で合格しました。

![スクリーンショット 2024-07-08 21.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636995/3ea1d68e-c013-4d17-1e75-c222c1cef8a5.png)

## Ruby技術者認定試験とは

Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。

### Silver
Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基

元記事を表示

【DP】動的計画法をRubyで学ぶ

# はじめに
競技プログラミング的なものに少し手を付け始めている中、解けそうで解きにくい(工夫orゴリ押しでなんとか解けるような)カテゴリーの問題があった。どうやら、そいつは***DP***というアルゴリズムを用いると解きやすいようで、競プロ初心者がブチ当たる壁でもあるらしい。調べてみると難しそうなのと、Rubyを用いた参考例があまり見当たらないので、本記事にアウトプットしながら少しずつ理解を深めていく。

# DPとは
動的計画法(***Dynamic Programming***)

https://ja.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E8%A8%88%E7%94%BB%E6%B3%95
>対象となる問題を複数の部分問題に分割し、部分問題の計算結果の記録を利用して全体の問題を解く手法を総称してこう呼ぶ。

https://zenn.dev/sena21/articles/d64aa8b5d10e13
>動的計画法(Dynamic Programming)は、複雑な問題をよりシンプルな部分問題に分割し、それぞれの部分問題の解を再利用するこ

元記事を表示

Rails view helperとテストのリファクタリング:モックをcode smellと感じること

## はじめに

自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaも頑張り始めました。

## 先日のview helperテストのリファクタリング

先日、[Railsのviewテストを書こう](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8)って記事を書いたが、[view helperおよびそのテストのコード](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8#現状の並べ替えのステートによって並べ替え矢印の表示を変えるヘルパー)があまりイケてなかった。

そこで今日は、view helperテストのリファクタリングを一緒に考えていきたいと思う。

## 対象のコード

作ろうとしている`ordering_arrow` helperメソッドは、下記のようなテーブルの並べ替えに使う三角ボタンの箇所。

元記事を表示

RailsのCSRF保護について

今回は新規プロジェクトで実際に遭遇した**CSRF保護**について学んだことをまとめます。

## CSRFとは
CSRF(Cross-Site Request Forgery)を簡単に説明すると、悪意のあるユーザーがサーバーへのリクエストを捏造して正当なものに見せかけ、認証済みユーザーを装うという攻撃手法です。Railsでは、一意のトークンを生成して送信のたびに真正性を確認することでこの種の攻撃から保護します。
(引用サイト:https://techracho.bpsinc.jp/hachi8833/2021_11_26/46891)

これだけでは「なんのこっちゃ、、。」となるため噛み砕いて説明します。
もしかしたら一度は見たことあると思いますが、HTMLのheadタグに「= csrf_meta_tags」なんて見たことはありませんか?
※コードはslim形式になっています。

その「= csrf_meta_tags」が私たちが気づかないうちに、セキュリティーをかけていてくれました。

## 「= csrf_meta_tags」の役割
この記述の役割としては、サイトのHTMLに一意

元記事を表示

超初心者のための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

元記事を表示

OTHERカテゴリの最新記事