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

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

rails newしたら何が起きるか?

現在、CRUDを学ぶべくTODOアプリを作成していたのですが

以前私はRailsを学習したときに

“`ruby
rails new アプリ名 _6.0.0_ -d mysql
“`

このコマンドを打った事を思い出しました。バージョンやDBを指定したコマンドですね。

しかし、色々な記事や動画、リファレンスを見ていると

“`ruby
rails new アプリ名
“`

これだけでも雛形が作成できると書いてあります。

### `rails new`したら何が起きているかというと

1. **新しいアプリケーションの「土台」が作成される**:
新しいアプリケーションのための基本的なファイルやフォルダが自動的に作成されます。これは、家を建てる時にまず土台を作るようなものです。アプリの土台ができることで、開発を始める準備が整います。
2. **必要なファイルの自動生成**:
アプリケーションを開発する際に必要となる多くのファイルが自動的に生成されます。これには、アプリの設定ファイル、初期の画面を表示するためのファイルなどが含まれます。この自動生成機能により、開発者は一から全て

元記事を表示

Railsで重複したタグを登録できないようにする

アクセスしていただきありがとうございます。
Rails初学者です。
## 状況
– Ruby on Railsで記事投稿アプリを作成中。
– ユーザーが記事を投稿する際に、タグを入力し記事に反映させる機能を実装中である。
– タグ同士を , (カンマ)で区切り、複数のタグを保存できる機能を作している。

## やりたいこと
登録しようとしているタグが重複している場合、重複して保存されないようにしたい

## 書いてみたコード
“`ruby:post.rb
class Post < ApplicationRecord # ... (中略) ... # 入力フォームで入力されたタグを連結する def tag_list tags.map(&:name).join(', ') end # タグを保存する際に重複を削除する def tag_list=(names) self.tags = names.split(',').map do |name| Tag.where(name: name.strip).first_o

元記事を表示

Railsにおける「1.month」と「1.month.ago」の内部実装の違いを探る

この記事は、[Ruby on Rails Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ruby-on-rails)の10日目の記事です。

# はじめに
[@yayamochi](https://twitter.com/yayamochi)です。業務でRuby on Railsを使ったバックエンド開発に取り組んでいます。

皆さん、Ruby on Railsにおいて、「1.month」はどういった値を返すかご存知でしょうか?

最近、時間操作でよく使う「1.month」を通してトラブルに遭遇しました。

頻繁に利用されるはずの「1.month」が思わぬ落とし穴につながることがあるので、実装を深掘り[^1]していきます。

# 実際に遭遇したトラブル

「1.month」の仕様を勘違いしており、誤ったTTL[^2]を設定してしまい、Redisのデータを消失してしまうというトラブルに遭遇しました。

開発している

元記事を表示

【Rails】初心者様向けアソシエーション解説 book.user編

# はじめに
こんにちは!
**DMM WEBCAMP mentor Advent Calendar 2023** :christmas_tree: **10日目** を担当します
@A22Dです!
初めての記事執筆となりますが、今回、Railsの「アソシエーション」に焦点を当て、その基本をわかりやすく説明したいと思います。
初心者の方でも「なるほど!」と思っていただけるよう心掛けますので、最後までお付き合いください!

# 概要
初心者の方へ、Railsの「アソシエーション」をわかりやすく解説します。
アソシエーションとは、モデル間の関連性を定義する強力な機能です。この記事では、例として`book.user.name`や`book.user.introduction`を用いて、投稿された本の作者の名前やプロフィール画像の取得方法を紹介します。

# 前提環境

– Ruby 3.1.2
– Rails 6.1.7

# 目次
1. [1:Nの関係について](#1nの関係について)
– [user.rbのアソシエーション](#

元記事を表示

Turboのチュートリアル記事を読んでいる最中の疑問

# はじめに
本記事は錆びかけたRailsの知識を頑張ってアップデートするアドベントカレンダー8日目です。

今日は、猫Rails様のTurboのチュートリアルでRails7のTurbo Streamを勉強していたときに浮かんだ疑問についてまとめます。

# 疑問点
**Turbo Streamと「○○.js.erb」との違いは?**
**flash.noticeとflash.notice.nowとの違いは?**
**指定ページの強制リロードは本当にできる?**

## Turbo Streamと「○○.js.erb」との違いは?
非同期の実装について、Rails6までは、Railsでbuttonタグやaタグを作ってくれるメソッドbutton_tagやlink_toなどに`remote: true`というオプションをつけ、そこからのリクエストを非同期にするという方法がありました。

“`erb:例
<%= hoge_path, method: :post, remote: true do %>
<%= image_tag "path-to-image", alt: "Like"

元記事を表示

JqueryでRedmineの「活動ページ」をもっと便利に(タイトルを開閉したり、曜日を入れたり)

