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

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

SHA-1で作成したsigned_idをRails 7.0でもfind_signedで検索できるようにする

## はじめに:困ったこと・解決したいこと
Rails 7.0ではActive RecordのデフォルトのハッシュダイジェストアルゴリズムがSHA-1からSHA-256に変更されました。

https://railsguides.jp/upgrading_ruby_on_rails.html#active-record-%E6%9A%97%E5%8F%B7%E5%8C%96%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E5%A4%89%E6%9B%B4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

この変更が入ると、Rails 6.1以前に生成したsigned_idはRails 7.0以降で利用できなくなります。

“`ruby
# Rails 6.1時代に user.signed_id で生成した署名付きid
signed_id = “eyJfcmFpbHMiOnsibWVzc2FnZSI6Ik1USXpORFU9IiwiZXhwIjpudWxsLCJwdXIiOiJ1c

元記事を表示

【Ruby】each処理を簡潔に書く

見やすいコーディングを心がけながらコーディングをしてる矢先、
繰り返し処理の中身が簡潔なときにもっとスマートに書けないかなあ…と、
最近ふと思ったりしてたのでRubyのeach系の簡潔化をまとめてみました。

単語と示してる場所がよく一致しなくなるのでひとまずメモ
“`ruby:qiita.rb
配列オブジェクト.メソッド {|初期値, 要素| ブロック処理 }
“`

そして本題
“`ruby:qiita.rb
# 共通変数
arr = [1, 2, 3]
“`
## .map
用途:各要素に対して処理をする
返り値:配列
“`ruby:qiita.rb
# .eachで書いた場合
new_arr = [];
arr.each do |i|
new_arr << i * 10 end ``` ```ruby:qiita.rb # .mapで書いた場合 new_arr = arr.map{|i| i * 10} ``` ## .select 用途:blockの結果がtrueである要素を全て含む配列を返す 返り値:配列 ```ruby:qiita.rb # .eachで書い

元記事を表示

wordmoveのDB同期を動かすまで

WordPressのサーバー間同期ツールのwordmoveですが、長いことお世話になっているものの、しばらくテンプレートしか同期していませんでした。

が、数日後に運用中のサイトで価格をすべて変更するSQLを流し込むのにローカルテストをしたかったので、DBの同期を試してみましたが、予想はしてたものの、ぜんぜんうまく出来ませんでした。その原因調査した報告です。

まずは初めのエラー。

![Cursor_と_movefile_yml_—_local-site3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38388/164cebf7-c9a1-dd9d-5bca-99cdc66d0546.png)

“`
OpenSSH keys only supported if ED25519 is available
“`

wordmoveを動かしているコンテナ内のOpenSSHでは Githubの公式でもキーの生成に案内されているED25519が使えないとのこと。
ED25519で暗号化された認証鍵は次の

元記事を表示

【Ruby初級】クラスメソッドを用いて野菜の金額を表示する

# 問題
以下の要件を満たすVegetableクラスを実装しましょう。

### 条件
##### クラスメソッド
メソッド名:description
処理:”新鮮で美味しい野菜です”と表示する

##### インスタンス変数
name:野菜の名前
color:野菜の色

##### インスタンスメソッド
メソッド名:initialize
処理:引数で名前と色を受け取り、インスタンス変数に代入します。

メソッド名:details
処理:”【名前】は【色】です”と表示します。

### 雛形
“`ruby
class Vegetable
def クラスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end

def initialize
# ここに処理を記入してください
end

def インスタンスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
end

# 3つのインスタンスを生成してください

# クラスメソッドを呼び出し、「新鮮で美味しい野菜です」と表示してください

元記事を表示

Rubyでハッシュを文字列にできるのに文字列をハッシュにできなくて困りました

# 結論
`eval`を使えば大体できる。使い所は`testコード`。
# 背景
ハッシュを文字列にしたログの出力結果をminitestで検証しようとした時に、文字列をハッシュに変換し、各項目に正しく値が入っていることを確認しようとした時でした。
**文字列に対してto_hashしようとしてもエラーになる。**
ハッシュオブジェクトに`to_s`すると文字列になるのに、文字列に対して`to_hash`するとエラーになります。
どうすれば文字列をハッシュに変換できるか、私なりに考えてみました。
# evalを使う
evalを利用すると簡単に文字列をハッシュに変換することができます。
“`ruby
hoge_hash = { key1: ‘hogehoge’, key2: 999 }
# => {:key1=>”hogehoge”, :key2=>999}
hoge_string = hoge_hash.to_s
# => “{:key1=>\”hogehoge\”, :key2=>999}”
eval(hoge_string)
# => {:key1=>”hogehoge”, :key

