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

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

【Ruby】paizaラーニング問題集解答(3けたごとにカンマ区切りで出力)

# 大きな数値を 3 けたごとにカンマ区切りで出力 (paizaランク C 相当)
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step6
### 自分の解答
(分かりませんでした)
### ChatGPTの解答
“`ruby
# 入力を受け取る
n = gets.chomp

# カンマ区切りで出力するための変数
output = “”

# 数値を3けたごとにカンマ区切りで出力する
(n.length / 3).times do |i|
# 3けたごとの部分文字列を取得し、カンマを付けてoutputに追加
output += “#{n[-3*(i+1), 3]},”
end

# 末尾のカンマを除去して出力
puts output.chomp(‘,’)
“`

このコードでは、まず与えられた数値Nを3桁ごとに区切ってカンマを付け、その後、末尾のカンマを除去して出力します。

### 自分の再解答
上記のChatGPTの解答では、以下のような入力と出力となる。
“`

元記事を表示

【Ruby】Amazon BedrockのClaude3 使ってみた。

先日、Amazon BedrockでClaude3が使用可能になりました!

本記事では、現在開発中のCLIツール「[omochi](https://github.com/mikik0/omochi)」で使用している Amazon Bedrock のモデルをClaude2からClaude3にアップグレードした際の変更点について紹介します。

Amazon Bedrock のモデルをClaude2 からClaude3 にアップグレードしたい方やRuby でAmazon Bedrock のClaude3 を使用したい方の参考になれば幸いです。

### 事前準備

以下の準備が完了していることを確認してください。

* Rubyのインストール
* AWSアカウントの作成
* モデルアクセスの許可

できていない項目がある場合は、以下を参考に進めてください。

https://www.ruby-lang.org/ja/documentation/installation/

https://docs.aws.amazon.com/bedrock/latest/userguide/setti

元記事を表示

【Ruby】paizaラーニング問題集解答(スペース区切りの文字列の受け取り・カンマ区切りでの出力)

# カンマ区切りで 2 つ出力 (paizaランク D 相当)
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step1
### 自分の解答
“`ruby:practice.rb
num = gets.chomp.split

puts “#{num[0]},#{num[1]}”
“`
### ChatGPTの解答
以下は、与えられた条件に基づいて問題を解決するRubyのコードです。

“`ruby
input = gets.chomp.split(‘ ‘)
puts input.join(‘,’)
“`

このコードは、入力を受け取り、半角スペースで分割して配列に格納し、それらの要素をカンマで結合して出力します。

元記事を表示

【個人開発】初心者🔰が診断ロジックを1から実装した話📕

## はじめに

先日、ユーザーの疲労タイプを診断して、診断結果にて漫画+アロマをお勧めするWebアプリを作成しました。
![文字あり.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3732604/b933a8e5-1d60-ae67-f5aa-6fb3968b3278.jpeg)

https://www.comic-health.com/

このサービスの肝になる診断ロジックの構築が大変だったので、記録しておこうと思います。
今回の診断ロジックは、回答によってポイントを加算し集計する方法で実装を行いました。

## ER図
![漫画の処方箋-ER図.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3732604/2b0d01be-b5b9-10f6-d953-87f52b3694d1.jpeg)

## 1. 診断ロジックを考える(実装前)
### 1 はじめに決めたこと
– 質問の数(10個)と内容
– Yes

元記事を表示

Rails 通知メールを送信する

# はじめに
今回Xクローンの実装にてメールにて通知を送る機能の実装をしたので、自分自身の備忘録として、また今後実装する方のお役に立てればと思いこちらの記事を書くことにしました。

# メール機能の作成
要件として、`いいね` `リポスト` `コメント` `フォロー`をされた場合、web上の通知画面とともにメールを送信して通知をお知らせする機能を実装する。

※前提としてSendGridとletter_opener_webを使用できる状態であること。

# メールを送信する
#### メーラーを作成する
“`
rails g mailer User
“`

#### ルーティングの設定
これは開発環境で使用するルーティングになります。
“`ruby:routes.rb
mount LetterOpenerWeb::Engine, at: ‘/letter_opener’ if Rails.env.development?
“`

#### サーバーの設定
メールを送信するときは、送信するサーバーが必要。と言うことで、メール送信設定を記述します。

**開発環境**
“`rub

元記事を表示

[ゆるふわ] Next.js+Railsの良いとこどりのアーキテクチャを考える

### なぜやるか

Rails7でHotwireが導入され、擬似SPA開発ができるようになり、
私的にはかなり開発体験もUXも向上したように感じます。
Hotiwireの威力をまだ感じてない人はぜひ使ってみて欲しいです!

