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

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

【Rails】通知機能~変更点と補足~

## 記事の対象者
実装した処理の動きについて理解したい人

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 参考にした記事
実装については、下記記事を参考にしました。
今回は一部変更した点と、実装した処理の動きについて自分で補足した部分を書いていきます。

https://qiita.com/nekojoker/items/80448944ec9aaae48d0a#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E8%A8%98%E4%BA%8B

## 実装の流れ(フォロー通知)
**①通知モデルの作成(Notification)
②モデルの関連付け(UserとNotification)
③モデルに通知作成メソッドを作成
④コントローラーに通知作成メソッドの呼び出し処理作成
⑤ビューに通知一覧画面及び通知アイコンの作成**

## 変更箇所
下記が変更点となります。補足を交えながら説明していきます。
・default_scope
・update_attributesメソッド

## ②モデルの関連付け(UserとNo

元記事を表示

[初心者向け]rubyでスクレイピングを行い、その結果でメールを送信する

# 例題

amazonでps5が売り出されていたらメールを送信する

# まず、初めに

htmlから、この値を取り出す

[リンク](https://www.amazon.co.jp/PS5-CFI-1100A01-%E8%BB%BD%E9%87%8F%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%BF%E3%82%A4%E3%83%97-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E4%BF%9D%E8%A8%BC1%E5%B9%B4%E3%81%82%E3%82%8A/dp/B0B18BG131/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1VTPROMW1C2U9&keywords=ps5&qid=1654946758&sprefix=ps%2Caps%2C256&sr=8-1)

![スクリーンショット 2022-06-11 20.

元記事を表示

ECS FargateとElasticBeastalk(Ruby Platform)を比較

昨年、[本番稼働を意識したECS Fargateを用いたFastAPIの環境構築(ALB、SSM、BlueGreenデプロイ)](https://qiita.com/yuyasat/items/04a083a57f5691f1ed3c)という記事を投稿しました。その後、仕事にて実運用でECS Fargateを利用し始め、ある程度感覚がわかってきましたので、以前利用していたElasticBeanstalk(Ruby Platform)との比較を簡単に紹介したいと思います。
仕事では、ECS Fargateは2022年2月末に本番運用を開始しています。また、ElasticBeanstalkに関しては、2017年より仕事で使っています(既にある環境の運用から始まり、新規構築も何度か行いました)。その経験を踏まえて感じたことですので、使用している機能が限定的だったり、詳しい方から見れば容易に改善できる面もあるかと思います。ご教授いただけましたら幸いです。

## 1. デプロイのしやすさ
| | ElasticBeanstalk | ECS Fargate |
|—|—|—|
|

元記事を表示

bundler 2.2.x でのエラーを乗り越えたい

2020年12月に、 Rails アプリの Docker イメージをビルドする CI が突然エラーを起こしたことがありました。これは bundler 2.2.0 がリリースされたことに起因していたため、イメージに入れる bundler を一旦 2.1.4 に固定することで対処しました。

そのままずっと問題に蓋をしていたものの、 bundler は既に 2.2.33 や 2.3.15 が出ているため、きちんと当時のエラーについて調べてバージョンアップしようと思い立ちました。

エラーが何だったのか、 bundler の [changelog](https://github.com/rubygems/rubygems/blob/v3.2.33/bundler/CHANGELOG.md) などを見てもすぐにはわからなかったので、**実際に様々なバージョンで実験して探りました**。( x86-64 の Linux および macOS を対象としています)

## TL;DR
bundler 2.2 からは、 Gemfile.lock に Ruby のプラットフォームの情報( `x86_64-

元記事を表示

Progate Ruby 備忘録

Progateの「Ruby」で学習した内容をまとめてみました。

## コンソールへの出力
`puts`の後に出力したい文字列や変数などを指定する。
文字列を含む内容を出力する場合は以下のように、ダブルクォーテーション(`”`)で囲む必要がある。
“`ruby
# 変数宣言
name = “huga”

puts “hoge”
puts 1 + 2
puts “1 + 2”
puts name
“`
一応、シングルクォーテーション(`’`)で囲むやり方でも文字列の出力は可能だが、
ほとんど使い道はなさそうなので覚えなくても大丈夫だと思われる。
(Javaでもシングルクォーテーションはほとんど使わない気がする)‘

また、`#{変数名}`の構文を使用することで、変数の中身を文字列に含めることができる。
“`ruby
name = “hoge”
puts “初めまして、#{name}さん”
“`

## コメントについて
行の先頭に`#`を入れた行はコメントとして扱われる。
複数行をコメントアウトしたい場合は、`=begin`と`=end`の構文を利用すればよい。
“`ruby

元記事を表示

RailsでGemを更新したら再起動しましょうという話【初学者向け】

:::note result
**gemを更新したらサーバーを再起動しないと反映されない?**
:::

## 解決策
### dockerなしの通常開発環境の場合
railsを再起動する
“`terminal:terminal
$ rails restart 
“`

### docker環境の場合
“docker compose up -d“で「web」をバックエンドで起動している状態を想定。
“`terminal:terminal
$ docker compose exec web bundle install #gemを更新。これだけじゃ足りない?
$ docker compose restart #dockerの再起動、これが必要?
“`

ちなみに、、、
gem更新後にrailsを再起動すれば良いので以下でもOK。
“`terminal:terminal
$ docker compose exec web bundle install #gemを更新。これだけじゃ足りない?
$ docker compose exec

元記事を表示

Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1

## 概要

bundle installしたら「Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1」エラーが出たので解決方法を書きました。
1人でも多くの人の役にたてればと思います。

## はじめに

### 使用する環境
– MacOS(Intel)
– Rails 6.0.3
– Ruby 2.6.3
– yarn 1.22.17
– Homebrew 3.5.0

## 状況
bundle installしたら上記エラーが出た。
エラー文はローカルの環境のrubyは2.6.3だけど、gemfileに記述されてるrubyは2.7.1になってるから合わせてねってこと

Rbenvでインストール可能なRubyのバージョンを確認
“`
$ rbenv install -list
“`
バージョンを指定してインストール
“`
$ rbenv install 2.7.1
“`
上記のrbenvでインストール可能欄に入ってなくても直接指定することでインストールすることが可能です。
反映する
“`
$ rben

元記事を表示

Rails の Strong Parameters が不要なパターン

# はじめに

最近 Rails に触れる機会があり、Strong Parameters について調べた際にタイトルの内容が知りたかったのですが、書かれている記事を見つけられなかったのでそのことを。

Ruby 自体も含め、しっかり絡んだことがなかったので用語などが Ruby 界隈と合っていなかったりしたらご容赦ください。

先に Strong Parameters について簡単に触れますが、不要な場合は「[Strong Parameters が不要なパターン](#strong-parameters-が不要なパターン)」からお読みください。

# Strong Parameters とは

詳しいところは検索すればいろいろ出てくるので割愛しますが、ざっくりいうと

**Post されたデータ( params )に対し、マスアサインメントを利用する際に意図しないパラメーターが使用されないようにする仕組み**

です。

マスアサインメントは、複数カラムを一括で指定する仕組み。

元々はモデル側で `attr_accessible` を使って許可を与えていたようですが、脆弱性を作りやすいこ

元記事を表示

【10分でできる】笑っていいとも100分の1アンケートのRailsアプリを作ってみた

# はじめに
 [GitHub](https://github.com/mzmz02/qiita_yes_no_app_sample)にコードを公開してるので,コードだけ知りたい方は飛ばしてもらって大丈夫です.

“`:開発環境
Windows10
ruby: 2.6.10
Rails: 5.2.8
“`

# 完成図
 Herokuでデプロイしてるので,ぜひ試してみてください.

 結果画面↓
 https://it-yes-no-app.herokuapp.com/posts/index
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/915dd486-6e7d-d28c-facf-4430cb9ad88b.png)

 回答画面↓
 https://it-yes-no-app.herokuapp.com/posts/new
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

?【初学者用】Railsのエラーメッセージを日本語化する

# はじめに
オリジナルアプリケーション実装時にエラーメッセージを日本語化したので、その方法をまとめます。

## 日本語化の設定
まずは日本語の設定から
“`rails:config/application.rb
# 中略
module Pictweet
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.0 # 日本語の言語設定 config.i18n.default_locale = :ja #jaに変換 # 省略 end end ``` ## rails-i18n導入 日本語に対応するGemfileを導入します。 [登録されている日本語](https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml "登録されている

元記事を表示

ActiveRecord attribute methodまとめ(その②: Dirty編)

# はじめに
今回はActiveRecordのattribute methodのうち、Dirtyメソッドをまとめていきます。
(2022年6月時点。Rails7.0対応。)
以前、[BeforeTypeCastの内容](https://qiita.com/maabow/items/33ad5328b192e3adb49e)をまとめましたが、今回のDirtyメソッドはBeforeTypeCastに比べて、より実用的なメソッドが多いと思います。

# 検証環境
以下のschemaとmodelに基づいて検証を行なっています。
enumを利用しているので、実際にDBに入っている値と出力される内容が異なる箇所が存在します。
“` db/schema.rb
create_table “todos”, charset: “utf8mb4”, force: :cascade do |t|
t.string “title”
t.datetime “scheduled_at”
t.integer “status”
t.datetime “created_at”, null: false

元記事を表示

Ransackで大きな数値を入力したときに発生するActiveModel::RangeErrorを回避する方法

## 解決したい問題
Ransackでは大きな数値を検索条件に入れると`ActiveModel::RangeError`が発生します。

“`ruby
User.ransack(age_eq: 123456789012345678901).result
#=> ActiveModel::RangeError: 123456789012345678901 is out of range for ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer with limit 8 bytes
“`

SQLite3やPostgreSQLで確認する限り、SQL上は検索条件として大きな数値を入力してもエラーにはならないようです。

““sql
— (データが見つかるかどうかは別として)エラーにはならない
SELECT *
FROM users
WHERE age = 123456789012345678901
““

またActiveRecordもエラーにはならないようになっています。

“`ruby

元記事を表示

100日後くらいに個人開発するぞ!day043

## 今日はハッシュとシンボルを学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/9a79e3a3-9fee-e7d4-d7db-c39b5c7a38d8.png)

## 今日の学び

### ハッシュ
* ハッシュは複数の値をまとめて管理する方法の一つで、それぞれの値にキーと呼ばれる名前をつけて管理する
* ハッシュの作り方
* `{キー1 => 値1,キー2 => 値2,キー3 => 値3}`
* ハッシュは変数に代入することができる
* 変数 = `{キー1 => 値1,キー2 => 値2,キー3 => 値3}`
* ハッシュの各要素の値は、対応するキーを使って、`ハッシュ[キー]`とすることで用いることができる
* `ハッシュ[キー] = 値`と書くことで、キーと対応している値を更新することができる
* ハッシュ[新しいキー] = 値と書くことで、ハッシュに新しい要素を追加することができる
* ハッシュにすでにあるキーを指定

元記事を表示

【自分用】Rubyの基礎を振り返る。②

# はじめに
前回の続き。
【自分用】Rubyの基礎を振り返る。①

https://qiita.com/hondano_gentuki/items/25d71553b200808cfc2a

# Rubyのあれこれ②
### クラス
クラスは、値の元となるものです。値の共通のルールを定義。
ここで決めるルールは、共通の属性と処理(メソッド)。

例えるのであればクラスが設計図(雛形)でインスタンスが車(普通車・パトカー・スポーツカーなど。)
“`
class Car
# 変数やメソッドの定義
end
“`

### インスタンス
クラスを元にして作られるデータ。クラスとは違い実態を持つ。

### newメソッド
クラスは、定義しなくてもnewという特別なメソッドをはじめから持っている。
使用したクラスのインスタンスを生成して返す。
“`
# インスタンスを生成し変数で扱う
変数名 = クラス名.new
“`

例:
“`
class Car

end

fire_truck = Car.new # Carクラスのインスタンスを生成
puts fire_truck

元記事を表示

【Rails】ActionCable~用語について~

## はじめに
実装の流れは長くなるので省略させていただきます。
自分が疑問に思ってノートに記録した物を記事にしていきます。

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 用語について
ActionCableとwebsocketを使用するにあたり、新しい用語がいくつか出てきました。
以下の通りです。

・コネクション
通信方式のこと。プロトコルとしてはTCPがコネクション型、UDPがコネクションレス型。
TCPは一般的なHTTP/HTTPSリクエスト&レスポンスの通信で使用されている。
websocketの通信方法でも使用されており、websocketコネクションをオープンすることで通信を確立する。

・コンシューマー
websocketコネクションのクライアントのこと。

・チャネル
MVCでいうコントローラーの役割を果たす。
ボタンなどで発火されるとチャネルのアクションが実行されるみたいなイメージ?
チャネルはコンシューマーをサブスクライブ(利用登録)できる。
コンシューマーは複数のチャネルにサブスクライブされることが可能。

・サブスクライバ
コンシュー

元記事を表示

【Laravel・Rails】親が削除されたらリレーション先の子テーブルも削除する方法まとめ

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## Laravel
### cascadeOnDelete()
マイグレーションファイルでやる方法。

“`php
Schema::table(‘posts’, function (Blueprint $table) {
$table->foreignId(‘user_id’)->constrained()->cascadeOnDelete();
});
“`

https://readouble.com/laravel/9.x/ja/migrations.html?header=%25E5%25A4%2596%25E9%2583%25A8%25E3%2582%25AD%25E3%2583%25BC%25E5%2588%25B6%25E7%25B4%2584

### deleting()
modelにロジックを書く方法。
“`app/Models/User.php
protected static function boot()
{
parent::boot();

self::dele

元記事を表示

RailsでDB内を確認したい時

# はじめに
Rails 6.0.3を使用してローカル環境にてアプリケーションを作成中にアソシエーションを実装しようとしていて自分が作成したDBがどのようなcolumnを設定して、テストで入力している、user情報やuser_id、content内容などを確認して紐付けを行いたいと思う場面がありました。
その際に、ターミナル上で確認した時の内容を備忘録として記事にします。

環境
Ruby: 3.0.1
Rails: 6.0.3

# 設定内容
テーブルは3つ作成してあり、以下の3つ
– users
– blogs
– favorites

それぞれにカラムを設定
__users column__
– name
– email
– password_digest

__blogs column__
– content
– user_id

__favorites column__
– user_id
– blog_id

# 発生していた問題
usersのid(デフォルトで作成されている)とblogsカラムのuser_idを互いに紐づけるため【usersのidとfavoritesのu

元記事を表示

embulk-output-bigqueryインストール時にRuby version >= 2.5でエラーになる問題

コンテナにembulkをインストールしようとした際に以下のエラーが出て、embulk-output-bigqueryのインストールに失敗した。

“`
#16 10.54 ERROR: Error installing embulk-output-bigquery:
#16 10.54 jwt requires Ruby version >= 2.5.
“`
エラーメッセージにもあるように、原因としてはembulk-output-bigqueryが依存しているjwtのバージョンが22/6/6より2.4.0に上がったことで、要求Ruby versionが旧来の2.1から2.5に上がったことが原因。
https://rubygems.org/gems/jwt/versions/2.4.0

https://zenn.dev/hiroysato/articles/35a26bbe466f0b
> Embulk 0.9.23に入っているJRubyのバージョンは9.1.5.0で、Ruby 2.3互換となっており

と記述があるように、Embulkの0.9系に入っているRubyは2.3系なので

元記事を表示

# Ruby on Rails(ruby3.0系) の環境構築 ※Windows

この記事ではdockerでの仮想環境で構築するわけではなくCドライブにそのままrubyをインストールして環境構築をします。今からrubyやrailsを始めるという方向けです。
### バージョン
ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x64-mingw32]
Rails 7.0.3
***
### rubyのインストール
[ruby公式](https://rubyinstaller.org/downloads/) から __Ruby+Devkit 3.0.4-1 (x64)__ をクリックしてダウンロードして下さい。
※バージョン確認コマンド
`ruby -v`
※rubyのバージョンが3.1系だと`rails new プロジェクト名`でrailsのプロジェクトを立ち上げる時に以下のエラーが発生してプロジェクトが上手く作られず、`rails s`で始めることが出来なくなります。
“`
Errno::ENOENT: No such file or directory – bs_fetch:open_current_file:

元記事を表示

Ruby-FFIでは関数はクラス変数に登録されているが、Fiddleではクラスインスタンス変数に登録されている

## はじめに

Ruby-FFI と Fiddle はRubyからC言語の関数を呼び出せる便利なライブラリです。

* Ruby-FFIでは、`attach_function` メソッドを利用して、関数を登録します。
* Fiddleでは、`extern` メソッドを利用して、関数を登録します。

それぞれ `Function` クラスが存在します。しかし何もしなければRubyではガベージコレクションが働いて関数を表現しているオブジェクトを開放してしまいます。開放された関数オブジェクトを呼び出そうとするとセグフォが発生してしまうはずです。ですから関数オブジェクトは、どこかのオブジェクトから参照されてGCから保護されているはずです。では `attach_function` や `extern` で作成した関数オブジェクトはどこに登録されているのでしょうか?

## Ruby-FFIではクラス変数

Ruby-FFIでは、関数はクラス変数に退避されています。クラス変数の一覧は、`class_variable` メソッドで閲覧できます。

“`ruby
HogeLib::FFI.clas

元記事を表示

OTHERカテゴリの最新記事