元記事を表示

【Ruby初級問題】それぞれの野菜の重さは合計いくつ?

# 問題
以下のように、野菜の名前と重さが入った配列があります。この配列を用いて、野菜の名前とそれぞれの総重量が出力されるコードを記述してください。

“`ruby
veggies_weight = [[“carrot”, [120, 150, 130]], [“potato”, [200, 250, 180]], [“onion”, [100, 80, 90, 110]]]
“`

### 出力例
“`
carrotの総重量は400グラムです”
“`
## ヒント
`sum`メソッドを使いましょう。
リスト内のすべての値を合計してくれます。

### 例
“`ruby
banana_price = [100, 100, 100]

puts banana_price.sum
# 出力結果「300」
“`

# 回答
“`ruby
veggies_weight = [[“carrot”, [120, 150, 130]], [“potato”, [200, 250, 180]], [“onion”, [100, 80, 90, 110]]]

veggies

元記事を表示

【Rails】FontAwesomeのCDN読み込みと使い方

## はじめに
この記事では、「Font Awesome」のCDN(Contents Delivery Network)を使った読み込み方法と基本的な使い方についてまとめました。
SNSのアイコンや設定、編集、削除などの機能をアイコンで表現する際に、Font Awesomeは非常に便利です。自前でアイコンを作成する手間を省き、豊富なアイコンライブラリを簡単に活用できる方法をお伝えします。

この記事が皆さんの役に立てば幸いです。

## 環境
– rails
– docker
– taiwindcss

## Font Awesomeセットアップ

まずはFont Awesomeの公式ページにアクセスし、アカウントを作成します。

https://fontawesome.com/

登録後、以下の手順で自分用のCDNリンクを取得します。

### 1.ヘッダーメニューまたは画面中央の「**Your Kits**」をクリックします。

![スクリーンショット 2024-06-12 10.26.50.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

【超初心者未経験】udemyで「ruby on rails」を学習してみた ①

# ① はじめに

初投稿になります🌷
IT業界に未経験で転職して約1週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます!

# ② 使用した教材

今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。

![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)
                       

元記事を表示

【Ruby】世界恐慌が本当に木曜日から始まったのかを検証してみた

## はじめに
*この記事は、Rubyを使えば簡単に曜日を算出できるということを伝えたいという思いから生まれたものです。

さて、皆さんは「世界恐慌」と呼ばれるものを知っていますでしょうか?

おそらくご存知でしょうが、念のため簡単に説明しておきます。
### 世界恐慌とは?
1929年10月24日にニューヨーク・ウォール街の株式取引所で株価が大暴落したことによって世界的な不景気に突入しました。
これを世界恐慌といいます。
また、この株価大暴落は「暗黒の木曜日」とも言われいます。
### 暗黒の木曜日(1929年10月24日)って本当に木曜日?
世界恐慌の始まりが「暗黒の木曜日」と呼ばれていることについて、今更不信感を覚えたのでRubyを用いて検証しようと思います。

## Rubyで曜日を計算する方法は?
`.wday`メソッドを使うと、曜日を0(日曜)から6(土曜)の数字で表現することができます。
具体的な使用方法は以下のコードをご覧ください。
“`check.rb
# 今日は2024年6月3日(月)です。
week = [‘日曜日’, ‘月曜日’, ‘火曜日’, ‘水曜日’,

元記事を表示

OptionParser のオプショナルで non-space な指定の可否


Ruby の OptionParser の挙動の考察を書き残します。

OptionParser のあまり知られていなさそうなこととして、オプショナルなパラメーターをとるスイッチの定義の仕方が 2種類あり、指定時(パース時)の挙動が違うということです。


まず、ショートオプション、ロングオプションなどと呼ばれているものは、本来は「スイッチ」と呼ぶべきだと思います。
OptionParser::Switch クラスですから。

そして、ハイフン1つから始まるものはショートスイッチ、ハイフン2つから始まるものはロングスイッチです。また、スイッチには、▷パラメーター(argument)をとらないスイッチ、▷必須の(mandatory な / required な)パラメーターをとるスイッチ、▷任意の(optional な)パラメーターをとるスイッチ――の3つがあります。

パラメーターをとらないスイッチは、

* `opt.o

元記事を表示

【参加レポ】RubyKaigi 2024 に行ってきました!

# はじめに

RubyKaigi 2024 に行ってきました!

https://rubykaigi.org/2024/

この記事では、僕が聴講したセッションのうち特に印象に残っているセッションを紹介します!

# Writing Weird Code

https://rubykaigi.org/2024/presentations/tompng.html#day1

最初に紹介するのは、1日目の Keynote 「Writing Weird Code」です。

これが RubyKaigi 2024 の最初のセッションだったのですが、一番印象に残っています。

このセッションについて説明する前に、まずはこちらをご覧ください。

一見、動くアスキーアートのように見えますが、よく見てみると Ruby のプログラムであることがわかります。さらに、止めてコピーして実行すると、止めたところからまた動きます。

このように、プログラムを実行するとそのプログラムと同じものが出力されるプ

元記事を表示

Ruby3, Rails7, MySQL, Tailwind, Dockerで作成する流れ

## 1. リポジトリを作成する

![スクリーンショット 2024-06-11 16.24.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731095/6ca9f8ed-9846-7f4f-a3d6-1aad38fc9185.png)

`rails new`すると`README.md`も作成されるので、この時はチェックしなくてもいいと思います。

## 2. 任意のディレクトリで Clone & CD

“`zsh:zsh
git clone git@github.com:yoshiki1007/rails7-todo.git
Cloning into ‘rails7-todo’…
warning: You appear to have cloned an empty repository.
“`

空のリポジトリをクローンしたというメッセージが出ますが、実際に空ですので問題ありません。

“`zsh:zsh
cd rails7-todo/
“`

## 必要なファイルを作成する

元記事を表示

【個人開発】プログラミング初心者がテスト成績を管理するアプリを作成しました。

# はじめに
前職は、公立中学校で教師をしていました。
授業の中で、毎回小テストを行っていたのですが、結果が視覚的に分かりやすくなるよう、折れ線グラフにして記録させていました。その結果、生徒の小テストに対するやる気が向上していきました。
しかし、生徒一人ひとりのデータを個別に折れ線グラフにする作業が非常に手間であるという課題がありました。
また、学期末の成績を出す際、生徒が小テストや、実力テスト、定期考査など異なる種類のテストを受ける中で、成績の伸びを正確に把握することが難しいと感じていました。

# サービス概要
### My Progress Report
URL: https://myprogressreports.com/
![Qiita](https://i.gyazo.com/3b9d9476285cc3be6170a7004b44fcf9.jpg)
テスト成績を管理するアプリです。
* ユーザーはテストの名前、取得点数、そして最大得点が何点かを入力し、自動的に達成率が計算されます
* これまでのテスト履歴を一覧で確認し、達成率の推移を折れ線グラフで視覚的に把握することが可

元記事を表示

Rails7.1以降でも ActiveStorage の has_many_attached を 編集時既存ファイルを残す(上書きしない)挙動にする方法まとめ

## 超要約

ActiveStorage の `has_many_attached` に関する下記設定(Rails7.1 で廃止)の代替は
“`ruby:config/application.rb
config.active_storage.replace_on_assign_to_many = false
“`

下記のモデル拡張用モジュールを作成すれば(モジュール名は何でもよい)
“`ruby:app/lib/attach_many_extension.rb
module AttachManyExtension
module ClassMethods
def has_many_attached(arg)
super

delete_ids_attr = “delete_#{arg.to_s.singularize}_ids”
public_send(:attr_accessor, delete_ids_attr)

define_method :del_attr_nm do delete_ids_attr end

元記事を表示

GPT-4o同士で会話して会議を代行するプログラムを作る(プロト版)

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/3ec95047-ec6f-5f23-60e0-5de63c7d63f9.png)

