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

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

コールバックでのsaved_change_to_ と will_save_change_to

## はじめに
スクールにて、コールバックの設定に手間取り、その際調べることで挙動の違いを理解したつもりなので、同じようなことにハマった人のためになればいいなと、健忘録として残します。

### 開発環境
Rails 6.1.7.4
ruby 3.0.1

### 目的
管理者が、最後の1人のとき、管理者が0人とならないように権限の編集を制限する。
つまり、1人もいなくなっちゃ困るので、必ず1人は権限を在籍させたい訳です。

### 最初に試したこと(失敗したこと)
– Qiita記事や調べてまずは下記のように設定
“`rb
def admin_cannot_update
if User.where(admin: true).count == 1 && self.saved_change_to_admin == [true,false]
throw :abort
end
end
“`
adminに設定されたユーザーがデータベースに1人だけであり、かつ対象のオブジェクトのadminカラムをtrueからfalseに変更しようとしたとき、 thow :abortで更新を中

元記事を表示

【個人開発】LINEMessagingAPIを使って無差別に飯テロできるアプリを作りました

# はじめに
こんにちは、すずゆーと申します。

突然ですが皆様は飯テロをしたことはありますでしょうか。
私はSNSに美味しいご飯をアップするのが大好きです。
アップした写真に対してフォロワーさんからの反応を楽しむのが大好きです。

しかし、SNSだとせっかくアップしても本当に見てもらいたい人に見てもらえない時があったり…
そんな中、LINEなら確実に相手に届くし見てもらえるじゃん!ということで私の悪戯心を具現化したアプリを開発しました。

## 記事を読む上での注意点
当記事はプログラミング学習を開始して日の浅い業界未経験者が書いたものになりますので、技術的な内容などは誤りを含む可能性があります。予めご了承ください。

# サービス名

