- 1. RSpecで日時を指定してテストを実行する
- 2. Rails/devise_アカウント情報編集ボタンが反応しない場合解決方法
- 3. Rails_リクエストがDELETEの代わりにGETで送信される場合の対処法!
- 4. 【Ruby】スキージャンプの飛型点計算プログラム
- 5. OpenAPIとは?基本的な構造、書き方、使用例について調べてみた。
- 6. 「Ruby on Rails チュートリアル」でローカル環境を構築して「git push」まで実施する方法・前編
- 7. 【Ruby】paizaラーニング問題集解答(3けたごとにカンマ区切りで出力)
- 8. 【Ruby】Amazon BedrockのClaude3 使ってみた。
- 9. 【Ruby】paizaラーニング問題集解答(スペース区切りの文字列の受け取り・カンマ区切りでの出力)
- 10. 【個人開発】初心者🔰が診断ロジックを1から実装した話📕
- 11. Rails 通知メールを送信する
- 12. [ゆるふわ] Next.js+Railsの良いとこどりのアーキテクチャを考える
- 13. マイグレーション、DB周りの便利なコマンド集
- 14. ActiveRecord::Reflection で Model 間の関連付け情報を取得する
- 15. 【ruby】 nil を渡さない 返さない
- 16. Rails 通知機能の実装
- 17. Railsで画像を保存するメモ
- 18. Ruby on Railsのモジュラーモノリス化を推し進めるpacks-railsというgemがすごいという話📦
- 19. Ruby 3.2以上 (というか psych 4.0.5 以上) と timecop 0.9.5以下を組み合わせると、YAML の Date がパースされなくなる
- 20. Rails DM機能の実装
RSpecで日時を指定してテストを実行する
コード内で、下記のように現在の時間を指定して実行しているコードがあった。
“` ruby
# 現在の日時は営業日かの判定
isWorkDayToday = Time.current.to_date.workday?
“`この「現在の時間」が例えば⚪︎月⚪︎日というように自身が設定した日時でテストをしたい。
## TimeHelpersを使う
今回はRubyのTimeHelpersを使うことにした。メソッドがいろいろありますが、今回はtravel_toを使うことに。
## rails_helper.rbの設定
“` Ruby
# 下記の設定を追加
require “active_support/testing/time_helpers”
RSpec.configure do |config|
config.include ActiveSupport::Testing::TimeHelpers
end
“`## テストを書く
“` Ruby
require ‘active_support/testing/time_helpers’RSpec.descri
Rails/devise_アカウント情報編集ボタンが反応しない場合解決方法
# はじめに
初歩的な記述ミスが原因で起こったエラーですが、
原因を見つけためにかなり時間がかかったのでまとめます:joy:# 環境
・Ruby 3.1.2
・RubyGems 3.3.7
・Bootstrap 4.6.2
・class Public::UsersController < ApplicationController作成済み ・Deviseを使用してユーザー認証機能を実装 # 1.発生した問題 マイページ内にある「編集する」ボタンを押して会員情報編集画面に遷移したあと、 会員情報を編集し、「編集内容を保存」を押すと、更新されない(__ボタンが反応しない__)ことがある。![スクリーンショット 2024-03-18 010002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724261/22736ad3-01f6-2af3-32b5-e92d3b9a1f11.png) ![スクリーンショット 2024-03-17 212140.png](https://qiita-image-st
Rails_リクエストがDELETEの代わりにGETで送信される場合の対処法!
# はじめに
2023年12月からプログラミング学習を始めました :smiley:
アウトプットのために今まで起こったエラーや学習したことをまとめようと思います。
初心者のため、解釈などに誤った点があるかもしれません💦
その際はお気軽に教えて頂けますと大変助かりますm(__)m!!# 環境
・Ruby 3.1.2
・RubyGems 3.3.7# 1.発生した問題
Deviseを使ってWebアプリにログアウト機能を実装したが、
ログアウトボタンを押すと、[DELETE]メソッドで送信したいリクエストが[GET]メソッドとして送信されてしまい以下のようなエラーが表示される。![スクリーンショット 2024-03-17 230022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724261/82b7e1c6-50e2-efa8-eb30-c0ba1a2a6b87.png)
# 2.疑った原因
①ルーティングの設定に間違いがある。
[■参照した記事](https://qiita.com/r
【Ruby】スキージャンプの飛型点計算プログラム
スキージャンプの飛型点を計算するプログラムです。
5人の審判が出した飛型点の1番高い点と1番低い点を除いた3人の飛型点の合計値になります。
“`ruby
num = 5
data = gets.chomp
array1 = data.split(‘ ‘)
sum = 0
array2 = []
count1 = array1.size()
for i in 0…count1 do
data2 = array1[i].to_i
array2.push(data2)
end
count2 = array2.size()
max_value = array2.max
min_value = array2.min
totai_value = array2.sum
sum = totai_value – max_value – min_value
sum = sum.to_fputs sum
“`
実行結果は下記の画像です
![test1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co
OpenAPIとは?基本的な構造、書き方、使用例について調べてみた。
# はじめに
お久しぶりです。前回から2週間空いてしまいました。今回はOpenAPIの記事になります。
プログラミング学習コミュニティ「Progaku」では現在チーム開発を行なっております。そのチーム開発のタスクの中でOpenAPIを書くこと、CommitteeRailsを使用してRspecのテストへの反映を行いました。
どちらも初めて使用したので、色々と調べる中で知ったことをまとめていきたいと思います。## OpenAPIとは?
https://www.openapis.org/
公式の見出しを翻訳した結果がこちら(笑)
> OpenAPI仕様は、HTTP APIを記述するための正式な標準を提供します。
これにより、APIがどのように動作するかを理解したり、クライアントコードを生成したり、テストを作成したり、設計標準を適用したり、その他多くのことができるようになります。簡単にいうとAPIの仕様書になります。
ただ仕様書という枠に収まらず、仕様書の内容からテストを作成したり、コードを自動生成したり、様々なことができます。OpenAPIを使用するメリットは以下のようなも
「Ruby on Rails チュートリアル」でローカル環境を構築して「git push」まで実施する方法・前編
## はじめに
こんにちは、@kosei-matsubaraです。
Web系エンジニアの転職を目指して「Ruby on Rails チュートリアル」の学習を始めました。
「Ruby on Rails チュートリアル」の第一章を後半まで進んだところ「GitHub Codespaces」の自動ログアウトおよび再接続が手間だと感じるようになりました。
「Ruby on Rails チュートリアル」ではクラウド環境での開発を推奨しております。
ですが今後ポートフォリオを作り、Web系開発企業ではローカル環境での開発が前提になると想定しています。
したがって最初からローカル環境で開発を行い、早々に今後の作業環境に慣れた方がいいと考えローカルで開発構築することにしました。
ローカル環境構築までの手順を公開することで、同じく「Ruby on Rails チュートリアル」をローカル環境を構築する方のご参考になればと思い記事を投稿しました。
なお、当該記事はゼロからRailsインストールまで、次回投稿記事でRails以降から「git push」までを投稿予定です。
## ローカル環境構
【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.splitputs “#{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”
endif 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テーブルと