# 趣旨
AI同士で会話する方法はいくつか世に紹介されているが、自分が求める機能とは異なる部分もあるため、理想とするプログラムを自分で作ってみることにした。

# 目的
AIに会議を丸投げして楽したい。

# 環境
– Windows 11
– Ruby 3.3.1
– ChatGPT API(モデルはGPT-4oを指定)

# 基本的なアプローチ
会話する人のペルソナを作り、ペルソナを通じてChatGPTに質問します。ChatGPTからの回答をペルソナの発言(意見)として扱います。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/713d681c-fbb4-924d-d41a-191e41f23073.png)

次に別のペルソナを作り、

元記事を表示

Rails7系にviteを使ってVue3を入れてみた

## はじめに

Rails7系にはWebpackerが非推奨なのでいままでのようにインストールことができません。そのため備忘録としてRails7にviteを使ってVue3を入れる方法をまとめてみました。

https://github.com/eyamagishi/rails_vue_app

## 実行環境

– Ubuntu:22.04.4 LTS
– Ruby:3.1.2p20
– Rails:7.1.3.4
– Vue:3.4.27

## Railsプロジェクトの新規作成

Railsプロジェクトを作成するために以下のコマンドを実行します。

“`bash
rails new rails_vue_app
cd rails_vue_app
“`

