Ruby関連のことを調べてみた2022年04月09日

Ruby関連のことを調べてみた2022年04月09日

ロガーもどきを作る時のコツ

“`sample.rb
def put_log(message)
puts “#{`hostname`.chomp}:#{caller.first}:#{message}”
end

def method_a
put_log(‘メッセージ’)
end

method_a
“`

実行結果

“`
LAPTOP-5EMLK46H:sample.rb:6:in `method_a’:メッセージ
“`

`LAPTOP-5EMLK46H` は私のノートPCのマシン名。

どのマシンでのどのプログラムのどのメソッドでの出来事なのかというのが大事。

元記事を表示

deviseに自動的に設けられているバリデーション

# アウトプット
deviseを用いて、ユーザー情報を管理するモデル(Userモデル)を作成すると、
下記の通りになる。

##### app/models/user.rb
“`ruby
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable end ``` 5行目の`:validatable`という記述が、 deviseにより自動的に設けられているバリデーションを指している。 バリデーションは下記の通りである。 ###### email - 存在すること - 一意性であること - @を含むこと ###### pa

元記事を表示

【Ruby】dry-validationでバリる

# 概要
Validationを良い感じにやってくれるgemを現在使っているため備忘録として記事を書いていく。
ここでは特に`dry-validation`と`dry-strcut`を解説!

# 使うまでの流れ
## 1.Gemをインストール

“`bash
$ gem install dry-validation
$ gem install dry-struct
“`

## 2.基底クラスを作成

“`ruby
class ApplicationContract < Dry::Validation::Contract config.messages.default_locale = :ja # デフォルトメッセージを日本語に変換 config.messages.backend = :yaml config.messages.load_paths << 'config/contract/error.yaml' # 任意のエラーメッセージを書くロケールファイルのpath EMAIL = /.@./ # メールバリデーション用 PHONE_NUMBER = /

元記事を表示

駆け出しエンジニアのCI改善(その2 GithubActionsでテスト実行)

## 自己紹介: 駆け出しエンジニア
はじめまして。
私はRailsで自社サービスのWeb開発を行っている駆け出しエンジニアです。
この度はGithubActionsによる自動テストの作成を担当しました。

2020年 11月|エンジニアとしての学習を開始
:—:|—
**2021年 5月**|**エンジニアへ転職**
**2022年 2月**|**テスト自動化** :tada:
2022年 4月|現在(11ヶ月)

現時点で動くものを作ることができましたので、これからさらに磨きをかけて行きます。
より良い方法、至らない点については優しく指摘頂ければ幸いです。

### 実行環境: Ruby3.0&Rail6.0
Ruby|3.0.3
—|—
**Rails**|**6.0.4.6**

## 目標:GithubActionsでテストを並列実行する
最終的な目標はRspecのテストをGithubActionsで並列で実行することです。
4つのステップに分けて進めて行きます。