しかし、フロントエンドにおいてDomの操作をガチャガチャし出すと、Hotwireではやはり辛くなります。
そこでガチャガチャしたいページはNext.js、それ以外のサクッと作りたいページをRailsで作れるようなプロジェクトを作ってみたいと思います。

# ▼ システムの全体
X(旧twwiter)にようなシステムを想定

### 画面
ユーザー向け
– タイムライン(`/timeline`)
– 投稿画面(`/timepine/post`)
– ダッシュボード(`/dashboard’)
– プロフィール(`/profile`)

システム管理者向け
– 管理画面

### 概要図
システムに基づいてページとシステム構成図を図示すると以下のイメージです。
タイムライン(`/timeline`)投稿画面(`/dashboard`)はUI/UXが複雑になると仮定

元記事を表示

マイグレーション、DB周りの便利なコマンド集

## はじめに
スクールの課題で、タスク管理アプリを作成しているときにマイグレーションファイルに記載している内容が、`$ rails db:migrate`してもschemaファイルに反映されないことがあり、マイグレーションの復習も兼ねてアウトプットします。修正や追加等ありましたら、コメントいただけるとありがたいです。

## 環境
・MacBookAir 13インチ M1(2020)
・OS:Sonoma 14.3
・メモリ:16GB
・Rails: version 6.1.7.6

## マイグレーションとは?

データベースの中にテーブルを作成するするために必要なもの。マイグレーションファイルを使用してデータベーススキーマに変更を反映させる仕組みです。RailsのマイグレーションファイルはRubyのプログラムで書き実行します。

**テーブルの作成**、**カラムを追加・削除**、**インデックスの追加**、**スキーマに対するあらゆる変更**は、都度マイグレーションファイルを作成してスキーマに反映するという流れをとる。したがって、データベーススキーマの変遷の歴史がマイグレーショ

元記事を表示

ActiveRecord::Reflection で Model 間の関連付け情報を取得する

株式会社学びと成長しくみデザイン研究所の藤澤です。

## はじめに

Rails の各 Model 間の関連付けの情報を実装上で取り扱うにあたり、ActiveRecord にはそれを取り出すためのメソッドとその情報を管理するクラスが用意されています。

今回は、以下のような Model を例に説明を進めていきます。
“`rb
# 1つのAuthorに複数のBookが紐付き、1つのBookに複数のPageが紐づく。
# Author の主キーは code で、Book における外部キーは author_code。
class Author < ApplicationRecord self.primary_key = :code has_many :books, foreign_key: :author_code end class Book < ApplicationRecord belongs_to :author, foreign_key: :author_code has_many :pages end class Page < ApplicationRec

元記事を表示

【ruby】 nil を渡さない 返さない

## はじめに
最近、コードレビューで「なるほど~⭐️」と思うことがあったので備忘録としてまとめようと思いました。
それは、**プリミティブな `nil` を返却するとそれ自体が意味を持ち始め、コードの意図が伝わりにくくなる**というものでした。

## nilを返したくない理由
– ロジックの至る所で`nil`を意識した設計になり、コードを読む時や機能追加する時に **`nil`が返却されるかどうかの丁寧な確認が必要** になるのでだるい

– `nil` が返されることで**条件分岐が発生し、可読性の低いコードを書いてしまいがち。**

– **「nilが返却される」 というのが一種の暗黙的な仕様になる。**

## nil を返すことで引き起こされる悲劇

では悲劇が起こる前…

タスクと1週間のタスクを管理するようなクラスがあるとします。

“`ruby
#
# タスククラス
# 何曜日に実行されないといけないか知っている
#
class Task
TODO = ‘todo’
DOING = ‘doing’
DONE = ‘done’

attr_

元記事を表示

Rails 通知機能の実装

# はじめに
今回はXクローンの実装にて通知機能の実装をしたので、自分自身の備忘録として、また今後通知機能を実装する方のお役に立てればと思いこちらの記事を書くことにしました。

# 通知機能の作成
今回は、`いいね` `リポスト` `コメント` `フォロー`をされた場合に、ウェブ上で通知を確認できる機能と、
メールでお知らせする機能を実装しました。

※ 前提として、投稿機能、いいね機能、リポスト機能、コメント機能、フォロー機能などが既に実装されているものとします。
過去に他の機能は実装しているものもあるので、合わせて参考にしてください。

また、いいね機能だけや、コメント機能だけでも、部分的に実装されている場合でも、引き抜いて実装していただければ問題ありません!!

# 通知モデルの概要
#### テーブルの情報

| visitor_id | visited_id | post_id | comment_id | action | checked |
|:-:|:-:|:-:|:-:|:-:|:-:|
| 1 | 2 | nil | nil | follow | fals

元記事を表示

Railsで画像を保存するメモ

## ソースコード
“`ruby
def create
# 登録用
product = Product.new(name: params[‘name’], price: params[‘price’], description: params[‘description’])

if params[:image]
extension = File.extname(params[:image].original_filename)
random_filename = SecureRandom.uuid + extension
product.image = random_filename
image = params[:image]
File.binwrite(“public/products/#{product.image}”, image.read)
else
product.image = “defalut.png”
end

if product.save

元記事を表示

Ruby on Railsのモジュラーモノリス化を推し進めるpacks-railsというgemがすごいという話📦

こんにちは、akitoshigaです。

現在Ruby on Railsのモジュラーモノリス化を行っており、その際に利用した`packs-rails`というgemが大変便利だったのですが情報が少なかったので紹介します。

## 1. packs-railsとは?
一定の規則に従って、単一のRails on Railsアプリケーションをモジュール分割するgemです。
このgem単体でも利用できますが主に[packwerk](https://github.com/Shopify/packwerk)と組み合わせて使われることが多いと思います。
`packwerk`とはRuby on Railsの静的解析を行うgemでモジュールごとの依存関係の管理ができます。

https://github.com/rubyatscale/packs-rails

## 2.一体何がすごいのか?
### 2.1 (ほぼ)設定不要
`packs-rails`は内部で`zeitwerk`というgemを利用しています。
`packs-rails`の指定のディレクトリ構成に従えば、`zeitwerk`のおかげで面倒

元記事を表示

Ruby 3.2以上 (というか psych 4.0.5 以上) と timecop 0.9.5以下を組み合わせると、YAML の Date がパースされなくなる

# 現象

Ruby 3.2 (というか psych 4.0.5以上)と timecop 0.9.5以下を組み合わせると、YAML の Date がパースされなくなる。

“`ruby:Gemfile
gem ‘psych’, ‘4.0.5’
gem ‘timecop’, ‘0.9.5’
“`

“`ruby:main.rb
require ‘yaml’
require ‘timecop’

puts YAML.unsafe_load(‘2024-03-14’).class
# => String
“`

# 原因

psych の `Psych::ScalarScanner#tokenize` で Date のパースをしているので、モンキーパッチしてエラーを見てみる。[v4.0.5/lib/psych/scalar_scanner.rb#L63-L69](https://github.com/ruby/psych/blob/v4.0.5/lib/psych/scalar_scanner.rb#L63-L69) を一部改変したものが以下。

“`ruby
modul

元記事を表示

Rails DM機能の実装

# はじめに
今回はXクローンの実装にてDM機能の実装をしたので、自分自身の備忘録として、また今後フォロー機能を実装する方のお役に立てればと思い今回も記事を書くことにしました。

# DM機能の作成
要件として、ユーザー同士(1対1)でメッセージを送り合うことができる機能を実装する。
※ 前提として、ユーザー登録がすでに実装されているものとします。

# DM機能の流れ
相手ユーザーの詳細ページorポストのメニューorサイドバーのメニューからチャットに進む

roomがなければ新規で作成され、そうでなければ存在するroomに遷移する

roomでメッセージを送ることができるようになる

このように至って普通なDM機能を実装していきたいと思います。

# DM機能について
DM機能では、usersテーブル、roomsテーブル、entriesテーブル、messageテーブルを使用します。

2人のユーザーがチャットルームでメッセージをやりとりするというイメージを思い浮かべながら実装していきます。

まず、ユーザーを管理するusersテーブルがあります。
ユーザーはroomsテーブルと

元記事を表示

ユーザー操作をテストする【Ruby】

# はじめに

昨日に引き続き、Rspecの記事です!

[rspec入門で知っておけばよさそうなこと #RSpec – Qiita](https://qiita.com/kohki_takatama/items/4088169c0dc726a1b136)

今回はユーザー操作を再現するテストについて。
# capybara

**ユーザー操作を再現するDSL** のようです。
Rspecと組み合わせて使われることが多いですが、別のgemのようです。

DSLとは、プログラミング言語の中でも、特定の機能に特化したものですね。
他に、SQLやHTMLなどがDSLに分類されるはずです。

## 「ユーザー操作を再現する」とは?

例えば、`click_on ‘ログイン’`で、「ログイン」というテキストのボタンをクリックできるようです。

CSSのクラスで指定することも可能(`find(‘.my-class’).click`など)

# スペックの種類

(記事としてはあまりにも短かったので)
スペックの種類をChatGPTに書いてもらいました。

|スペックの種類|説明|
|—|—

元記事を表示

先日の続き

[先日](https://qiita.com/k587mama/items/c5248e8fbb2eb3e64de2)の解決策が分かったため記述

どうやらrubyとJavaScript を同時に使うことは相性が悪かったことが原因とメンターさんに伺いました。
解としては、該当するviewファイルの中の

“`ruby
<%= form_with model: @item, local: true do |f|%>
“`
のなかに`data: {turbo: false},`を追記した
“`ruby
<%= form_with model: @item, data: {turbo: false},local: true do |f|%>
“`

と記述すること。でした。

元記事を表示

Parallel gemで実装した処理をRspecでは同じスレッド上で動かす

以下のようにParallelにて処理を並列スレッドで実行しているとき、

“`ruby:hoges_controller.rb
def index
procs = [
-> { hoge1 },
-> { hoge2 },
-> { hoge3 }
]
result = Parallel.map(procs, in_threads: 3, &:call)
end
“`
Rspecではletやsubjectが変数に対してロックを獲得するため、複数スレッドで変数の参照待ちになりデッドロックが発生し、テストが永遠に終わらなくなってしまう

それを解決するために、Rspec上では直列で処理を実行するようParallelをモックして、ブロックを呼び出すだけにする

“`ruby:hoges_controller_spec.rb
describe ‘#index’ do
subject { get hoges_path }

# Parallel.mapの引数で渡された配列をmapしてcallするだけ

元記事を表示

初心者は第一言語にPython避けるべき?

## 初心者は第一言語にPython避けるべき?

(注意:本記事はプロゲートとドットインストールでの学習をメインにしている初学者向けに書いたものです。それ以外の教材で学んでいる初心者の方にはあまり関係ないかもしれない)

そのように思う理由をざっと箇条書きにすると以下

1. カリキュラムが途中で途切れる(かも)
1. アプリ開発したいなら別の選択肢も

### 1. カリキュラムが途中で途切れる(かも)
もしプロゲートやドットインストールの教材をメインに学習している場合、Webアプリ作成まで辿り着けない可能性があります。どちらもわかりやすく学べますが、PythonコースではWebアプリ作成の指導コースがありません。(Paizaという似たような学習教材はPythonでのWebアプリ開発コースを用意してくれています。)
やったことはありませんが、ProgateならRubyで、ドットインストールならPHPで、Webアプリ開発の指導までしてくれそうなコースがある気がします。
(Webアプリを作る際、その言語に紐づくフレームワークというものを用いるのが一般的です。それぞれ有名なものだと、

元記事を表示

Dockerイメージサイズを劇的に削減する方法【Rails7】

# はじめに
近年、アプリケーションの開発とデプロイのプロセスは、Dockerのようなコンテナ化技術によって大きく変革されています。Dockerコンテナの効率的な利用において、イメージサイズの最適化はデプロイの速度を速めるだけでなく、セキュリティリスクを低減し、ストレージコストを削減する上で重要な役割を果たします。

Railsアプリケーションの開発では、その豊富な機能性と便利さにより、依存するGemやアセットが増加し、結果としてDockerイメージのサイズが大きくなる傾向にあります。

この記事では、RailsアプリケーションのDockerイメージサイズを劇的に削減するための具体的な手法を紹介し、デプロイの速度向上とコスト削減を実現する方法について解説します。

全ての検証コードはGitHubリポジトリに公開していますので、詳細は下記リンクからご確認ください。
[検証コードGitHubリポジトリ](https://github.com/mabo-matsu/rails7-docker-sample)

# 1. Rubyのベースイメージ比較
イメージサイズの比較を行った結果、下記

元記事を表示

【一網打尽】Specが書かれていないメソッドを検知する構文解析CLIツール”omochi”の紹介

## 課題

わたしは、Ruby on Rails を使ってアプリケーション開発を本業としているエンジニアです。
Railsで機能を開発すれば、当然Specも書く必要がありますよね。Specを書かないと動作確認ができていない状態でリリースしてしまう危険性があります。
しかし、開発中に多くのクラスやメソッドを書いていると、どのクラスに対して/どのメソッドに対してSpecを書いたのか忘れてしまいます。そうすると、十分に動作を検証していない状態で、PRがマージされてしまうことがあります。
Railsのアプリケーションにおいて、どのメソッドにSpecが書かれていて、どのメソッドには書かれていないのかをSpecファイルを見なくても明らかにしたい!そんなふうに考えたことはないでしょうか。
わたしは、実装を見た瞬間に対応するSpecが存在することが保証されている(または、実装側にSpecが不要であることが明示されている)ようにしたいと考え、静的解析の技術を使ったCLIツール “omochi” を作成しました。

## 作成したCLI “omochi”

>Ruby on Railsの開発を支援するC

元記事を表示

OTHERカテゴリの最新記事