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

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

Railsで画像を保存する際のassets配下とpublic配下の違い

# Railsで画像を保存する際のassets配下とpublic配下の違い

Railsアプリケーションにおけるアセット管理は、画像、スタイルシート、JavaScriptなどの静的ファイルを効率的に扱うための重要な部分です。特に画像ファイルの配置には、`assets`ディレクトリと`public`ディレクトリの2つの主要な選択肢があります。これらの違いを理解することは、Rails開発において重要です。この記事では、`assets`ディレクトリと`public`ディレクトリの特徴と使い分けについて詳しく解説します。

## assets配下に画像を保存する

### assetsディレクトリの役割

#### 概要

`assets`ディレクトリは、Railsアセットパイプラインの一部として機能します。アセットパイプラインは、JavaScriptファイル、スタイルシート、画像などのアセットを効率的に管理し、配信するための仕組みです。

#### 特徴

– **プリコンパイル**: `assets`ディレクトリに置かれた画像は、本番環境へのデプロイ時にプリコンパイルされます。これにより、

元記事を表示

VSCodeでRailsのCtrl+Clickで参照元にいけない

# はじめに

仕事でRailsを最近書いているのですが、そこでこまったことをまとめておきます

# 問題

Railsを使っている上でモデルのメソッドなどにとびたいときがあります
そのときに**Ctrl + Click**で以前は参照元に飛んでいたのですが、いま拡張機能をいれてもその機能が使えませんでした

# 解決方法

最新のRubyの拡張はその機能が使えなくなっているそうです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/4f6c2308-89ce-e438-c6bd-2ca324f8e55d.png)

少し前の**非推奨**のバージョンであれば利用できるのでそちらをインストールしました

**Ctrl + p**でコマンド`ext install rebornix.Ruby`を実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8fca6fc0-

元記事を表示

Rubyで、Gem::FilePermissionErrorが表示された時の対処

久々にRubyを触っていると、gem install minitestで権限エラーになりました。
“`
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`
調べてみると、原因はシステムのRubyが使われているから、
権限エラーになっているとのことでした。
“`
% which ruby
/usr/bin/ruby
“`
rbenvのRubyが使われる設定になっていません。
.zshrc(bashの人は.bashrc)に、以下の記述を入れました。
“`
% vi ~/.zshrc
“`
“`
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval “$(rbenv init -)”
“`
自分のユーザのhomeパス + rbenvのRubyパスが

元記事を表示

【Ruby】Class&インスタンスの理解と活用方法

# 【Ruby】Classとインスタンスの理解と活用方法

Rubyプログラミングにおいて、クラスとインスタンスは非常に重要な概念です。クラスはオブジェクトの設計図のようなもので、インスタンスはその設計図に基づいて作成された具体的なオブジェクトを指します。この記事では、Rubyにおけるクラスとインスタンスの基本的な使い方を詳しく解説していきます。

## クラスの定義方法

### クラスの基本構造

“`ruby
class クラス名
# クラスの内容
end
“`

Rubyでは、クラス名は大文字で始める必要があります。クラス内にはメソッドや変数を定義し、オブジェクトの振る舞いや状態を定義します。

### インスタンス変数とattr_accessor

“`ruby
class クラス名
attr_accessor :インスタンス変数名
end
“`

`attr_accessor`は、インスタンス変数のゲッターとセッターを自動的に定義するメソッドです。これにより、インスタンス変数へのアクセスや変更が簡単になります。

### メソッド