1. [テスト用DB作成の為にseed.rbを作成する](https://qiita.com/

元記事を表示

Rails ActiveStorageを使って画像を投稿する方法

この記事は私の学習の保存用のために書いている記事になります。新しく学んだ内容をアウトプットして残していき充実した学習をしていきたいと思います。
説明の不足や間違っている情報などがあればご指摘いただけると幸いです。よろしくお願いします。

## そもそもActiveStorageとは?

Railsで画像の投稿や表示を行うもので画像は通常のカラムとして保存できないため特別な保存方法が必要となり、それを行うのがActiveStorageです。

## ActiveStorageをインストールする

以下のコマンドでActiveStorageをインストールする

“`
$ rails active_storage:install
“`
インストールが終わるとマイグレーションファイルが自動で追加される。マイグレーションファイルをmigrateするために以下のコマンドを入力
“`
$ rails db:migrate
“`
以上がマイグレーションファイルができたときの基本の流れで、カラムを追加する必要があれば追加してから「rails db:migrate」を行う。

## モデルに記述を

元記事を表示

listen (LoadError)

# はじめに
AWSのリモート上でpumaを起動させた所、エラーが出た時ので備忘録として書かせて頂きます。

# 環境
ruby 3.0.2
rails 6.1.4
puma 5.4

# エラー
![スクリーンショット 2022-04-07 19.41.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594478/32c6c251-4644-d3dc-8d3e-a1f76ad32ede.png)
LoadErrorだったので、listenのファイルを確認したところ、ファイルがあったので、listenのgemがないのかと思いGemfileを確認した所あるのに何故エラーが出るのだろう?

# gem listenとは
ファイルの変更、追加、削除を検出するものみたいです。

# 原因
Gemfileをよく見てみると…:bulb:
![スクリーンショット 2022-04-08 11.38.18.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

ユーザー新規登録機能に画像登録も追加する方法【Ruby on Rails】

まずは完成イメージから。
こんな感じで、新規ユーザー登録画面でユーザーアイコン用の画像も設定出来る仕様を実装してみます。 ちなみに、画像の登録は面倒だし、取りあえす画像は設定しないといった場合にはデフォルトで画像が自動で設定される仕様になっています。

![スクリーンショット 2022-04-08 9.54.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2316171/ffb3997b-dfca-e89e-b108-abd87b01cb7b.png)

## コントローラーで、createアクションの設定

“`:app/controllers/users_controller.rb
def create
@user = User.new(user_params)
image = params[:user][:user_image] ← この行を追加
hash = SecureRandom.hex(10) ← この行を追加
@user.user_imag

元記事を表示

NameError (uninitialized constant Sidekiq::Logging)

– [「現場で使える Ruby on Rails 5速習実践ガイド」](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)の「Chapter7-8 非同期処理や定期実行を行う(Jobスケジューリング)」を進めていたところ、“`sidekiq“`の実行でハマってしまいました。
# 1.開発環境
“`Ruby:terminal
$ ruby -v
ruby 2.6.9p207 (2021-11-24 revision 67954) [x86_64-darwin19]
$ rails -v
Rails 5.2.7
“`

# 2.はまったこと
“`bundle exec sidekiq“`を実行したところ、次のようなエラー

元記事を表示

Rails コメント機能を非同期通信(Ajax)を用いて実装したい!

## はじめに
プログラミング初学者の自分用アウトプットです。
誤った知識や記述があれば教えていただけると幸いです。

## 開発環境
– ruby2.6.3
– rails6.1.4

## 前提条件
本を投稿するWebアプリを作成中
– ユーザー機能実装済(Userモデル(device導入))
– 投稿機能実装済(Bookモデル)
– コメント機能実装済(BookCommentモデル)

## やりたいこと
– ユーザーがコメントを投稿した際に、ページをリロードせずにコメントの投稿ができる。
– ユーザーがコメントを削除した際に、ページをリロードせずにコメントの削除ができる。

###### コメント機能を使用した際に、ページを部分的に更新できるようにしたい!
## 実装の流れ
#### ●jQueryを導入
“`ruby:Gemfile
gem ‘jquery-rails’
“`
“`ruby:javascript/packs/application.js
import “jquery”;
“`
“`
$ bundle install
“`
#### ●view

元記事を表示

Rails 7.0.2にアップグレード後、SQLインジェクションの危険性のあるクエリがエラーになった

# エラー内容

エラー内容は以下。

“`text
ActiveRecord: :UnknownAttributeReference: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s): “field(id, ?)”.This method should not be called with user-provided values, such as request parameters or model attributes. Known-safe values can be passed by wrapping them in Arel.sql().
“`

要は、「field(id, ?)はSQLインジェクションの危険があるから、危険じゃないことを確認できてるならArel.sql()で囲め」とのこと。

エラー出た部分のコードは以下の様な感じ。

“`ruby
User.where(id: ids).order

元記事を表示

Fakerを使用したランダムの値の出力

# アウトプット
Fakerとは、ランダムな値を生成するGem。

###### (例)
“`ruby
% rails c

[1] pry(main)> Faker::Internet.free_email
=> “georgina@yahoo.com”

[2] pry(main)> Faker::Internet.password(min_length: 6)
=> “9DfWbC3gZsZ5cL”
“`

###### (FactoryBotで記述する場合)
##### spec/factories/users.rb
“`ruby
FactoryBot.define do
factory :user do
email {Faker::Internet.free_email}
password {Faker::Internet.password(min_length: 6)}
password_confirmation {password}
end
end
“`

# 学んだこと
F

元記事を表示

Ruby初心者さんたちが抱くややこしさ

初心者目線で書いています。
プロには違うと思うかも…

rubyのややこしさ①
いくつもほぼ同じことをするコードがある
“`ruby:出力するprint系コード
print(“hello world”)
#これは良い

printf(“hello world”)
#まだ大丈夫

puts “hello world”
#うーん…ギリギリ良いかな…?

p “hello world”
#うん、いらない
“`

rubyややこしさ②
繰り返しコードの多さ
“`ruby:繰り返し
for i in 1..10 do
print(“hello”)
end
#大丈夫、全然普通

while 1 < 5 do print("hello") i = i + 1 end #forとwhileは全然問題ない x = 3 until x <= 0 do print(x,"\n") x = x-1 end #はぁ…まぁ良いけどさぁ x = 1..10 x.each do print("hello!","\n") end #うーん…需要はあるか… 5.

元記事を表示

FactoryBotを使用したインスタンス生成の共通化

# アウトプット
FactoryBotとは、インスタンスをまとめることができるGem。

###### spec/factories/users.rb
“`ruby
FactoryBot.define do
factory :user do
email {‘test@com’}
password {‘abcdef1234’}
password_confirmation {‘abcdef1234’}
end
end
“`

“`ruby
# FactoryBotを使用しない場合
user = User.new(email: ‘tset@com’, password: ‘abcdef1234’, password_confirmation: ‘abcdef1234’)
# FactoryBotを使用する場合
user = FactoryBot.build(:user)
“`

###### spec/models/user_spec.rb
“`ruby
require ‘rails_help

元記事を表示

SNS認証について

# SNS認証について
– 学習マッチングサイトを作成して、google認証を実装したい
– 認証機能について理解を深めたい
## 環境
– AWS:EC2,RDS(MySQL),VPC,Route53
– webサーバー:NGINX
– アプリケーションサーバー:Puma
– フレームワーク:Ruby on Rails

## 認証の仕組みについて
今回はgoogle認証であるため、登場人物は、

– googleのリソースサーバ
– エンドユーザー
– webアプリ
– googleの認可サーバー

です。
### リソースサーバーとは
リソースサーバとは、保護対象のリソースを保持しているサーバーを指します。ここでいうリソースとは、googleフォトの画像やプロフィール情報等のことと思います。
### ユーザー
リソースオーナであり、アカウントを連携したいユーザーを指す。
### webアプリ
これは、つまり、学習マッチングサイトです。
### 認可サーバー
リソースサーバーに信頼されたサーバーで、リソースオーナーの認証を行い、リソースサーバーに対するアクセストークンを発行します。

元記事を表示

Active Storageの複数ファイルを1つのzipファイルに圧縮する効率の良い方法

とある案件で、Active Storageで管理しているファイルを複数選択して、1つのzipファイルに圧縮する要件があったので実装方法を検討しました。

# 前提

この記事では下記のUserモデルの`save_selected_avatars`メソッドの実装方法を検討します。

“`ruby:user.rb
class User < ApplicationRecord has_one_attached :avatar class << self def save_selected_avatars(user_ids) # TODO: user_idsで指定したユーザーのavatarを1つのzipファイルに圧縮して保存する end end end ``` なお、この記事では下記のバージョンを使って動作確認しています。 ZIPファイルを生成する処理はrubyzipのGemを使います。 * ruby 3.1.1 * rails, activestorage 7.0.2.3 * rubyzip 2.3.2 # 実装方法検討 ## その1 ま

元記事を表示

if式やループのネストを減らす方法まとめ

# 結論

– 早期リターンする
– 条件式で代入を行う

以上のやり方でネストを減らすことができます。

### 早期リターンする

例えば、受け取った数字が50より大きいとき2倍にする関数があるとき

早期リターンしない場合。
“`ruby
def double(number)
if number > 50
number * 2
end
end
“`

早期リターンする場合。
“`ruby
def double(number)
return if number <= 50 number * 2 end ``` ループ内の場合は`next if number`でも良いですね。 ### 条件式で代入を行う 例えば、ユーザーを1つ取り出して何かしたいとき 条件式で代入しない場合 ```ruby def update user = User.find(params[:id]) if user ... end end ``` 条件式で代入する場合 ```ruby def update if user = User.find(par

元記事を表示

Rubyの基本的な構文をまとめてみる

# 初めに
こんにちは!都内でWEB制作を中心に活動しているりょうといいます!
今回はShopifyをきっかけに興味を持ったRubyの簡単な構文について、備忘録的にまとめていきます!

shopifyはRubyをもとにして作られたliquidという言語があるそうで、バックエンド全くの未経験の僕がいきなり始めるにはあまりにも敷居が高い。。。
それならRubyから始めてみよう!!

そんな経緯があってこの記事を書いた次第です!

## この記事の目的
Rubyの基本構文を忘れないうちにアウトプットする!

ではいきましょう。

### テキストの出力
~~~ruby
# コメントアウトは”#”でできる!
puts “Hello Ruby!”
puts 8
# 出力結果:Hello Ruby! 8
~~~
Rubyのテキスト出力は『puts』
言語ごとに出力方法は違うようですが、個人的にはputs、とても好きですね。
なんかかわいい

また、Rubyにおいては『文字列』と『数値』の連結はできないようです。
これは注意が必要ですね。
~~~ruby
puts “string” + 10
#出力

元記事を表示

【Python】Pythonの型名が覚えられなかったのでメモ

Java, Rubyの実務経験があり、Pythonも覚えてみたいと考えた今日このごろ。
型の種類と名前が全く一致しなかった戒め。

下記のフォーマットで自分用にメモ
###### 大枠のジャンル
“`
・Pythonでの呼び方
 ・Java, Ruby(他覚えやすかったキーワードなど)での呼び方

※あれば感想など
“`

###### 数値
“`
・int
 ・整数

・float
 ・小数点

※散々やってきたので大丈夫。小数点の計算 ^ Javaのときは「BigDicimal」を使わないとダメだぞ!と怒られた記憶がある
“`

###### 論理
“`
・bool(Yes / No)
 ・boolean
“`

###### 文字列
“`
・str
 ・String

※大した違いじゃないからまぁいいんだけど、こういう微妙な違いがあると困るよね。
“`

###### シーケンス
“`
・list
 ・ArrayList(Java)(後から追加できるからArrayListで覚える)

・tuple
 ・list(配列)(後から変更できないからlistで覚える)

元記事を表示

bundlerまとめ

# how2use
bundle init
-> Gemfile

source “rubygems”

元記事を表示

debug gem まとめ

# how to use
s
q!

continue
finish
next
help
help next
p n

元記事を表示

OTHERカテゴリの最新記事