### 飯テログ
URL: https://meshitelog.com
GitHub: https://github.com/suzuyu0115/meshitelog
![placeholder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493892

元記事を表示

【Ruby】ブロックとyield・Proc・lambda

# はじめに

`yield`、`Proc`、`lambda`、こいつらを目にするたびに

1. 「何だったっけなぁ、ブロックを扱う概念だった気がするけど、よくわからん」
2. 調べて、軽くコードを書いて実行してみる
3. わかった気がして満足する
4. しばらく使うこともなく、1へ戻る

を繰り返していました。

そもそも「ほとんど使うことがない」というのも、理解が不十分だから使える場面を見逃しているのではないかという気もしてきたので、ここらで記事にまとめて、理解を深めていこうと思います。

実際にコードを書きながら挙動を確認していくので、似たようなことを感じている方はぜひ、手を動かしながらご覧ください!

「公式ドキュメントを読めばわかるだろ!」という話かもしれませんが、やっぱり自分でコードを書いて(さらに気になったことを思いつくまま試した方が)理解が深まると思います。

# 目次

– [検証環境](#検証環境)
– [ブロック](#ブロック)
– [yield](#yield)
– [Proc](#proc)
– [lambda](#lambda)
– [Proc.newとla

元記事を表示

rails非同期処理 gem比較

実務で扱っているアプリケーション(Rails)に非同期処理を導入することになり、代表的なgemの特徴・メリット・デメリットを調査しました。せっかくなので簡単にまとめておきます。

## 調査対象のgem
– Sidekiq
– Shoryuken
– Rescue
– Delayed_job

## 比較表
GitHubスター数は2023年9月頃のものです。また「〇、△、✕」は条件次第で変わってくるものもあると思います、参考程度の認識でお願いします。

【Rails】診断機能をラジオボタンを使って実装!


## 【Rails】診断機能をラジオボタンを使って実装!

今回はRuby on Railsで診断機能を実装します!
その時にチェックボックスではなくてラジオボタンを使って実装してみようと思います!
目次は以下の通りです!

### 1. コントローラー設計
### 1. データベース周り
### 1. Viewページ周り
### 1. ルート周り

## 1. コントローラー設計

“`ruby:travels_controller.rb
class TravelsController < ApplicationController def index end def new @travel = Travel.new end def show @travel = Travel.find_by(id: params[:id]) end def create @travel = Travel.new(travel_params) if @travel.save flash[:notice]

配列に格納されたハッシュを複数条件でソートしたい

# やりたいこと

まずは、`sort`メソッドを使い、以下の配列をheightの昇順(背の低い順)でソートします。

“`ruby
people = [{ name: ‘Sato’, weight: 20, height: 180 },
{ name: ‘Suzuki’, weight: 30, height: 170 },
{ name: ‘Ito’, weight: 60, height: 160 },
{ name: ‘Watanabe’, weight: 50, height: 150 }]
“`

その後で、**複数条件でのソート**(マルチソート)を試します。
例として、heightが同じ数値の場合はweightの降順(体重が上の順)でソートするようにします。

`sort_by`を使った書き方も最後に紹介します。

## sortメソッドを使用

### heightの昇順でソート

配列の並び替えには[sortメソッド](https://docs.ruby-lang.org/ja/latest/m

RailsのRubyライブラリ自動読み込みについて | なぜrequireしなくても動くのか?

Railsでアプリを開発中、外部APIを叩く処理で[URIライブラリ](https://docs.ruby-lang.org/ja/latest/library/uri.html)を使用する場面がありました。

URIライブラリは[組み込みライブラリ](https://docs.ruby-lang.org/ja/3.1/library/_builtin.html)ではないので、コード内に`require ‘uri’`が必ず必要だと思っていたのですが、require無しでも動いたため、その理由について調べたことをまとめます。

## Rubyライブラリの種類

本題に入る前にRubyライブラリの種類について簡単に。

#### ①組み込み標準ライブラリ
– Ruby本体に組み込まれている。
– require を書かなくても使うことができる。
– 例)Array, Hash, String, Integer

#### ②組み込みではない標準ライブラリ(この記事で扱います)
– Ruby本体に付属している。
– インストール不要でコード内でrequireして使う。
– 例)Date,

has_secure_password の 72 文字制限にご用心

Rails にはパスワードフィールドを管理する方法として `has_secure_password` という機能がある。機能自体については[公式のドキュメント](https://guides.rubyonrails.org/active_model_basics.html#securepassword)を参照してほしい。

本題はこの機能の 72 文字制限についてである。公式のドキュメントにもある通り、この機能が作るパスワードフィールドには最大 72 文字のバリデーションが自動的にかかる。

“`irb
irb> user.password = user.password_confirmation = ‘a’ * 73
irb> user.valid?
=> false
irb> user.errors
=> #72}>]>
“`
[ソースコード]( https://github.com/rai

Railsで静的データのモデルの実装

## 最初に

本記事でやりたかったことは [active_hash](https://github.com/active-hash/active_hash) を使ってもできるので、その前提でお読みいただけると。

記事を書いたときは `active_hash` を知らず、コメントで教えていただきました。

## 背景
Ruby on Railsで開発をしていて、
更新性の低いデータ、DB管理する必要ないであろうデータの扱い方に迷ったので、
対応方法を残します。

## 対象データ
Webサービスのプラン情報についてです。
基本的にリリース後に追加はあっても変更する可能性は低いです。
追加に関してもあっても2年に一度とかとかになるかな..と考えています。

ですので、管理画面作って変更するまでもないし、
DBに入れるまでもないデータだなと思ってどのように実装するかを迷っていました。

## 対処方法
Modelとしては実装しつつも、
DBには保存せず静的なデータで定義をしました。

## 実際のコード

以下のModelクラスを実装です。

“`models/plan.rb
clas

BundlerとRubygemsの依存性によるトラブルシュート

## 環境
Ubuntu20.4
Ruby2.6.0

## はじめに

自分の開発環境から別の環境にRailsのソースを移行して、bundlerを動かそうとしたところ、動かないといった問題に遭遇したため、そのトラブルシュートの記事です。

Bundelrの公式サイトのBlogによると、この問題に関する是正内容が、2019年1月4日の記事で発表されています。わりと古い内容なので、今更な話題ではあります。

https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

## 内容

Bundlerのバージョンを確認したところつぎのエラーが発生しました。
“`
$bundle -v
Traceback (most recent call last):
2: from /usr/local/rbenv/versions/2.5.0/bin/bundle:23:in `


1: from /usr/local/rbenv/versions/2.5.0/lib/

rails 通知機能

**はじめに**

今回は、投稿のいいね機能についての通知機能を実装します。

バージョン
rails 6.1.7.4
ruby 3.1.2
通知する機能いいね機能作成済みとします
________

### モデル作成
“`
rails g modle Notification
“`
“`notification.rb
class Notification < ApplicationRecord # デフォルトの並び順を「作成日時の降順」で指定、に新しい通知からデータを取得することができる default_scope -> { order(created_at: :desc) }
belongs_to :visitor, class_name: ‘User’, optional: true
belongs_to :visited, class_name: ‘User’, optional: true
# optional: trueは、nilを許可するもの
belongs_to :post, optional: true
belongs_to :c

Multiscale 23f

# name

Multiscale 23f : ソフトウェア開発での必須スキルとなるTDD(test driven development, テスト駆動開発), class, refactoringを,Ruby言語で習得する

# text

Kent Beck, ‘Test-Driven Development by Example’, (Pearson, 2003).

# Schedule

| data | text | title

俺流Request specのフォーマット

## 背景

最近、個人でRuby on Railsを使ってWebサービスのAPIを開発しています。
その際にRSpecを使って主にRequest specを書きました。
spec形式の書き方で試行錯誤したので公開してみます。

## 俺流Request spec

まずは、コードを共有させていただきます。

組織のCRADを実装したOrganization APIのrequest specです。
rails_helperやメソッドに処理をさせているところもあって、
わかりづらいかもしれませんが動いているコードの一部をほぼそのまま持ってきました。

“`organizations_request_spec.rb
RSpec.describe ‘Organizations’, type: :request do
# 共通のデータ
let!(:user) { create(:user) }
let!(:uneditable_user) { create(:user) }
let!(:organization) { create(:organization) }

le

Passengerで複数のRubyのバージョンに対応する

## 環境
– Ubuntu20.4 + Vagrant
– Ruby2.6.0
– Apache2.4.41
– Passenger6.0.18

## はじめに

Apache2 + Passengerの環境で、異なるRubyのバージョンで作られた複数のWebアプリを、共存させて動作させる方法について書きました。もう少し詳しく言えば、Ruby2.7で作られたWebアプリと、Ruby2.6で作られたWebアプリとを、Passengerで共存させる環境の作り方についてということです。

## 内容

#### Passengerのバージョンを確認する

Passengerが複数のRubyバージョンに対応できるようになったのは、Passenger4.0.0以降です。まずは、既存のPassengerのバージョンを確認します。

“`
$passenger-config –version
“`

Passengerがインストールされているはずなのに、「コマンドがありません」というエラーがメッセージが表示される場合は、パスが切れていない可能性があります。その場合は、自力でコマンドがある場

Rubyのoptparseについて

# はじめに
今回はRubyのoptparseについての記事を書こうと思います。
カレンダーをRubyで作成する際にoptparseを使用する仕様にする際にoptparseについて調べたのでまとめて記事にしようと思いました。

# optparseとは
* `optparse`は標準ライブラリの1つで、コマンドラインのオプションを取り扱うために使われる
* `optparse`を使うときは基本的に以下のステップで使用する
①`OptionParser`オブジェクト`opt`を作成
②オプションを扱うブロックを作成
③opt.parse(ARGV)でコマンドラインをパースする

# 挙動の確認
“`sample.rb
require ‘optparse’
opt = OptionParser.new

opt.on(‘-a’) {|v| p v}
opt.on(‘-b’) {|v| p v}

opt.parse!(ARGV)
p ARGV
“`

実行結果
“`
$ ruby sample.rb -a foo bar -b baz
# => true
true

【Rails6】 既存AppにTailwindCSSを導入しよう!

# はじめに
?こんにちは!Web系の企業に勤務し、地方からフルリモート勤務をしている@takakouと申します?️✨

今回は、「**【Rails6】 既存AppにTailwindCSSを導入しよう!**」というテーマで記事をシェアします!?

この記事を執筆しようと思った経緯としては、私自身が **既存のRails6のアプリケーション**に**TailwindCSS**を導入する記事があまり見つからなかったからです 。?

そこで、同じ疑問を持つ方の解消ができればと思い執筆しました?

記事執筆は未熟者で、至らない点もあるかと思いますが、皆さんのコメントやフィードバックをお待ちしています!??
# 目次

1. [対象者 ?](#1-対象者)
1. [動作環境 ?️](#2-動作環境)
1. [導入手順 ?](#4-導入手順)
1. [参考文献 ?](#5-参考文献)
1. [おわりに ?](#6-おわりに)

# 1. 対象者

* **Rails6**の既存AppにTailwindCSSを導入したい方

Ajaxについて【自分用】

### 【概要】

Ajaxについて。になります。
前回も記事を執筆したのですが、自分の中の理解度チェックも兼ねて再度執筆します。

### 【環境】

・rails7系

### 【turbo_streamとは】

「turbo_stream」とは以下の機能を持っております。

・複数箇所のHTML要素を更新することが可能。
・HTML要素の追加・削除が可能。

ちなみに、これと対をなすものが「Turbo Frames」になります。
違いは下記です。

タグで囲った1箇所のみ更新可能。
・HTML要素の置換しか対応できない。

### 【基本的な使用方法】

### 【書き方】

“`ruby
#<%# turbo_stream.<アクション名> <ターゲットのid>, <追加するオブジェクト> %>
<%= turbo_stream.prepend "cats", @cat %>
“`

実際は下記を省略したものですが、意味だけ抑えておく。でもいいと思います。

“`ruby
<%= turbo_stream.p

Railsのコードを綺麗にしたくてRuboCopを導入したのでメモメモ

どうもこんにちは。

RSpecテストのことをメモしてたら、RuboCopのことも書きたくなったのでメモします。

# RuboCopとは?

RuboCopとは、Rubyのコードをチェックして、そのコードがRubyの良い書き方かどうかを確認するツールです。簡単に言うと、Rubyの「 **文法チェッカー&アドバイザー** 」のようなものです。

# RuboCopを導入するメリット

– 導入が簡単
– 開発チーム全体でコードスタイルを統一することができる
– バグを防ぐことができる
– 良いコードスタイルを学ぶことができる

# デメリット

特にない。。。

# RoboCopとRSpec何が違うの?

一言で言うと、「 **静的チェックか動的チェックか** 」です。

RuboCopはコードの外見を見ます。(スタイルなど)

それに対して、RSpecはコードの内面を見ます。(動作、行動)

https://qiita.com/PDC-Kurashinak/items/a3ec3d693a70540aa4da

# 導入方法

ここでは、最低限のRailsアプリケーションが構築され

RailsのバージョンアップのためにRSpecテストを書いたのでメモメモ

どうもこんにちは。

今回は以前投稿した[こちら](https://qiita.com/PDC-Kurashinak/items/3e708bff8b5d07eedc02)の記事の派生で、RSpecテストについて記載します。

https://qiita.com/PDC-Kurashinak/items/3e708bff8b5d07eedc02

# RSpecってどんなやつ?

RSpecテストとは、Railsのモデル、ビュー、コントローラなどのコードを実際に動かしているかのように **動的なテスト** をしてくれるツールです。

(コーディング規約に反していないかチェックするツールとしてRuboCopというツールがありますが、別の記事でメモしました。)

https://qiita.com/PDC-Kurashinak/items/1de32b66d95c705f5b82

# RSpecのメリット

– 書いたコードのエラーを自動で発見することができる
– Railsをバージョンアップさせたときに実行すれば、修正の必要箇所がよくわかる

# RSpecのデメリット

– 自分でテ

【今更ながらChatGPT④】GithubアカウントチェックのRubyプログラム<完成>

– GithubアカウントチェックのRubyプログラムをChatGPTに書いてもらった。
– Rubyプログラムは一度も自身で書いたことは無い。
– 参考:[シンプルなGithubアカウント一覧(単純な興味本位のみの整理)](https://qiita.com/sam-ple/items/30f7d05ef9df7e19f560)

## 結果01
– リダイレクトは次回改良。

【折り畳み】結果01のプログラム

“`ruby:sample01.rb
require ‘nokogiri’
require ‘open-uri’

# GitHubのユーザーアカウントIDを入力
print “GitHubユーザーアカウントIDを入力してください: ”
account_id = gets.chomp

# GitHubユーザーページのURLを生成
url = “https://github.com/#{account_id}”

begin
# ページのHTMLを取得
page_html = URI.open(ur

Sidekiq Shoryuken Rescue Delayed_job
GitHubスター数 12.7k 2k 9.3k 4.8k