“`ruby
clas

元記事を表示

Sporockets::FileNotFoundのエラー解決方法

# Sporockets::FileNotFoundのエラー解決方法

Ruby on railsでアプリを作成中にエラーが出てきたので
原因と対処法を書いていきます。

## なぜエラーが出たのか?
gemを導入してターミナルで
`bundle install`
を実行した後に
localhost:3000/
でブラウザを開こうとしたらエラーが出ました。

## 対処法

ターミナルで
Ctrl+CでRailsサーバーを切り、再度`rails s`を実行する。

gemをインストールした後は
サーバーの再起動を徹底します!

元記事を表示

[Ruby]シンボルとは何か。文字列との違いもはっきりさせたい。

ハッシュでよく使われるシンボルですが、ハッシュ以外でシンボルとシングルクオートが並んでいるコードを見た時、なぜ違う書き方をしているのか理解できないことがありました。
私にはどちらも同じものに見えており「そこ、シングルクオートで書いてしまえばいいのでは?」と思ったからです。
しかし、実際は**文字列に見えるようでシンボルと文字列は異なるものである**ということを知りました。
そこで、シンボルについての理解を深めるために、改めてまとめてみようと思いました。

## シンボルとは
“`
# シンボルは:strを指す
str = :str
“`
Rubyのリファレンスマニュアルには以下のように説明されています。
>シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。

>Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前’を整数で管理しています。これは名前を直接文字列として処理するよりも 速度面で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボルです。(中略)シンボルは、ソース上では文字列のように見え、内部では整数

元記事を表示

[Ruby] 委譲(def_delegators)を理解する

Rubyには`def_delegators`というメソッド委譲と呼ばれる処理を行うためのクラスメソッドが定義されています。ちなみに、RailsのActiveSupportにも`delegate`という同じようなメソッドがあります。

メソッド委譲を使うと、クラス外で定義されているメソッドを、あたかもインスタンスメソッドのように呼び出すことができるようになります。

“`ruby
class Person
attr_accessor :name
attr_accessor :age
end

class Staff
attr_accessor :person
def_delegators :person, :name, :age
end

p = Person.new
p.name = “Taro”
p.age = 20

s = Staff.new
s.person = p

pp s.name # => Taro
“`

## コードリーディング

まずは、`delegate`メソッドは次のように定義されています。

“`ruby:forward

元記事を表示

【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話

## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。今回は実務で「おっ、これいいじゃん」と思ったちょっとしたリファクタリングになります。

例として今回は東海オンエアのメンバーからメンバーカラーを返すと言うのを例にしました。

## if文をcase文に

一番条件分岐でオーソドックスなif文で書くと

“`ruby:
member = “ゆめまる”

if member == “てつや”
“オレンジ”
elsif member == “りょう”
“ブルー”
elsif member == “しばゆー”
“イエロー”
elsif member == “ゆめまる”
“ピンク”
elsif member == “虫眼鏡”
“ブラウン”
elsif member == “としみつ”
“グリーン”
end
“`
今回は`ゆめまる`なので`ピンク`が表示されるでしょう。

続いてcase文を用いて書くと

“`ruby:
member = “ゆめまる”

case member
when

元記事を表示

診断機能(ポイント制)

Ruby on Rails でポイント制の診断機能を実装する。
おすすめのキャラクターの診断ができる機能を実装する。

## 開発環境
– Ruby3.0.6

## 診断設計
Question1からQuestion3に対して「はい」→キャプテンアメリカに+1
Question4からQuestion6に対して「はい」→アイアンマンに+1
Question7からQuestion9に対して「はい」→スパイダーマンに+1
Question10からQuestion12に対して「はい」→ソーに+1
計12問の「はい/いいえ」の質問に回答すると、「はい」の数が最も多いキャラクターが表示される。

## 手順
1. モデル
2. ルーティング
3. コントローラー
4. ビュー

## 1. モデル
question1からquestion12の計12個(データ型がinteger)のカラムを持つTestモデルを作成する。
“`cmd
rails g model Test question1:integer question2:integer …
“`

“`cmd
rails db:migr

元記事を表示

Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)

## はじめに

### 前回は

#### バリデーションメッセージのテンプレート化 として

https://qiita.com/tomoaki-kimura/items/57eb705ceeb228161fe6

– コンソール
– バリデーション
– errors
– バリデーションメッセージ

について学びました。

### 今回は

#### Enumや日時のバリデーション として

– Enumのバリデーション
– カスタムバリデーション
– 日時のバリデーション
– タイムゾーン

について学びます。

では、はじめていきましょう。

## 1. バリデーションヘルパー

### ヘルパー一覧

バリデーションに関しては、かなりの項目数になるので、一度Railsガイドに目を通してみると良いでしょう。

https://railsguides.jp/active_record_validations.html

今回は、Rails7以降で追加された便利なバリデーションを含めてやっていきましょう。

## 2. Enumのバリデーション

### validate: tru

元記事を表示

ターミナル上に時計を表示する

# やりたいこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179154/26fc6d54-aec5-9d15-b936-3478222f14cd.png)

ターミナル上に時計を表示したいこと(`date` コマンドではなくリアルタイムで更新される時計がほしいこと)が稀にあります。

# Rubyワンライナー

“`shell
ruby -e ‘loop { t = Time.now.strftime(“%T”); print “\b” * t.size ; print t; sleep 0.1}’
“`

