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

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

devise 退会済みユーザー ログイン実行「すでにログインしています。」と出る件

# はじめに
ポートフォリオの最終チェックしていると、退会済みユーザーがログインできてしまうことが発覚😱
前まではちゃんとブロックできてたのに…
ということで解決したのでアウトプットしておきます✍️

# 現象

退会済みのユーザー情報でログインを実行するとこのようになります

![スクリーンショット 2024-07-17 16.13.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/385d0bf0-f709-8173-20d1-2e212d1c64b9.png)

“`sessions_controllre.rb
# frozen_string_literal: true

class Public::SessionsController < Devise::SessionsController before_action :user_status, only: [:create] : private # アクティブ判断メソッド def user_status

元記事を表示

日にちの始まりを取得する方法

「前日に」いいねされた記事を取得するという実装をするために、日にちの始まりと終わりを簡単に取得する方法を調べたので、備忘録として残しておきます!
## 日にちの始まりを取得する方法
“`ruby
time = Time.current
=> Wed, 17 Jul 2024 13:58:08.985319000 JST +09:00
time.beginning_of_day
=> Wed, 17 Jul 2024 00:00:00.000000000 JST +09:00
“`
他にも日にちを取得する便利なメソッドが多数用意されていました。
“`ruby
# 日にちの終わりを取得する
>> time.end_of_day
=> Wed, 17 Jul 2024 23:59:59.999999999 JST +09:00

# 日にちの年の始まりを取得する
>> time.beginning_of_year
=> Mon, 01 Jan 2024 00:00:00.000000000 JST +09:00

# 日にちの週の始まりを取得する
>> time.beginning_o

元記事を表示

【Rails7】Maps JavaScript APIで住所オートコンプリート入力の新規投稿機能を実装する

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約4ヶ月が経過しました🐣