サーバーを起動するため以下コマンドを実行します。

“`bash
rails s
“`

以下の画面が表示されれば次へ進みます。

![スクリーンショット 2024-06-09 121152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29

元記事を表示

Rails 7.2をちょこっと試す(query and cached ログ編)

# はじめに

rails 7.2beta2 がリリースされたので、ちょっと試してみました。

rails 7.2 では、Rails のログに、実行されたSQLの数が表示されるようになりました。

## ログの確認

Rails 7.1 では、以下のようなログが出力されます。
Rails 7.2 で変るのは、最後の `Completed` の行の `ActiveRecord: 2.2ms` の部分です。

“`sh
Started GET “/books” for 172.25.0.1 at 2024-06-09 08:27:47 +0900
Cannot render console from 172.25.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
ActiveRecord::SchemaMigration Load (0.1ms) SELECT “schema_migrations”.”version” FROM “schema_migrations” ORDER BY “schema_migrations”

元記事を表示

Rails のアップデートで、 new_framework_defaults_x_x.rb をコメントインし忘れてないですか?

tldr; Railsのアップデートするとき、`config.load_defaults x.x` に対応した `new_framework_defaults_y_y.rb` に書かれた内容をコメントインして有効にしないと意味ないので注意。

# たとえば Rails 7.0 -> 7.1 にアップデートするとき

“`ruby:config/application.rb
config.load_defaults 7.0
“`

して、7.1の新設定は `new_framework_defaults_7_1.rb` でひとつずつコメントインしていく、というのが[オフィシャルの手順](https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#configure-framework-defaults)だが、このコメントインしていく作業を忘れると、そのrailsは 7.0 のデフォルト設定で動いている。 7.1 の主にBREAKINGな設定は有効になっていない

これを忘れたまま 7.2 にアップデートしようとして `conf

元記事を表示

【Rails】Sorcery使用によるGoogle認証の注意点

## はじめに
この記事では、Gem「“`sorcery“`」を使用したGoogle認証に関する注意点をまとめました。具体的な実装方法の解説は行わず、確認すべき重要なポイントについて触れています。

Google認証を導入するなら「“`devise“`」の方が一般的でおすすめですが、既に「“`sorcery“`」を用いてログイン機能を実装している方のために書いています。私自身、sorceryでGoogle認証を実装する際に情報が少なく苦戦したため、同様に苦戦している方々の助けになれば幸いです。

## 環境
– ruby 3.2.3
– rails 7.1.3
– Docker

前提条件としてsoceryによるログイン機能に加えて、Google認証導入までも一通りできている(エラー・不具合込み)とします。

## 確認すべきこと・詰まるポイント
sorceryを使用してGoogle認証を導入する際の確認事項と詰まりやすいポイントについて解説します。

### 承認済みリダイレクトURI
まず、Google Cloudコンソールに登録した承認済みリダイレクトURIと、Ra

元記事を表示

RubyでQwen2クイックスタート(pycall.rbを使用)

# はじめに
LLMを使ったプログラムを書いてみようと思って、手始めに[Qwen2のクイックスタート](https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html)をRubyでやってみました。pycall.rbを経由してHuggingface Transformersを使う手法なので他のモデルでも使用可能かと思います。

# 前提
– RTX 3060
– Ubuntu 20.04 LTS
– Ruby 3.3.2
– Python 3.8.10

# 実装
Quickstartのサンプルコードほぼそのままです。

“`ruby:quickstart.rb
require ‘pycall’
device = ‘cuda’
path = “/path/to/models/Qwen_Qwen2-7B-Instruct”

quantization_config =
PyCall.import_module(‘transformers’).BitsAndBytesConfig.new(
load_i

元記事を表示

OTHERカテゴリの最新記事