`”\b”` で1文字削除できるので、適当な間隔で削除→時刻を再表示すればよろしい。

元記事を表示

【MySQL,Rails】アプリケーションの動作を改善したい(INDEX)

どうもこんにちは。

今回はRailsでデータベースにインデックスを貼る方法をまとめます。

# インデックスとは

インデックスは、データベース内のデータを迅速に検索するための構造です。データベースにおいて、特定の列(フィールド)に対してインデックスを作成することで、その列を使った検索やソートが高速になります。

# インデックスの構造

## データのポインター

インデックスは、実際のデータの場所を指し示すポインターの集まりです。これにより、データベースは全ての行を調べるのではなく、必要なデータを迅速に見つけることができます。

## 構造

多くのデータベースシステムでは、インデックスはB-Treeという特殊な木構造で作成されます。これにより、大量のデータの中からも効率的に検索が可能になります。

# インデックスの利点と欠点

## 利点

### 高速な検索

インデックスがあると、データベースは特定の値を持つ行を迅速に見つけることができます。
効率的なソートと集計: インデックスされた列を使ってデータをソートや集計する操作が高速になります。

## 欠点

### 追加の

元記事を表示

[初学者] sorceryでユーザー登録、ログイン・ログアウト機能の作成

### 目的
学んだことを忘れないように備忘録として残す
### sorceryとは?
SorceryはRuby on Railsで使用できる認証および認可のGem。これを使用することで、ユーザー認証、パスワードリセット、ユーザー管理などの一般的な認証および認可機能をアプリケーションに簡単に統合できる。
### gemとは?
gem は、Rubyプログラミング言語の拡張機能やライブラリをパッケージ化したもの。
RubyGemsを使用することで、他の開発者が書いたRubyライブラリやアプリケーションを簡単にインストールできる。
# sorceryの追加
gemファイルにsorceryを追加
“`ruby
gem ‘sorcery’
“`
### gemの反映
bundle installで追加したgemファイルを反映
“`ruby
bundle install
“`
# sorceryのセットアップ
### Sorcery gem用の設定ファイルと関連するファイルを生成
必要なファイルをプロジェクトに追加し、設定をカスタマイズできるようにする。
“`ruby
rails g s

元記事を表示

Ruby on Railsアップデート(Action Mailer/Active Storageの修正 他 2023-11-17)

## 引用元
https://world.hey.com/this.week.in.rails/action-mailer-bug-report-template-active-storage-fixes-and-more-6264430d

## 今週のトピック

### [word_wrapが空文字列を返すように修正](https://github.com/rails/rails/pull/50069)
[word_wrap](https://railsdoc.com/page/word_wrap)(指定された長さ以降の空白に改行を入れて出力するメソッド)が空の文字列を与えられたときに、nilの代わりに空の文字列を返すように修正された。

### [プレビュー処理時にバリアントを処理する](https://github.com/rails/rails/pull/50044)
[ActiveStorage::Preview#processed](https://api.rubyonrails.org/v7.0.8/classes/ActiveStorage/Preview.html)

元記事を表示

GPTが書いたコードをKernel#evalで動かす

# はじめに
最近Rubyを入門しています。
Rubyの特徴として挙げられる”メタプログラミング”を活かしたアプリを作成しました。

## `Kernel#eval`とは

Rubyの`eval`メソッドは、文字列として与えられたRubyコードを実行するために使用されます。これは、Pythonの`exec`やJavaScriptの`eval`など、他の言語における同様の機能に類似しています。

#### 基本的な使い方

“`ruby
code = “1 + 2”
result = eval(code)
puts result # 出力: 3
“`

上記の例では、`code`変数に格納された文字列がRubyの式として評価され、その結果が`result`変数に代入されます。