## JqueryでRedmineの「活動ページ」をもっと便利に
[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の9日目の記事として作成しました。(11日目に公開をする予定でしたが、9日目に誰も投稿者がいなかったため、急遽、公開日を変更しました。)

* * *
### 既存のRedmineで不便なこと、改善したい点

Redmineの「活動ページ」は時系列でチケットの作成、編集を一覧できるページです。その為かなり大量の情報が表示され、縦スクロールを頻繁にする必要があります。せっかく日付ごとにグルーピングされていますが、縦スクロール以外に他の日付を閲覧、表示させる方法がなく、不便を感じていました。
また、グルーピングのタイトルが「2023/12/02」のように日付のみで表示されているため、該当の日付が何曜日であるのかがわからず、曜日を確認をするためには別途、カレンダーを確認をしなければならない煩雑性がありました。

現状の活動ページransackをクエリパラメータで指定する方法

# この記事について
この記事は [SUPER STUDIO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/superstudio) の9日目の記事になります。

# この記事を書こうと思った理由
仕事でRestAPIを使ってGETリクエストする際に、ransackをクエリパラメータで指定して検索条件を指定することがあるのですが、改めて使い方などを整理したいと思い、また、自分の知らなかった機能も最近知る機会が合ったので、改めてまとめてみようと思いました。

# そもそもransackとは
ransackをそのまま日本語訳するとあまり印象の良くない翻訳になりますが、簡単に言うとRailsのActiveRecordにおける検索機能を実装するgemになります。

# 使い方
基本的には[こちらのドキュメント](https://github.com/activerecord-hackery/ransack/blob/main/docs/docs/getting-started/search-matches.md)通り指

元記事を表示

Ruby + Rspec – テスト失敗のエラー時にアフターフック処理して赤文字でカスタムメッセージを標準出力する ( example単位 )

after each の中で exception を参照すれば検証失敗エラーのときだけに何らかの処理ができる

通常Rspecはどのように検証が失敗したかを丁寧に表示してくれるが
テストの構成上、標準出力で詳細が分かりづらい場合はアフターフックを仕込んで、何か標準出力させておくとデバッグがしやすいかもしれない

( たとえば Rails の Requestのテストの時に response body を標準出力するなど )

# 例

“`rb
describe ‘Test’ do
after(:each) do |example|
if example.exception

puts “\033[31m” # 赤字開始 – 標準出力で文字色を付ける

puts example.full_description # Test It Description
puts example.description # It Description
puts example.location # /path/to/spe

元記事を表示

クラウドテックをRails6.1からRails7.0へアップグレードしたので、やったことをまとめてみました

この記事は クラウドワークス[Advent Calendar 2023](https://qiita.com/advent-calendar/2023/crowdworks)の9日目の記事です。

# はじめに
株式会社クラウドワークスの@uichiです。和食作りに日々励んでいます。
エンジニアとして[クラウドテック](https://crowdtech.jp/)というフリーランスと企業をマッチングするエージェントサービスを開発しています。

クラウドテックは2023年11月に、Rails6.1からRails7.0へとアップグレードしました。アップグレード時点でRails7.1がリリースされていましたが、既にRails7.0アップグレードのための変更対応を一通り行いレビュー状態になっていたことと、7.1に対応するためには新たな変更が必要になるため7.0までとしました。

本記事では、Rails6.1からRails7.0へ移行するために行なったことをまとめます。

# Rails7.0に依存するgemのアップグレード
`Gemfile`のRailsバージョンを指定している箇所を`gem

元記事を表示

AWS QuickSightSDKのGenerateEmbedUrlForRegisteredUserで埋め込みURLを発行し、グラフを表示させる

# はじめに
この記事はシーエー・アドバンス9日目の記事です!

今回はバックエンドに利用しているrailsから、QuickSightSDKの[GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/ja_jp/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)を利用して、QuickSightの埋め込み用URLを発行し画面にグラフ(ダッシュボード)を表示させてみます。
QuickSight自体、グラフのURLを全体公開にしてサイトに埋め込むことはできるのですが、それではURLさえわかれば誰でもグラフを見れる状態でよくないので、埋め込みURLを発行して表示させる方法をとります。

## 前提条件
– AWSアカウントを所持していること
– QuickSightでアカウント登録していること
– 24$/月ぐらいかかります
– [料金 – Amazon QuickSight \| AWS](ht

元記事を表示

【Next.js×Rails API】レコメンド機能「あなたにおすすめのガジェット」を協調フィルタリングを使って実装する

# 概要
– Next.js×Rails APIのSPA構成で、ガジェットの情報交換ができるSNSを構築している
– ログインユーザーに対して「あなたにおすすめのガジェット」をレコメンドする機能を実装したので、備忘も兼ねてまとめる
– 最終的なコードは[こちら](#実装)

# 環境
– Backend
– ruby 3.0.2
– rails 6.1.4 (APIモード)
– Frontend
– react 18.2.0
– next 13.1.6

# 基本的な機能
当SNSでは、ユーザーがそれぞれ自前のガジェット情報を投稿し、それに対して他のユーザーが
– いいね
– ブックマーク
– レビューリクエスト
– コメント

といったアクションをすることで、交流が可能となっている。

### 投稿されたガジェットのイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948830/cef77574-f32a-8d97-401e-03e7c2346c

元記事を表示

[Ruby] メソッドとSymbolとProcの関係について

# はじめに

Railsを用いた開発を進めている中で、ブロックを渡すはずのメソッドにシンボル形式のメソッドを渡している処理を見かけました。

今までも同様の記述は見たことがあったのですが、なぜシンボル形式のメソッドを使用するのかよく理解していなかったので、この機会にメソッド・Symbol・Procについて調べてみました。

# Enumerable#collectを使用した例

Rubyリファレンスマニュアルには下記のようなcollectメソッドの使用例が記載されています。

“`rb
p (1..3).collect { “cat” } # => [“cat”, “cat”, “cat”]
“`
> 各要素に対してブロックを評価した結果を全て含む配列を返します。

上記の例だと`(1..3)`の各要素に対して`{ “cat” }`を適用するため、戻り値が`[“cat”, “cat”, “cat”]`となるわけです。

一方で、ブロックの記法を用いず、シンボル形式のメソッドを渡す書き方もあります。
“`rb
p (1..3).collect(&:to_s) # => [“1”,

元記事を表示

【Rails】部分テンプレートのlocalsオプションについて

## 部分テンプレートとは
・RailsではViewをerbファイル(EmbeddedRuby: 埋め込みRuby)で記述できる。
・erbファイルでは共通のパーツを部分テンプレートとして切り出せる。

## 部分テンプレートの使い方
### 作成の仕方
“`ruby: app/views/my_partials/_my_partial_hoge.html.erb

hogeの部分テンプレートです

“`

### 呼び出し方
“`ruby: app/views/sample.html.erb
<%= render partial: 'my_partials/my_partial_hoge' %>
“`
※ パスはviews配下から
※ partial:オプションは、省略可能。

## 本題: 部分テンプレートのlocalsオプションについて
部分テンプレートではlocalsオプションで、部分テンプレートに変数を渡すことができる。

“`ruby: app/views/my_partials/_my_partial_hoge.html.erb

<%= titl

元記事を表示

運ゲー化していた動的UIのテストをリトライするためにrspec-retry_ex gemを導入しました

## 発生した問題

私たちが扱うプロダクト内では、ユーザーの入力値に基づき表示が変化する動的なUIが存在します。
このフロントエンドのテストはRSpecを用いて行っていました。

しかし、このような動的UIの自動テストは、何回かに1回の確率で落ちてしまい、GREENになるかどうかがある意味「運次第」となる傾向がありました。

## 問題が発生することの課題

変更していない箇所に対してテストが落ち、CIツールの画面上で「Retry」をすることは開発スピードの足を引っ張ります。
そこで、落ちやすいテストに関して自動でリトライしてくれるgemを導入しました。

## 対象となるテスト

“`ruby
example ‘試算ができないこと’ do
visit(‘/try/input’)
fill_in(‘simulation_postcode_1’, with: ‘100’)
fill_in(‘simulation_postcode_2’, with: ‘0102’)
sleep(1)
expect(page).to have_content(‘申し訳ございません

元記事を表示

Webアプリケーションのシークレット管理のあれこれ

# はじめに

この記事は [VR法人HIKKY Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hikky) の8日目の記事です。
前日は [【VketCloud】その壁の設計、抜けられますよ](https://magazine.vket.com/n/na670c53bd2c6) です。VketCloudに限らない、ゲーム制作やワールド制作全般に言える知見でしたね。

# TL;DR
– GitHubにセキュアな文字列を平文でコミットしないためにやった施策の紹介
– 結局環境変数に回帰する運命なのか

# 様々なシークレットの管理方法

リポジトリに機密性の高い情報を平文で上げてはいけないのは、様々な先人の事例から明らかです。
どのように機密情報をCIフレンドリーに扱えばよいか、その方法は様々です。
本稿では最近のプロジェクトで使っている事例を紹介します。

## Case1: Rails credentials

Rails5.2以降で使えるcredentialsに値を格納する方法です。

https://m

元記事を表示

rails deviceを使用したメールアドレス変更

## はじめに
deviceを使用したメールアドレス変更機能を実装する機会があったので、学んだことをメモに残します
主に、GitHubで公開されているdeviseのコーディングを追う際のメモとしてきさいしていきます

## 実装内容
・メール認証を挟んだメールアドレス変更を実装したい
(今回はメールアドレスを変更できるのはログインしている状態のみ)

処理の流れは以下

新しいメールアドレスを取得

認証URLを含む認証メールの送信

認証できたらメールアドレス変更

## 前提事項
・既にdeviseが導入されている環境
・メール認証を含む新規登録〜ログインまで実装済み
(confirmable機能はすでに実装済み)

## 実装手順
### ①データベースへの項目追加
confirmable機能が利用するデータ項目を追加してあげる必要があります。

メールアドレス変更で使用するカラムは“`unconfirmed_email“`

“`app/db/migrate/20230603034400_add_column_to_users.rb
class AddColumn

元記事を表示

Rails 7系、esbuild、TailwindCSS、Postgresqlを用い、Docker Composeで環境構築する

## はじめに

この記事は[RUNTEQ Advent Calendar 2023](https://qiita.com/advent-calendar/2022/runteq) 8日目に参加しています。

初めまして。

プログラミングスクールRUNTEQで10ヶ月学習し、現在個人開発でアプリを作成中の土井と申します。

今回のテーマは「初めて学んだ技術」ということで、個人開発の際にDockerを用い開発環境を作成したので、環境の紹介と各種ファイルの説明をしたいと思います。

今後この環境でDockerを立ち上げようとしている方へ少しでも参考になるようにわかりやすく書ければ、と思っています。

また、この環境通りに行いエラーやうまくいかなかった点、間違っている点などございましたらコメントにてご指摘いただけると幸いです。

使用環境

– MacbookAir (M2)
– Ruby 3.2.2
– Rails 7.0.8
– esbuild
– tailwindCSS
– postgresql

## そもそもDockerとは?

Dockerは、アプリケーションを開発・配置・実

元記事を表示

【Ruby on Rails】RSpec(rspec-rails)を使ってみよう

## まえがき

本記事は、**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 8日目記事です。

Ruby on Railsを中心に、DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

## はじめに

こんにちは、DMM WEBCAMP メンターの @ukwhatn です。

本カレンダー4回目の担当日となりますが、今日はRuby on RailsにおけるRSpecの使い方について説明していきます。

## RSpecとは?

RSpecは、Ruby 向けの BDD(Behavior-Driven Development=振る舞い駆動開発)フレームワークです。

主にRubyで書かれたアプリケーションの挙動・機能をテストするために利用され、人間が読みやすい形式でのテストコード記述によって「テストからアプリケーションの振る舞いがわかる」というメリットも持っています。

詳しいことは他の記事におまかせしますが、要は「テストを簡単

元記事を表示

【コードリーディング】Turbo Driveによるリクエストの「インターセプト」はどう行われているのか調べてみた

# はじめに
本記事は錆びかけたRailsの知識を頑張ってアップデートするアドベントカレンダー7日目です。

引き続き猫Rails様の[猫でもわかるHotwire入門 Turbo編](https://zenn.dev/shita1112/books/cat-hotwire-turbo)の一説に、以下のような文章がありました。

>Turbo DriveはTurbolinksの名前を変えたもので、基本的な機能はTurbolinksと同じだよ。リンク、フォームのリクエストをTurbo Driveがインターセプトして、fetchによる非同期リクエストに差し替える。

ここを読んだ時、

:rolling_eyes: 「『インターセプト』ってどういうことだろう?」

と疑問に思いました。

そこで今回は、Turbo Driveによるリクエスト ~ レスポンスの流れと、実際のTurbo Driveのコードでどのようにそれが実現されているかについて見ていきます。

前提として「猫でもわかるHotwire入門」は非常にわかりやすく、悩むことなく実装を進められています。
その中でも「こう考えた方が理解

元記事を表示

【Rails7】RailsアプリケーションのDocker化 + GitHubActionsでCIを設定する

# はじめに
`Rails`のみのアプリケーションを作成したけど、その後の`Docker`にマウントさせる方法と`GitHubActions`による`CI`設定がわからない、、、という人向けに**ハンズオン形式**で流れをまとめてみました。

# Railsアプリケーションの開発環境
– Ruby 3.2.2
– Ruby on Rails 7.0.8
– PostgreSQL
– esbuild(バンドラー)

# Railsアプリケーションの作成

“`javascript
rails new mount_docker -j esbuild -d postgresql
“`
“`javascript
cd mount_docker
“`

# Dockerの設定

作業ディレクトリ直下に`Dockerfile`を作成します。
“`ruby
touch Dockerfile
“`

“`Dockerfile
FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y nodejs postgresql-cl

元記事を表示

OTHERカテゴリの最新記事