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

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

データを取得するために、何気なく使用していた、findメソッド・whereメソッドそれぞれから得られる結果の違いについて

## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-

データを取得するために、深く考えずに使用していたfindメソッドとwhereメソッド。だが、スクールで課題に取り掛かっていた時に、得られる結果に奥深い違いがあることを知り、追求したくなったので、とりあえず現時点でわかったことをまとめたいと思います。

今回、tasksテーブルが以下のように定義されている。
|name|content|created_at|updated_at|以下、関係ないので省略…|
|:-:|:-:|:-:|:-:|:-:|

## あるタスクの内容(content)のデータを取得しようとwhereを使ったら、エラーになった!!なぜだ!!

`task.content` という形で、あるタスクの内容のデータを取り出すために、まず、
`task = Task.find(39)`として、idが39のデータを取り出そうとしたが、この日の私は、最近findばかり使用しているから、whereにも慣れたいなと考え、whereを用いてデータを取得

元記事を表示

Ruby 3.3.0 Rails 7.1.3 でYJITを有効にする

あるWebアプリケーションの Ruby on Rails のバージョンを`7.1.3`に上げました。 Ruby のバージョンを`3.3.0`に上げました。

ついでにYJITを有効にしました。
[Enable YJIT · pubannotation/pubannotation@f9284cd](https://github.com/pubannotation/pubannotation/commit/f9284cd97a57af10e05b33360c0c45634749a97e)
次のファイルを追加しました。

“`ruby:config/initializers/enable_yjit.rb
if defined? RubyVM::YJIT.enable
Rails.application.config.after_initialize do
RubyVM::YJIT.enable
end
end
“`

運用中に何かの理由で無効にしたくなったら、コメントアウトするかファイルごと削除します。
この方法は、最新のRuby on Railsに取り込まれているそのま

元記事を表示

Faradayで302でログイン画面に飛ばされたときに再ログイン

RubyでHTTP通信して何か情報を取ってくるときには、だいたい [Faraday](https://github.com/lostisland/faraday)を使うと楽だ。

* 公式ドキュメント https://lostisland.github.io/faraday/#/
* Faradayの使い方 59のレシピhttps://nekorails.hatenablog.com/entry/2018/09/28/152745

あたりを見れば大体の使い方はわかる。かりに、使い方が分からなくてもソースコードを読めばなんとなく動きはわかる。

## まえおき

CakePHPで作られた古い社内サービスをスクレイピングするスクリプトを組んでたんだけど、何か知らないけど、ときどきUser/Passを入れ直せと、ログイン画面に飛ばされてしまってた。

* Authorizationヘッダーじゃなくて、クッキーで認証管理されてる
* 再認証のときはHTTP 401ではなく302でログイン画面に飛ばされるだけ

ということで、Faradayの標準の仕組みではどうにもならなさそう、ということで調

元記事を表示

AWS SDK for Rubyを使ってCloudWatch Logs Insightsの分析内容を取得する

# はじめに
CloudWatchのログの内容が膨大なときはCloudWatch Logs Insightsを使って必要なログのみを取得し分析していたのですが、AWS SDK for Rubyを使ってCSV形式で出力する機会があったのでその方法についてまとめてみました。

CloudWatch Logs Insightsをあまり使ったことがない方、CloudWatchのログデータをCSV形式で取得する方法について興味がある方のお役に立つかと思います!

# CloudWatch Logs Insightsとは?
独自のクエリ構文を使いCloudWatch Logsのログデータをインタラクティブに検索、分析できるAWSが提供するサービスの一つです。

:::note info
CloudWatch Logsとは?
CloudWatchの機能の一つで、AWSのリソースやアプリケーションから生成されるログデータを収集、監視、保存する
:::

CloudWatchのサイドバーから「ログのインサイト」に進むと操作画面に移ります。

![image.png](https://qiita-imag

元記事を表示

RoRにおける検索時の表記揺れ対応(漢字、カタカナ、ひらがな)

## 事象

検索機能を実装する際、表記揺れに対応する必要が生じました。例えば、検索ワードが「東京」の場合、「とうきょう」や「トウキョウ」といったひらがなやカタカナ表記でもヒットさせる必要がありました。また、「コンビニ」というカタカナで入力された場合には、「こんびに」というひらがな表記での検索にも対応することが求められました。この記事では、Ruby on Railsを使用して、これらの表記揺れに柔軟に対応する方法を共有いたします。

また、このアプローチは、「漢字のみ」「カタカナのみ」「ひらがなのみ」といった通常のパターンだけでなく、「漢字とカタカナとひらがな」「漢字とカタカナ」「漢字とひらがな」「カタカナとひらがな」といったイレギュラーなパターンに対しても柔軟に対応できます。これは、各文字が漢字、カタカナ、またはひらがなかどうかを個別に判断し、それに応じて適切な変換を行うことにより実現されています。この方法により、多様な表記揺れに対応することが可能になり、検索機能の精度を高めることができます。

## 対処法

以下のコードスニペットでは、RubyのStringクラスにStringH

元記事を表示

gem `better_errors` の使い方【Ruby on Rails】

# はじめに
`bettr_errors`はRubyのgemで、特にRails開発において有用なツールだそうです。
コマンドを覚える必要もなく、開発環境においては入れるだけ得!なgemです。
# 使い方
特徴
– 詳細なエラーページを表示してくれる
– エラーが発生した場所でコードを試行できる
– エラーが発生した時点の変数を確認できる
– エラーが発生したソースコード周辺を表示してくれる

以上の特徴により、問題の原因を突き止めやすくなります。
## インストール
### 1. `Gemfile`に追記
“`rb
group :development, :test do
# …省略

gem ‘better_errors’
gem ‘binding_of_caller’

# …省略
end
“`
`binding_of_caller`は、エラーが発生したコードの呼び出し元も教えてくれるgemです。
`better_errors`と一緒に使用されることが多い。
### 2. 追記したgemのインストール
“`bash
$ docker compose r

元記事を表示

Rubyにおけるオブジェクト指向と基本の書き方

Rubyにおけるオブジェクト指向やクラス、インスタンスの生成、クラスの継承に関して理解が難しかったので、アウトプットを兼ねて記事にしてみました。
学び始めて間もないので認識が間違っている場合がありますので、ご了承ください。

1. [クラスの作成](#1-クラスの作成)
2. [メソッドの組み込み](#2-メソッドの組み込み)
3. [オブジェクトのインスタンス化](#3-オブジェクトのインスタンス化)
4. [インスタンス変数とinitializeメソッド](#4-インスタンス変数とinitializeメソッド)
5. [ゲッターメソッド、セッターメソッド](#5-ゲッターメソッドセッターメソッド)
6. [クラスの継承](#6-クラスの継承)
7. [モジュール](#7-モジュール)

# 1. クラスの作成
“`ruby
class Person#クラス名

end
“`
– クラス名は英大文字から始める(Human)
– クラス名はキャメルケース(PerfectHuman)で記述する

# 2. メソッドの組み込み
“`ruby
class Person#クラス名

元記事を表示

【Rails】carrierwaveでファイルをアップロードする時に、元々のファイル名(オリジナル名)をカラムに保存されるようにする

## はじめに
carrierwaveで投稿に添付ファイルをアップロードする機能を作成しました。
その機能では、ローカル環境に保存するためセキュリティの問題でファイルを保存するときにランダムなファイル名に変更されるようにしております。
しかし、画面にファイル名を表示する時は元々のオリジナルのファイル名を表示する必要がでてきたので、今回はこの問題を対応した。
carrierwaveでのファイルの投稿機能自体については省略します。

## 環境
`Rails 7.0.4`

## 変更前のテーブル
|Posts|
|:–|
|title|
|text|
|attachment_file|

## 実際に対応したこと
Postsテーブルにoriginal_file_nameカラムを追加して、attachment_fileを保存する前ににファイルのオリジナルのファイル名をoriginal_file_nameに保存する処理を追加しました。

## original_file_nameカラムを追加します
~~~ruby:db/migrate/20240101XXXXXX_add_column_p

元記事を表示

paizaラーニング解答: 正規表現メニュー[Ruby]

# 正規表現メニュー
https://paiza.jp/works/mondai/regular_expression/problem_index?language_uid=ruby

## STEP: 1 文字列の検索
“`ruby
s = gets.chomp
puts s.index(/paiza/)
“`

## STEP: 2 メタ文字の検索
“`ruby
s = gets.chomp
puts s.index(/\\\(\^\ \.\ \^\)\//)
“`

## STEP: 3 任意文字の検索
“`ruby
s = gets.chomp
puts s.index(/p..za/)
“`

## STEP: 4 クラス指定文字の検索
“`ruby
s = gets.chomp
puts s.index(/Math[123][ABC]/)
“`

## STEP: 5 クラスの否定の検索
“`ruby
s = gets.chomp
puts s.index(/[^0123456789]…../)
“`

## STEP: 6 範囲指定文字の検索

元記事を表示

【個人開発】お弁当作りをサポートするアプリ「いつものお弁当」を作りました!【Rails】

# はじめに

こんにちは、あっぴー(@super-appy)と申します。
プログラミングスクールに通ってRuby on Railsを学習しています。
先日、お弁当作りをサポートするアプリをリリースしたので、アプリの紹介と技術についてまとめます!
よろしくお願いします。

## 目次
1. WEBアプリの紹介
1. 技術構成
1. こだわった点
1. 少しだけ後悔している点
1. 参考にした記事など

# 1. Webアプリの紹介
今ある材料で作れるレシピを生成できるAIレシピと、お弁当の記録カレンダーでお弁当作りをサポートするアプリです。

![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2724148/3d45634a-ac8a-11cf-6436-36f927069fef.png)

サービスURL(レスポンシブ対応しておりますので、スマホからもどうぞ)

https://everydaylunchbox-d534442e43a4.herokuapp.com/

Github

http

元記事を表示

ChatGPTを使って論文の全文を翻訳する

## はじめに

ChatGPTを利用して、自動で論文を翻訳したい人はたくさんいると思います。しかし、PDFの壁、403 Forbiddenの壁、Token数の壁などに阻まれて、サクッとはいきませんよね。

この記事では、オレオレツールを利用して、ChatGPTを利用して論文を日本語に翻訳する方法を紹介しています。あまり整頓された方法ではありませんが、誰がやっても原則は変わらないと思うので、同じようなことをしようとしている誰かの参考になると幸いです。

## 基本方針

1. [Zotero](https://www.zotero.org/) を使ってウェブページのスナップショットを取る
2. Rubyの [Nokogiri](https://github.com/sparklemotion/nokogiri) を使って論文を分割して保存する
3. ChatGPTのAPI版で翻訳する

## 利用するツール

– [Firefox](https://www.mozilla.org/firefox/) – ブラウザ
– [Zotero](https://www.zotero.org/)

元記事を表示

しりとり

Rubyでしりとりプログラムを作成しました。

“`Ruby
# しりとりプログラム
# 名鉄でんちゃん
# 2024/1/25
# データ数を入力する
def error_msg()
puts “正の整数を入力してください”
end

def correct(num1,num2)
if num1 == num2 then
puts “Yes”
end
end

puts “正の整数を入力してください”
while true
data1 = gets.chomp
begin
num = data1.to_i
if num < 1 then puts "1未満の整数が入力されています" error_msg() else break end rescue error_msg() end end a_str = "" b_str = "" count = 1 for i in 0...num do puts "文字を入力してください" data2 = get

元記事を表示

各言語における「symbol」はそれぞれ違う件(Ruby, JavaScript, TypeScript, Dart)

# はじめに

色んなプログラミング言語を勉強していくと、違う言語においてある単語が似たようで実は違うものとして使われることがしばしばありますね。今回はその中で今回「**シンボル**」(**symbol**)というものに関して話します。

`Symbol`というクラスは**Ruby**でも、**JavaScript**と**TypeScript**でも、**Dart**でも存在しますが、それぞれの言語でかなり違う概念です。

実際にRubyとDartでのシンボルは大体似ているから、Ruby経験者ならDartのシンボルのことも簡単に理解できるかもしれません。

しかしJavaScriptでは全く別物です。DartがJavaScriptに似ているとよく言われていますが、シンボルに関しては全然違うので、混同してはいけないことです。

確かにDartはあまりRubyに似ていないが、シンボルの概念のことだけはRubyの影響を受けている可能性がありますね。

Dartは比較的に新しい言語で、最近スマホアプリの開発に使われるFlutterの言語として広く知られるようになったばかりで、こうやってDar

元記事を表示

経過月数を小数点込みで確認したい(Ruby)

## あらまし
例えば退職された方が、その会社に何か月在籍していたのかを計算する際に「25ヶ月在籍してた」というのはとても簡単に計算出来るけど、日数まで含めて「24.67ヶ月在籍してた」という計算の仕方は意外とサンプルコードが転がっていないようです。

無ければ作れば良いという事で作成したので誰かの何かの役に立てれば。

## 考え方
年と月は簡単です。
上記の例では退職日と入社日の差分を取ったうえで”年”は12をかけて”月”と足すだけです。

“日”をどうやって小数点にするかですが、退職日から入社日の差分を取り、退職月の日数を取得して割り算をしています。(1月の場合は31日で割り、2024年2月の場合は29日で割ります)

これをせず雑に30で割ると、小数点以下が若干おかしな事になってしまいます。

……と思ってコード書いて完成したつもりでしたが見直してたらバグがありました。
2/2入社、2/29退職 0.97ヶ月 → OK
2/1入社、2/29退職 1.0ヶ月 → OK
1/31入社、2/29退職 0.93ヶ月 → NG (本来1.03になってほしい)

## 修正版 考え方
結構

元記事を表示

【AtCoder】トヨタ自動車プログラミングコンテスト2024#1(AtCoder Beginner Contest 337)解法メモ【Ruby】

# はじめに

ABC337に参加しました。
今回はA~Eの5問完答できたのでE問題までメモを残します。

# [A – Scoreboard](https://atcoder.jp/contests/abc337/tasks/abc337_a)

スコアの合計から勝敗を求める問題。

入力を合計して大小を比べるだけなので素直に実装する。

自分の回答

“`ruby
n = gets.to_i
t = 0
a = 0
n.times do
tt, aa = gets.split.map(&:to_i)
t += tt
a += aa
end

if t > a
puts “Takahashi”
elsif t == a
puts “Draw”
else
puts “Aoki”
end
“`

# [B – Extended ABC](https://atcoder.jp/contests/abc337/tasks/abc337_b)

Aからなる文字列+Bからなる文字列+Cから

元記事を表示

【Ruby on Rails 】undefined method `image_name’ for nil:NilClass

# 初めに

投稿一覧ページでそれぞれの投稿に紐付いているユーザ名や画像を表示できなかったので書きます。

# 問題

以下エラーに遭遇しました。

![スクリーンショット 2024-01-24 20.09.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536873/d6ec7692-41ee-d728-fef1-652a6d0f0b89.png)

# 解決方法

エラー文から推測して、この辺りを調査しました。

① Viewファイルの誤字脱字

② Postsコントローラーのindexアクション内でインスタントメソッドuserの定義忘れ

③ インスタントメソッドの理解不足

②まで調査して、インスタンスメソッドが何をしているのか理解できていなかったので復習しました。復習を終えて、③が原因ではないと分かりました。そこで、こちらの記事を参考にデータベース周りを調べました。

https://qiita.com/TeppeiMimachi/items/755639c775c72cb73ad9

元記事を表示

商品一覧表示機能の実装(ActiveHashの使用)

# はじめに
プログラミング初心者です。
自分のアウトプットのため投稿しています。
間違っているところがあれば、指摘していただけますとありがたいです。
# 商品一覧出品機能の実装
サーバーに保存されているデータをビューに反映させます。
今回はActiveHashを利用したフリマアプリですが、いつもとそんなに変わりません。
[![Image from Gyazo](https://i.gyazo.com/2d6ace9a6e89bb517a40ca1c84298253.png)](https://gyazo.com/2d6ace9a6e89bb517a40ca1c84298253)
ActiveHashを使用している場合、このままだと
[![Image from Gyazo](https://i.gyazo.com/f6baa88ecbdb0710108bdc9b41e7cf74.png)](https://gyazo.com/f6baa88ecbdb0710108bdc9b41e7cf74)
このような表示になってしまうので、nameをつけます。
[![Image from Gyazo

元記事を表示

【解説付き】複数回のランダムアクセス(ランクD】 Ruby

# 初めに
paizaのレベルアップ問題集を解いていたのですが、これだけ問題の意味がわからなかった、、
Cランクの問題とか普通に解けたのに、、
[このブログ](https://blog-it.hatenablog.com/entry/programming/c/random/access/plural)を読んでようやく意味が分かりました。
わかってしまえば全然難しいものではありません。
ただ問題文が少し抽象的且つRubyの解説が載っていなかったので、同じように躓いた初学者のためにRubyでの解説を残しておきます。

[複数回のランダムアクセス (paizaランク D 相当)](https://paiza.jp/works/mondai/data_structure/data_structure__array_step2/edit?language_uid=ruby&t=2d5e2d03a113588c517f8c90ac523ee2)

# 解説

問題の目的を簡単に要約すると、

**2列目で与えられた数値列から4列目で与えられた数値列の各数値番目の要素を取り出してくださいね*

元記事を表示

LiveViewとRails HotWireの比較

[piacere](https://twitter.com/piacere_ex) です、ご覧いただいてありがとございます :bow:

下記コラムで、Rails 7に標準搭載されたHotWireを試しましたが、Elixir/PhoniexのLiveViewと比較してみたいと思います

https://qiita.com/piacerex/items/b9cd99e2e051d24ce180

# 方式

## a)部分ページロード/レンダリング

### LiveView

– MorphJSによるDOMの部分更新
– LiveView StreamsによるDOMの部分追加/更新/削除

### Rails

– Turbo Driveによるリンク操作のインターセプトとfetchへの置換、bodyタグ内のみの置換
– Turbo FramesによるDOMの部分更新
– Turbo StreamsによるDOMの部分追加/更新/削除

## b)サーバサイドのデータ更新をフロントに反映

### LiveView

WebSocketによるPub/sub

### Rails

WebS

元記事を表示

【Rails】動的にDBのテーブルにカラムを追加してみる

どうもこんにちは。

今回は、動的にDBのテーブルにカラムを追加する方法をメモしていきます。

# 動的にカラムを追加とは?

本来であれば、DBのテーブルにカラムを追加する場合には、以下のような手順を踏むと思います。

1. マイグレーションファイル生成

“`sh
rails g migration AddNewColumnToSample
“`

2. マイグレーションファイル編集

“`ruby
class AddNewColumnToSample < ActiveRecord::Migration[7.0] def change # addcolumn :テーブル名, :カラム名, :データ型 add_column :samples, :new_column, :string end end ``` 3. マイグレーション実行 ```sh rails db:migrate ``` しかし、「custom_itemsテーブルにデータが登録された場合に、登録されたデータの名前でsamplesテーブルにカラムを追加したい」ということが出てきます。

元記事を表示

OTHERカテゴリの最新記事