# つくったもの
[Github](https://github.com/daisuke0926dev/eval_generate_and_run)

![無題の動画 ‐ Clipchampで作成](https://github.com/daisuke0926dev/eval_generate_and_run

元記事を表示

Railsコールバックのchanged?って?

## きっかけ
「order_idが変わったらorder_statusの値を変更する」という実装でコールバックを使用した際に、
コールバックの挙動を理解できておらず躓いてしまったのでアウトプットとしてまとめてみました。

## ケース1
コールバック発火しない
“`ruby:order.rb
enum status: {
unchecked: 0,
checked: 1,
error: 3
}

after_update :order_status_reset, if: -> { order_id_changed? }

def order_status_reset
self.unchecked!
end
“`
### 原因
after_updateではorder_id_changed?に該当しない。

after_saveも同様だが、changed?は
現在の値と変更しようとしている値を検証するもの。

そのため、updateやsaveした後は
すでに変更しようとした値は保存されており、
changed?は発火しない

元記事を表示

ローカル環境でrails newする際に -d postgresql オプションでエラーが出る際の対処法 & PostgreSQLのインストール【Rails 7, Mac OS】

:::note warn
PostgreSQLがインストールされていないために発生するエラー対処の記事となります。PostgreSQLの使い方の記事ではありませんので、ご了承くださいませ。
:::

## はじめに
Railsのハンズオンや環境構築資料でよく見かける以下の rails new コマンド。
“`zsh
$ rails new test_app -d postgresql

# –database=postgresql と読み替えていただいて問題ありません。
“`

データベースオプションである、`-d postgresql` を指定することで、Railsと同時にPostgreSQLのセットアップをすることができます。※デフォルトはsqlite3が指定される。

しかし、ローカル環境にPostgreSQL自体をインストールしていない場合、pg gem(PostgreSQLのRubyライブラリ)のインストール中にエラーが発生する可能性がありますので、以下備忘録として、手順を残したいと思い記事にしてみました。

※ 現在プログラミングスクールに通っております。カリキュラム

元記事を表示

【Ruby on rails】Aws::S3::Errors::RequestTimeTooSkewed

# はじめに
プログラミングを勉強して3か月ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。

今回はオリジナルアプリにS3を導入した際に発生したエラーの対処法を共有したいと思います。
下記の記事を参考にさせていただきました。

https://zenn.dev/karaage0703/articles/47838858dd3107

# 今回のエラー内容
今回のエラーはS3導入後に画像を保存しようとした際に発生しました。
エラーの内容は、リクエストを行うクライアントとリクエストを受信するサーバーとの間の時間のズレに問題があることを示します。
[![Image from Gyazo](https://i.gyazo.com/31f3193a16ea29a8075139fadf75fe4a.png)](https://gyazo.com/31f3193a16ea29a8075139fadf75fe4a)
このエラー原因としては大きく2つ挙げられます。
1つ目は、AWS側の地域設定に誤りがあり、時刻がズレてしまっている。
2つ目は、システムの時間が合っていない。
今回

元記事を表示

【Rails】開発/本番環境で違う初期データ(seeds.rb)を入れる、データの入れ直し方法など

# はじめに

初のオリアプ開発で、開発環境でユーザー等のテスト用の初期データを大量に生成する必要があったのと、本番環境でもデモ用初期データを手動追加するのが面倒なので、何かいい方法はないかと考えてました。
というのも、私の今作っているアプリは複数のユーザーモデルやメインとなるデータモデルを前提としている機能が多いんですよね。
調べたらseed.rbを活用すると初期データを入れられるとのことで、ではやってみよう!となったのです。

## 前提

– Ruby 3.2.0
– Rails 7.0.8
– 本番環境はRender
– Renderにて既にデプロイが出来ていること

# seeds.rbファイルとは?
データベースに初期データを設定するために使用されるファイルです。
このファイルに記述されたコードは、rails db:seedコマンドを実行することで実行され、指定されたデータがデータベースに追加されます。

# ディレクトリ構造
元々は以下のようになっていると思います。
“`
db
├── migrate
├── seeds.rb
└── schema.rb

元記事を表示

リリース用pull requestの内容をラベルでグルーピングしてわかりやすくする

[git-pr-release](https://github.com/x-motemen/git-pr-release)というリリース用pull requestを作成してくれるGithubアクションがあるのですが、そこで使えるテンプレートに手を加えて気に入ったものが出来たので共有です。

気に入ったらぜひ使ってみてください。

テンプレートを適用して所定のブランチにマージすると、以下のようなpull requestが自動的に生成されます。

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198321/03a8f9b0-851e-2757-06ec-8f3bf2ec0b0b.png)

git-pr-releaseはデフォルト状態でも、更新内容を一覧化してくれるのですが、更新内容をラベルによってグルーピングする事で何が更新されたのか、よりわかりやすくなったと思います。

更新内容を振り分ける方法は以下の通りです。

– 新機能: `enhancement` ラベルをPRに付与
– 改善:

元記事を表示

OTHERカテゴリの最新記事