## 概要
だいぶ期間が空いてしまいましたが、前回の
[【Rails7】Maps JavaScript APIを使って投稿を地図上にピンで表示する](https://qiita.com/lemonade_37/items/51ca0f18fd9da842bb00)
の続きとして、位置情報を含んだMapと連動できる新規投稿機能を実装していきます。

### 完成イメージ図

![qiita02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471604/3b8b4830-58d7-7454-715e-11a980d9cbdf.gif)

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

元記事を表示

チェリー本7.7.6

# チェリー本7.7.6一部解説

Ruby のメソッド定義は式になっていて、 メソッド定義が完了するとメソッド名をシンボルとして返します。
これを利用すると、メソッド定義が正常に行われたかどうかを確認したり、メソッド名を後で利用することができます。
“`
def foo
‘foo’
end
#=> :foo
“`
この知識を応用すると、 次のようにメソッド定義と同時にそのメソッドをprivateメソッドにすることが可能です。

“`
class User

private def foo
 ’foo’
end

end

user = User.new
user.foo #=> private method ‘foo’ called for # (NoMethodError)
“`
・流れ
①fooメソッドが定義される
②シンボル:fooは、その返り値となる
③:fooがprivateメソッドの引数となるため、foo メソッドは private として扱われる。

元記事を表示

【Ruby】エイリアスメソッドについてのまとめ_Ruby Silver対策

Ruby Silverの勉強をする中で同じ機能のメソッドの問題が結構あったので、
この機会にしっかりとまとめようと思います。

# Arrayクラス

## map, collect
各要素に処理を施す(非破壊)

“`ruby
p (1..3).map {|n| n * 3 } # => [3, 6, 9]
p (1..3).collect {|n| n * 3 } # => [3, 6, 9]
“`

## map!, collect!
map,collecgtの破壊版
“`ruby
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.collect! { |item| item * 3 }
p array # => [3, 6, 9, 12, 15, 18, 21, 24, 27]
“`

“`ruby
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.map! { |item| item * 3 }
p array # => [3, 6, 9, 12, 15, 18, 21, 24, 27]
“`

元記事を表示

RspecのBigQuery操作でSignet::AuthorizationError

## 事象
– rspecで`bigquery-emulator`に対してテストを実行した時に、以下のエラーが発生しました。
“`
Signet::AuthorizationError:
Authorization failed. Server message:
{“error”:”invalid_grant”,”error_description”:”Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values in the JWT claim.”}
“`

## 原因
– わかってしまえば簡単なのですが、rspecで`travel_to`使って時間を止めてテストしたことです。
“`ruby
travel_to Time.zone.local(2027, 7, 10) do
  # 省略
end
“`

– BigQueryはJWT認証を使っているみたいで、`iat`,`exp`に時刻が入

元記事を表示

【2024年版】Ruby技術者認定試験に合格してみて【Gold編】

## はじめに

2024 年の 6 月 27 日に**Ruby Association Certified Ruby Programmer Gold version 3**(~~正式名称が長い~~)に合格したので、どう勉強をしたのか実際に役立ったのか等を
**Silver 編**に続く**Gold 編**を紹介します。

内容は以下の記事と一部重複します。

https://qiita.com/kim_t0814/items/8e8712c6b55d0fe22009

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

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

### Gold

Ruby の文法知識、Ruby のクラスとオブジェクト、標準ライブラリの知識について、基本的な技術レベルを持つことを認定します。

https://www.ruby.or.jp/ja/certification/examination/

ちなみに、Gold の認定条件は

元記事を表示

RSpec入門:基本構文と使い方を紹介

# はじめに

こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。

現在、私はRSpecを勉強中で、学んだことを共有したいと思いこの記事を書きました。この記事では、RSpecの基本的な書き方を紹介し、具体的な例を通して理解を深めていきます。
初心者でも理解しやすいように書いたのでRSpecを勉強したい際はぜひ参考にしてください。

## 目次
1. [RSpecとは?](#rspecとは)
1. [基本的なRSpecの書き方](#基本的なrspecの書き方)
・[describe、context、itの使い方](#describecontextitの使い方)
・[最初のテストケースの例](#最初のテストケースの例)
3. [よく使われるマッチャ(Matchers)](#よく使われるマッチャmatchers)
・[eq、be、include、matchなどの基本的なマッチャ](#eqbeincludematchなどの基本的なマッチャ)
・[複数のマッチャを使用した例](#複数のマッチャを使用した例)
4. [最後に](#最後に)

## RSpecとは?

元記事を表示

[Rails] any?メソッドとは?をまとめた

# any? メソッドとは
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/any=3f.html

配列の要素が、全て**偽**の場合、`false`を返します。
一つでも**真**の要素があれば、`true`を返すメソッドになります。

# 例

“`rb
p [nil, true, 99].any? # => true
p [nil, false, 99].any? # => false
“`

# ブロックを使用する
ブロックを伴う場合は、各要素に評価され、全て**偽**の場合、`false`を返します。
評価の時点で真を返した時点で、`true`を返します。

“`rb
p [5, 10].any? {|v| v > 20 } # => false
p [5, 10].any? {|v| v > 6 } # => true
“`

# 引数を使用する
引数を渡して、処理することもできます。

ブロックと同じで、引数で渡したオブジェクトと各要素が一致するか評価され、全て**偽**の場合、`false`を

元記事を表示

Rubyでキーワードによって処理を変えたい時、そのキーワードは文字列ではなくシンボルで表現しよう

以下のように特定のキーワードによって処理を変えたいメソッドがあったとします。

“`ruby
# time_of_day(時間帯)によって適切な挨拶を返すメソッド
# time_of_dayの値は morning, night, daytime の3つ
# morningの場合はgood morning
# nightの場合はgoodbye
# daytimeの場合はhello を返す
#
def greeting(time_of_day)
case time_of_day
when ‘morning’
‘Good morning’
when ‘night’
‘Goodbye’
when ‘daytime’
‘Hello’
else
‘Invalid time of day’
end
end

# メソッドのテスト
puts greeting(‘morning’) # => Good morning
puts greeting(‘night’) # => Goodbye
puts greeting(‘daytime’

元記事を表示

Rails6.0 → 6.1にバージョンアップする手順

# はじめに
Railsのバージョンアップの対応を皆さん行ったことはありますでしょうか?
今回は、6.0から6.1へバージョンアップを行ったので、**対応の進め方**を主にまとめています。

参考になれば、幸いです。

:::note info
本記事の対象
– バージョンアップ対応の進め方が知りたい人
:::

:::note warn
本記事の対象外
– 具体的な対応策が知りたい人
:::

早速ですが、今回どのような手順で進めたのか、以下にまとめました。

# 手順
1. バージョンアップの進め方確認
1. ゴールの設定
1. テスト方法の確認
1. バージョンアップ作業
1. テスト準備
1. テスト実施
1. 本番反映

では、一つずつ詳細を見ていきましょう。

## バージョンアップの進め方確認
まずは全体感をしっかり掴みましょう。個人的には、公式と以下の記事がおすすめです。

https://railsguides.jp/upgrading_ruby_on_rails.html

https://qiita.com/jnchito/items/0ee47108972a0e

元記事を表示

AWS のLinux内にRubyをインストール

解決したいこと

AWS のLinux内にRubyをインストールをしたい

rubyのインストール時のエラーが発生し(ここは一旦解決)、
LinuxにSSH接続でログイン後、rubyのダウンロード中にSSH接続がpipe outしてしまうところで止まっています…

解決方法を教えて下さい。

試したこと

エラーの部分は、
tmpファイル内の容量不足だったので、容量増強でエラー解消

使用したコマンド
TMPDIR=”${PWD}/tmp” rbenv install 3.1.2

SSH接続のpipe out部分

[ec2-user@ip-10-0-0-6 ~]{PWD}/tmp” rbenv install 3.1.2
==> Downloading ruby-3.1.2.tar.gz…
-> curl -q -fL -o ruby-3.1.2.tar.gz https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
% Total % Received % Xferd Average Speed Time Ti

元記事を表示

レンダリングを減らしたい

## はじめに
そこまでログを意識していなければ、レンダリングがログに出ていても見過ごしてしまうと思います。
ただ、レンダリングはパフォーマンスに影響するので改善できるならしておきたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/794432a8-6c4f-77b5-ee7f-2d7a2cc50bcf.png)

今回はレンダリングを減らす方法を試してみたいと思います。

## レンダリングを減らす方法
railsでレンダリングを減らす方法は、collectionです。
collectionを使って、同じレンダリングを再利用してあげれば良いです。
今回はcollectionのやり方で詰まったところもあったのでその部分も紹介していきます。

### 部分テンプレートの部分をひとつにまとめる
scaffoldでusersテーブルと関連ファイルを作成します。
`index.html.erb`はこのように記載されていると思います。
`<%= render user %>`

元記事を表示

SQLクエリをview側に表示してみる

## はじめに
各ページで発行されたSQLクエリはログを見れば分かります。
ただ、そのログをview側で確認してみたいといったとき、やり方を知らなかったので今回やってみました。

## SQLクエリをview側に表示する
やり方は考えれば色々あると思いますが、今回は`ActiveSupport`を使用してログを表示してみたいと思います。

### `application_controller.rb`にインスタンス変数を定義

“`rb:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :setup_query_logs private def setup_query_logs @query_logs = [] ActiveSupport::Notifications.subscribe "sql.active_record" do |name, started, finished, u

元記事を表示

Ruby3.2をインストールするとき、libyamlが必要

## はじめに
Ruby3.2をインストールしようとした時にエラーが発生したので、解消方法をまとめていきます。

## 問題
“`sh
$ rbenv install 3.2.0

BUILD FAILED
“`

## 解決方法
Ruby3.2からlibyamlやlibffiのライブラリのソースコードの同梱が廃止されています。
libyamlをyumなどでインストール後、Rubyをインストールすると正常にインストールできます。

“`sh
$ yum install libyaml-devel
“`

## 参考
https://zenn.dev/fuuukeee3/articles/22caeb537cf1a6

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

元記事を表示

Everyday Rails – RSpecによるRailsテスト入門を読んだ

# はじめに
今回railsの学習に伴いテストフレームワークの学習として
Everyday Railsを読みましたのでそのアウトプットとして本記事を作成しました。
# 学んだこと
* **意味のあるテストデータの作成**
* Factory Bot
* テストにおけるサンプルデータを作成するためのgem
* “`bin/rails g factory_bot:model モデル名“`でファクトリのファイルを作成
* 以下ファクトリの構成例。用意するとスペック全体でファクトリが使用可能になる。
“`
FactoryBot.definedo
factory :モデル名 do
//データを囲む中括弧({})は必須
カラム1 { “test1” }
カラム2 { true }
カラム3 { 1234 }
end
end
“`
* “`FactoryBot.build(:モデル)“`のような

元記事を表示

【紹介】「認可」を実装する方法3選_Rails

# はじめに
「認証」は、多くのRailsアプリケーションで、`devise`が使用されているかと思います。
ただ、「認可」に関しては、皆さんどのように実装されていますでしょうか?

今回実装するにあたって、考えた方法を3つご紹介いたします。

:::note warn
「認証」と「認可」の違いに関しては、本記事では解説いたしません。
詳しくは、以下の記事が参考になりますので、ご覧ください。
:::

今さら聞けない認証と認可の違い ゼロトラストセキュリティ対策

# 3選の紹介
## ① Pundit ・ cancancan
https://github.com/varvet/pundit

https://github.com/CanCanCommunity/cancancan

上記2つとも、認可周りをサポートしてくれるgemです。
ライブラリを使用すると、実装が楽になるのはとても良いですね。

昔からあるイメージですが

元記事を表示

HackTheBox Perfection WriteUp

今回はHackTheBoxのEasyマシン「Perfection」です!
マシンの名前からはあまりどのようなものか想像できませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/e9a8e99b-7b93-eb3e-25f7-11ee49768c08.png)

グラフはいつものEasyマシンと変わらない感じですね。
評価も高いので、面白そうです!サクッと攻略していきましょう~!

HackTheBoxって何?という方は下記の記事を見てみてください!一緒にハッキングしましょう〜!

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!

https://qiita.com/Perplex/items/30f949fe261f56af7476

## Perfection

### 列挙

それでは

元記事を表示

【初心者向け】RailsアプリをRenderでデプロイする手順(mac)

## 背景
今回はRailsアプリを作ってデプロイする上で、
2024年7月時点において最も簡単かつモダンにデプロイする手順についてです:sunglasses:

当方、駆け出しエンジニアですがrailsデプロイに苦しんだため、
同じくデプロイで苦しんでおられる方の一助となればと思います:grinning:

webアプリは有料プラン(starter:月$7~)でないと動作が不安定なのでご注意ください。Freeプランだとエラーが出る場合があります。Freeで失敗したら有料プランの移行を検討してください:hushed:
データベースは90日まで無料で運用できますが、90日でデータベースは削除されるので継続運用される場合は有料プラン(starter:月$7~)に移行をお願いします:bow:

## 手順
大きく以下の流れで進行します。

1.PC上のアプリ内準備
2.Railsアプリのデプロイ
3.データベースのデプロイ
4.Railsアプリとデータベース接続

## PC上のアプリ内での準備

### Gemfileの編集

以下のような変更を加えてください。

“`diff_c:

元記事を表示

Ruby内部で学ぶ10進数変換処理

## Rubyでの10進数変換処理

Rubyでは、`to_i` メソッドに基底(2進数の場合は、2)を引数に指定して、実行することにより10進数に変換が出来ます。

“`ruby
irb(main):001> “100”.to_i(2)
=> 4
“`

右桁から計算するのが一番直感的ですが、

“`ruby

target_str = ‘101’
reversed_target_str = target_str.reverse!
base = 2
total_decimal = 0

reversed_target_str.each_char.with_index do |target_char, index|
target_int = target_char.to_i

decimal_value = target_int * (base ** index)

total_decimal += decimal_value
end
“`

Ruby内部ではどのように計算されているのでしょうか。

## Ru

元記事を表示

OTHERカテゴリの最新記事