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

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

Railsでのユーザー認証の実装とbcryptの活用方法

## 流れ

### 1. Userのモデルとコントローラーを準備する

“`ruby
rails g model user username:string password_digest:string
“`

“`ruby
rails g controller users
“`

“`ruby
rails db:migrate
“`

以下のファイルが生成されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/b76bc216-0e70-8824-13e6-2aa70659953d.png)

`users_controller.rb`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/38a56c5c-bb43-6430-b46c-4720f1c0165c.png)
`user.rb`

`user.rb` に以下のメソッドを追加します:

元記事を表示

[Ruby 3.1.4] 関数の可変長引数のに *array 展開で SystemStackError

[SystemStackError]:https://docs.ruby-lang.org/ja/latest/class/SystemStackError.html
[ArgumentError]:https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html
[NoMethodError]:https://docs.ruby-lang.org/ja/latest/class/NoMethodError.html
[組み込みライブラリ]:https://docs.ruby-lang.org/ja/latest/library/_builtin.html
[Hash#values_at]:https://docs.ruby-lang.org/ja/latest/method/Hash/i/values_at.html
[ruby 3.3 – ruby/hash.c L:2710]:https://github.com/ruby/ruby/blob/ruby_3_3/hash.c#L2710

:::note warn
この記

元記事を表示

Rubyで配列内のハッシュで同じキーの値を合算(inject、merge)

ポートフォリオ作成中に、「同一のキーを合算して、値を求める」必要があり、実装に時間を要したため、備忘録として投稿します。

## 実現したいこと

“`ruby
data = [
{ water: 9, retort_food: 3, mask: 3 },
{ water: 10, retort_food: 4, mask: 4 },
{ water: 11, retort_food: 5, mask: 5 }
]

# 上記のデータで同じキーのものを合算
# data = { water: 30, retort_food: 12, mask: 12 }
“`

## 完成形
“`
merge_data = data.inject do |old_data, new_data|
old_data.merge(new_data) do |_key, old_val, new_val|
old_val + new_val
end
end
“`
## 使用したメソッド

### inject
> 配列等の要素を一つずつ繰り返して、ブロック内で処理する

元記事を表示

CORS設定でOPTIONSリクエストとヘッダが取得できない

実装中に対応した内容を備忘録として投稿します。

## 発生した問題

フロントエンド(Nuxt.js)から、バックエンド(Rails)に対して、APIリクエストを投げるとCORSエラーが発生。
“`
Access to XMLHttpRequest at ‘http://localhost:3000/users/1’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`
## 原因

– ブラウザ側のセキュリティが強化されていて、意図しない挙動を防ぐために実装されている。
– もし仮に、ハッキングされるなどすると、
– フロントエンドとバックエンドでサーバーやドメインが別れている場合に、悪意のあるドメインにすり替えるなどができてしまう。
– 会員制サイトでログインするときに、ログインIDやパスワードを盗むことができてしまう。

元記事を表示

rails sが起動しなくなった

`rails s`が動かない現象に遭遇したので、備忘録として投稿します。

## 発生した問題

下記エラーにより、`rails s`が起動しなくなった。

“`
% rails s
=> Booting Puma
=> Rails 6.1.5 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
bin/rails:7: warning: already initialized constant APP_PATH
/Users/xxxx/workspace/app/bin/rails:7: warning: previous definition of APP_PATH was here
The most common rails commands are:
generate Generate new code (short-cut alias: “g”)
console Start the Rails co

元記事を表示

RailsのHostAuthorizationによってELBのヘルスチェックがhealthyにならない

ポートフォリオをデプロイする際に発生した問題について、備忘録として投稿します。

## 発生した問題

Rails6 + AWSで下記の構成のようなアプリを開発していました。

Railsの`HostAuthorization`を利用し、`/api/health_check`というパスでALBからのヘルスチェックを行おうとしました。
しかし、Railsが403エラーを返し、ヘルスチェックが失敗してしまいました。

## 原因

Railsの設定は下記のようになっていました。
![](https://raw.githubusercontent.com/nomikazu-x/post-zenn-qiita/master/images/prettier-plugin-astro-organize-imports/alb-esc-nginx-rails-rds.jpg)

“`ruby:environments/production.rb
config.hosts << 'base_domain.com' ``` 原因は、 「ヘルスチェック時のホスト名がbase_domain.comでな

元記事を表示

Rubyでデザインパターン (5) Singletonパターン

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

## Singletonパターンとは
Singletonパターンとは、特定のクラスがインスタンスを一つのみしか生成しないことを保証するためのデザインパターンです。

詳しくはこちらをご覧ください。

https://qiita.com/shoheiyokoyama/items/c16fd547a77773c0ccc1

## Rubyでのコード例
単純な実装を行うと、以下のようになります。

“`rb
class Singleton
private_class_method :new

class << self def instance @instance ||= new end end end puts Singleton.instance == Singleton.instance ``` ```:出力結果 true ``` また、Rubyには`Singleton`モジュールがある

元記事を表示

Ruby, Ruby on Railsのselectメソッドについて

### 読んで欲しい人

– selectメソッドがわからない人
– 過去の自分

### 動作環境

– ruby 3.3.0
– Rails 7.1.3.3

### selectとは

– Enumerableモジュールの一部
– 文字列、配列、ハッシュに対して検索を行えるメソッド

**Enumerableモジュールとは**

– 繰り返し処理を行うためのモジュール

Enumerableモジュールに定義されているメソッドは全て`each`を用いて定義されてる。

`each`を基盤として、より複雑な操作を簡単に行うための道具箱がEnumerableモジュールという感じ。

### モデルに使う時

前提:下記のusersテーブルがあるとする

|id |name |email |
|—|—|—|
|1 |jojo |jojo@example.com |
|2 |dio |dio@example.com |
|3 |hoge |hoge@example.com |

普通に情報を取得すると下記

“`ruby
User.all

# 発行さ

元記事を表示

カラム名.present?の省略方法

下の記事の内容は正しくありません。
~~カラム名.present?の省略方法がActiveRecordで元から用意されていたので、自分用に残しておきます。~~

“`ruby
user = User.first
user.name? # user.name.present? と同意
# => true / false
“`

~~rails cの補完機能を使っていると見つけました。
このような元から用意されてある動的なメソッドは、まだまだたくさんあるみたいなので、もっと勉強していこうと思います!~~

元記事を表示

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

元記事を表示

【Ruby】between?でtime.zoneを範囲指定として渡す際の注意点

Rubyの`between?()`の返り値が想定と違かった原因をメモ。

“`Ruby:
now = Time.zone.now
start_time = Time.zone.parse(“2024/07/01 12:00”)
end_time = Time.zone.parse(“2024/07/31 23:59”)

if now.between?(start_time, end_time)
~…
end
“`
データとしてはこんな感じ。
`now`が`2024/07/31 23:59`になったと仮定して動作を確認していたら
条件がfalseになってif文に入らなかった。
## 原因
`end_time`をparseしたときに秒数を指定していないので、
`now`が`23:59:00`以降になると分岐条件がfalseになってif文に入らない。
## 解決策
終了時刻は秒数を指定する。
“`Ruby:
end_time = Time.zone.parse(“2024/07/31 23:59”)

end_time = Time.zone.parse(“2024/07/

元記事を表示

【オブジェクト指向】デザインパターンについて

## デザインパターンとは
JavaやRubyなどオブジェクト指向言語において、よく使われる設計をパターン化したものです。
これを用いることでプログラムが再利用しやすくなり、読みやすいものとなります。

## デザインパターンの種類
「GoF」のデザインパターンがあり、全23種の設計パターンに分けられており、大カテゴリーに分けると
「生産」「構造」「振る舞い」の3つに分けることができます。

+ 生産
+ [Abstract Factory](#abstract-factory)
+ [Builder](#builder)
+ [Factory Method](#factory-method)
+ [Prototype](#prototype)
+ [Singleton](#singleton)
+ 構造
+ [Adapter](#adapter)
+ [Bridge](#bridge)
+ [Composite](#composite)
+ [Decorator](#decorator)
+ [Facade](#facade)
+ [F

元記事を表示

[Rails] 単一ファイルのRailsアプリケーションを作ってみた

# はじめに

週刊Railsウォッチ: Ruby on Jets 6.0がRailsをサポートほか(20240620後編)

上記の記事で、気になる箇所がありました。

**1ファイルで動くRailsアプリケーションを作った**

これを見た時の自分は、「え?そんなことできるの?」と思いました。

https://greg.molnar.io/blog/a-single-file-rails-application/

上記記事の記載があったので、参考にして自分も作ってみました。
その内容をアウトプットいたします。

# 実装
## 環境
– Ruby:3.2.2

お好きなディレクトリで、`app.ru`を作成します。

“`rb:app.ru
# frozen_string_literal: true
require ‘bundler/inline’

gemfile(true) do
source ‘https://rubygems.org’

gem ‘rails’, ‘7.0.4’
gem ‘sqlite3’, ‘~> 1.4’
gem ‘puma’
en

元記事を表示

RubyKaigi2024初参加者レポート

初めまして、Qiitaに初投稿させていただきます。株式会社キネカでWebエンジニアをやらせていただております。nikeです。
## はじめに
今回初めて、弊社のメンバーとRubyKaigiに参加させていただいたので、振り返りも兼ねてレポートとしてまとめます。恥ずかしながら技術的な内容は私の力不足もあり、ほとんどできませんが、今後初めてRubyKaigiに参加する人の参考になればなと思い書かせていただきます。

https://rubykaigi.org/2024/
## 事前に準備したこと
#### Rubyコミッターの松田明さんによる「初心者のための RubyKaigi 入門 」
私が技術カンファレンス自体の参加が初めてなこともあり、かなり不安だったのですが、こちらを一読してからRubyKaigiにかなり臨みやすくなったなと感じています。私と同じようにRubyKaigi初参加を考えてる方是非!
RubyKaigi自体の目的、参加者の心構え、に関してかなり簡潔にまとめてくださっています。

https://speakerdeck.com/a_matsuda/rubykaigi-int

元記事を表示

RubyXLで利用できる罫線の種類を調べる

## 環境
Ubuntu 20.4
Ruby 2.6
Rails 5.2

## はじめに

Excelファイルに対し、読み取りと書き込みの両方ができる、RubyXLというgemがあります。このgemのchange_borderメソッドを利用して、Excelのセルに罫線を引くことができます。このメソッドで使うことができる、パラメータと罫線の種類について調べてみました。

## change_borderの使い方

change_borderの使い方は公式サイトを見れば載っています。

公式サイト
https://github.com/weshatheleopard/rubyXL?tab=readme-ov-file#changing-borders-

“`
# Possible weights: hairline, thin, medium, thick
# Possible “directions”: top, bottom, left, right, diagonal
worksheet.sheet_data[0][0].change_border(:top, ‘thin’)

元記事を表示

erbからslimに変換する際の`File.exists?` メソッド使用についての解決方法

# はじめに

erbからslimに変換しようとしてエラーで詰まって調べてあまり有用な記事がなかったため
作成することにします(自分見直し用でもあります!)

# 起きたこと

dockerコンテナ内で

“`bash
erb2slim app/views/users/ app/views/users/ -d
“`
をしてapp/views/users/内のerbファイルを一括でslimファイルに変換しようとしたところ
“`
NoMethodError: undefined method `exists?’ for File:Class
Use –trace for backtrace.
“`
とエラーが出て、できなかったので
“`bash
erb2slim app/views/users/ app/views/users/ -d –trace
“`
–traceオプションをつけてエラーが起きているファイルを特定したところ
“`
/usr/local/bundle/gems/html2slim-0.2.0/lib/html2slim/converter.rb:1

元記事を表示

【2024年6月】Rails7をWindows上で環境構築する方法

「Railsをインストールできない」

RailsはWebアプリ開発フレームワークで初心者にもわかりやすいと言われます。

しかし、環境構築で挫折する人が多いのも現状です。

今回はRailsをWindows11で開発できるセットアップを行います。

せっかく始めるのに、何もできないまま終わりたくないですよね。

動画でサポートしていきます。

YouTubeを活用してぜひ始めてみてください。

結論は、WSL2を使いましょう。

# YouTubeでの解説-2024年6月24日投稿