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

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

Ruby on Rails で ElasticSearch をChewyで検索した際のN+1問題

Ruby on Rails で ElasticSearch と Chewyを活用して全文検索を実装しています。

> ### Chewyとは?
> Chewy is an ODM (Object Document Mapper), built on top of the official Elasticsearch client.
> https://github.com/toptal/chewy

検索した際にN+1問題がBulletで検知されました。

“`ruby
objects = ParentModelIndex.query(match_query).load.objects
objects.each do |obj|
obj.child # ここの行で
end
“`

N+1が検出されます。

“`text
GET /…
USE eager loading detected
ParentModel => [:child_model]
Add to your query: .includes([:child_model])
Call stack
“`

##

元記事を表示

Fly.ioでrails db:seedを実行する方法

## 自己紹介
はじめまして、はると申します。現在はスクールに通いながら学習をしています🐥

## 概要
Fly.ioでRailsアプリをデプロイした際に、`rails db:seed`を実行する方法。

### 環境
– Ruby: 3.2.2
– Rails: 7.0.8

:::note warn
初学者のためデプロイ周りの知識が浅く、間違っている箇所がある可能性があります。また、うまく行った方法の1つを紹介していますが、より良い方法を知っている方がいたら教えて頂けると嬉しいです🙇
:::

## 結論
RAMサイズを`256MB`から`512MB`に上げた後、

このコマンドでうまくいきました。
“`
hogehoge@hogehogenoMBP アプリ名 % flyctl console

irb(main):001:0> Rails.application.load_seed
=> true
“`

## 詳細
Fly.ioでのseeds.rbの反映方法について調べて見つけたコマンドを実行しましたが、下記のようなエラーが出て実行できませんでした。

“`
hoge

元記事を表示

【Rails】StimulusでGoogleMapApiを扱ったら良い感じだった話

## この投稿は、

DMM WEBCAMP Advent Calendar 2023
シリーズ2 投稿7日目のエントリー(大遅刻穴埋め勢)です。

6日目は、@Hiron0120 さんで、

https://qiita.com/Hiron0120/items/c1e1c5fedc3871c92855

でした。

## はじめに
DMM WEBCAMP でメンターをやらせていただいております。 @tomoaki-kimura です。
Rails7はフロント周りがとても楽しくなりました。 `Stimulus`もその一つです。丁度よい機能と学習コストです。
Rails6環境でも `Stimulus` を使ったJSの管理はかなり有用です。

JQueryも状況によっては全然アリなのですが、どうやら世の中脱JQueryの流れにはなっているようですし、今後を踏まえてキャッチアップしておくのも手ではないでしょうか。

という事で今回は、GoogleMapApiを [Stimulus](https://github.com/hotwired/stimulus-rails)で書いていこうと思います

元記事を表示

概念から理解するTurbo Streamsを使ったリアルタイム通信

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

Turbo Stream(ActionCable)を使ったリアルタイム通信について学習したので、引き続きまとめます。

[こちらの記事](https://qiita.com/eichann/items/bc1ea15184b7bdc2b264)ではリアルタイム通信を実現する仕組みとしてWebsocketを紹介し、Action CableがWebsocketを扱うための機構であることを説明しました。

本記事では、もう少し具体的にリアルタイム通信を行うイメージを説明したあと、実際のコードでどのように書くのかを紹介します。

# Railsのリアルタイム通信の流れ

### 1.サーバ側でリアルタイム通信の準備をする
リアルタイム通信をするためには、サーバ側にてあらかじめ準備が必要です。どんな情報を送るのかなどを決めておきます。これを、チャンネル(チャネル?)と呼びます。RailsではActionCableにてChannelというクラスが用意されており、Railsアプリ内にこのク

元記事を表示

Rails × ChatGPT 投稿内容をAIで加工する

:::note warn
**この記事のポイント:** OpenAI APIを使って投稿内容を加工する機能を作りました。今回はある意味ジョーク的な機能ですが、実際にどんな使い道があるかの検討も最後に触れています。
:::

# はじめに

[前回の記事](https://qiita.com/MaTTA_RUNTEQ50B/items/3cb46ddf1be17899df00)でRailsにChatGPT(OpenAI API)による生成テキストをindex画面に表示させる実験を行いました。APIを叩けたことは良いのですが有用かと問われるとそうでもなく、さらにいうとページを読み込むたびにレスポンス待ちに数秒かかるという始末でした。

せめてもう少しだけ実用的な使い道を考えようというのが今回のモチベーションです。

RailsにChatGPTのAPIを用いる流れは前回の記事を参考ください

https://qiita.com/MaTTA_RUNTEQ50B/items/3cb46ddf1be17899df00

# 完成品
Western Modeにチェックを入れた状態で投稿す

元記事を表示

リリースから7年間EC2で稼働していたWEBサービスをついにコンテナ化した話

:::note info
この記事はLITALICO Advent Calendar 2023のカレンダー2の16日目の記事です。
https://qiita.com/advent-calendar/2023/litalico
:::

# はじめに

## 自己紹介

株式会社LITALICOでWEBエンジニアをやっています。ti-aiutoと申します。

普段は個人向けのWEBサービスの開発を担当していて、特にモノリスなアプリケーションを持続可能な形に保つこと、フロントエンドの開発しやすい環境を整えることに関心があります。

今年度から、新設の基盤グループというところに異動して、セキュリティ面・パフォーマンス面や開発効率向上などの観点から色々と動いていく仕事をしています。

## 何の話か

タイトルの通り、作業時点で7周年とそれなりに歴史のあるWEBサービスをEC2からFargateに移行するのを頑張りました!という話です。

作業していく中で検討したポイントや大変だったところなど紹介していければと思います。

## 対象読者

WEBエンジニアの皆さまに読み物としてふ〜んという

元記事を表示

RailsでChatGPT(OpenAI API)を使ってみる

:::note info
**この記事のポイント:** Ruby on RailsアプリにChatGPTの出力を組み込んでみました。APIを叩けるか試してみるのが主目的で、アプリの機能(使い道)の提案としては大したものではありません。
:::

:::note warn
一部有料の内容を含みます(OpenAI API利用料)
Rails初学者が学習目的で執筆しております。誤り、改善点などぜひご指摘ください
:::

# はじめに

ChatGPTをはじめとするLLM(大規模言語モデル、生成系AI)の発展により、身近なソリューションに様々な変革が起きています。自分は普段Pythonで自然言語関連のタスクを扱うことが多いのですが、最近学習を始めたRuby on Railsにおいても、LLMを組み合わせることで何かおもしろいことができるのではないかと自然に考えが及びましす。

ということで今回はRailsアプリにChatGPTの出力を表示させられるのか、その動線を確かめてみました。

### 参考にしたサイト

[Use ChatGPT API with Ruby on Rails](ht

元記事を表示

【脱 初心者】Railsで学ぶN+1問題

# はじめに
[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop) 16日目です:christmas_tree:
メンター・卒業生が記事を投稿しておりますので、是非他の記事もご覧ください!

# 読んで欲しい人
– RailsでCRUD処理が書けるようになってきた!
– 次なるステップアップをしたい!

初学者向けにわかりやすい言葉を使って説明していきます

# N+1問題とは?
データベースへの問い合わせ(クエリの実行)をたくさん行ってしまうことによってパフォーマンスが落ちてしまう問題のことです。

## 例
本を投稿できるようなアプリを例にします
“`mermaid
erDiagram
User ||–o{ Book : “一人のユーザーは複数の本を持つ”
“`

“`books_controller.rb
def index
@books = Book.all
end
“`
本の一覧ページでは、アソシエーションを利用して本を投稿したユーザーの

元記事を表示

Windows11 + Docker環境でRuby on Rails+PostgreSQLの環境構築

# 自己紹介
来年から新卒入社でエンジニアとして働き始める蛇姫と申します。
Ruby on Railsで開発を行った際にDockerを使用したので備忘録として残したいと思います。
初めての記事投稿なので至らないところも多々あるかとは思いますが、何か間違い等ありましたらご指摘のほどよろしくお願いいたします。

# 背景
システムの開発にあたって最初はWindows上で開発を行っていたのですが、AWSにデプロイする際に、[unicornのインストールがWindowsでは行えなかったため](https://teratail.com/questions/355134)、dockerを用いてunicornを利用できる開発環境を用意することにしました。

# 前提条件
* Docker Desktopがインストール済みであること
* WSLがインストール済みであること

# 構成情報(2023年12月16日)
* Windows 11 home
* ruby 3.2.2
* Ruby on Rails 7.1.2
* Docker version 24.0.5
* Ubumtu 22.04 LTS

元記事を表示

[Ruby on Rails]カラムに対して複数OR条件の絞り込みを行いたい

# はじめに
カラムに対して複数のOR条件を指定したい時ってありますよね。RailsのSQLでOR条件といえば`or`が真っ先に出てきますが、他に方法があったりしないのかなと思う機会があると思います。

先日、そんな事があったので、今回は`or`を使わず、`where`を使ってカラムに対して複数OR条件を指定する方法があるのか調べてみました。

# RailsのSQLのwhereについて
そもそも、RailsのSQLの`where`の引数には大まかに`String型`、`Array型`、`Hash型`の3種類の型を入力することができます。

以下は例に使用するUserテーブルです。

| user_id | user_name | user_age |
|:-:|:-:|:-:|
| 1 | Sam | 20 |
| 2 | John | 50 |
| 3 |Alice | 27 |

また、動作環境はRails 6.1です。
## whereの引数例
### String型
“`ruby
User.where(“user_name = ‘Sam'”)
# SELE

元記事を表示

【Rails・Next.js】devise-token-authによるログイン認証 Part3

# はじめに
【Rails・Next.js】devise-token-authによるログイン認証のPart3です。
Part2はこちらです。

https://qiita.com/ke_sukesakuma/items/043d5270db608c433e5b

# ユーザ新規作成APIの動作確認

– **メソッド**: `POST`
– **URL**: `http://localhost:3000/api/v1/auth`
– **HEADERS**: `Content-Type: application/json`
“`json:Body
{
“email”: “test2@example.com”,
“password”:”password”,
“confirm_success_url”: “http://localhost:8000”
}
“`

![スクリーンショット 2023-12-15 16.50.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517817/6b

元記事を表示

存在しないカラムでorderを二重にかけたかったお話

# はじめに
この記事は2023年度の振り返りです。

業務でちょっと考えた内容の備忘録です

# 問題

業務で、メッセージを既読・未読を取得する処理がありました。
既読は、既読順に配列に格納され、それを除外した残りが未読扱いとし、未読の中で作成順にソートがかけられて表示されていました。
(未読一覧の後に既読一覧が着ます)

“`ruby:一部を抜粋
read_message_ids = [5,3,2]
Message.order([Arel.sql(‘field(id, ?)’), read_message_ids])
.order(created_at: :desc)
“`
“`sql:発行されたSQL
SELECT `messages`.* FROM `messages` ORDER BY field(id, 5,3,2), `messages`.`created_at` DESC
“`

ただ、これの問題は、既読側も作成順で表示したいものの、配列順に表示されました。
配列をソートかけるのも手段の一つではあるものの、できればSQLで対応したいと思っていまし

元記事を表示

WARNING: UNPROTECTED PRIVATE KEY FILE! のエラー対処方法

# 概要
`capistrano`でデプロイを行う際に、下記のエラーが発生しました。その対処方法について記載します。

# エラー文
– `capistrano`のエラー内容
“`sh
bundle exec cap デプロイ先の環境を指定 deploy

# 入力例
# Rails環境のconfig/deploy内にあるファイル名を記載する
bundle exec cap test deploy

#  出力例
Permission denied (publickey).関連のエラーが表示される
“`
– `ssh-add`のエラー内容
“`sh
# 入力コマンド
ssh-add **************.pem

# 出力結果
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

元記事を表示

[Ruby on Rails] テストのフィクスチャの動作に関するコードを読んでみた

![READYFORアドベントカレンダー2023カバー画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674911/82959657-8786-1d95-f6cf-32ab83d9b5d9.png)

## はじめに
READYFOR でエンジニアとして働いている masaki です。
この記事は READYFOR Advent Calendar 2023 の14日目の記事になります。(投稿遅れました…🙇)

他の記事もぜひご覧ください!

https://qiita.com/advent-calendar/2023/readyfor

[Rails テスティングガイド \- Railsガイド](https://railsguides.jp/testing.html#%E3%83%95%E3%82%A3%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3%E3%81%AE%E5%8B%95%E4%BD%9C) を読んでいると以下のような記載があります。

> 1. フィ

元記事を表示

【Rails7】Maps JavaScript APIを使って投稿を地図上にピンで表示する

## 自己紹介
はじめまして、はると申します。現在はスクールに通いながら学習をしています。
今回、[スクール内のアドベントカレンダー](https://qiita.com/advent-calendar/2023/runteq)に参加し、**『初めて学んだ技術』** というテーマで記事を書きました🐥

## 概要
Google MapのAPIを利用し、地図上に投稿の一覧をピンで表示させます。
(新規投稿を作成する機能の実装は含みません)
– Maps JavaScript API
– Geocoding API

### 環境
– Ruby: 3.2.2
– Rails: 7.0.8
– esbuild

:::note warn
初学者のため、間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## APIキーの準備
初めてGoogle Cloud Platformを使う想定で記載します。すでに登録済みの方は[使用するAPIの有効化](#使用するapiの有効化)に進んでください。

### Google Cloud

元記事を表示

コードオーナーがよくレビューする事5選

# はじめに
[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)の11日目[^1]です!
[^1]:平日のみの投稿なので15日ですが11日目の記事としています。

Hubbleでバックエンドエンジニアをしている @power3812 です。オブジェクト指向大好きマンで、神クラスを作れないかと模索の日々です:innocent:

Hubbleのバックエンドチームは[コードオーナー](https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)制度を導入しており、PRを出す際にコードオーナー1人以上のapproveがないとマージすることが出来ません。
その際にJoinしたての方によく自分がレビューする内容5選を紹介しようと思います:sunglasses:

## 1. ActiveRe

元記事を表示

【Rails】入社前にやった方が良かった教材まとめ 【React】

## はじめに
現在、現場でReactとRuby on Railsを使用して開発しています。

その上で入社前に自分で読んでもらいたい教材を
紹介していきます!

## [プロを目指す人のためのRuby入門\[改訂2版\] 言語仕様からテスト駆動開発・デバッグ技法まで](https://www.amazon.co.jp/dp/4297124378)
– Rubyを使う方、全員におすすめしたい本
– 呪文のような構文もこれを読めば理解できるようになる(はず)
– 初版を買わないように注意してください!

>本書は、プログラミング言語Rubyの言語仕様や開発の現場で役立つRubyの知識を説明した本です。豊富なサンプルコードで文法を学び、例題でプログラミングの流れを体験できます。第1版(2017年11月発行)は、初心者の目線

元記事を表示

【Rails】ビットマスクを活用した、Todoアプリを作ってみませんか?

# はじめに
DMM WEBCAMPのAdvent Calendarの **15** 日目の担当することになりました、@takakouと申します🏙️✨

今回は、「**ビットマスクを活用した、Todoアプリを作ってみませんか?**」というテーマで記事をシェアします!📝

記事執筆は未熟者で、至らない点もあるかと思いますが、皆さんのコメントやフィードバックをお待ちしています!🚀💬
# 目次

1. [目的 🎯](#1-目的)
1. [対象者 👨](#2-対象者)
1. [動作環境 🖥️](#3-動作環境)
1. [アプリ概要 🛠️](#4-アプリ概要)
1. [実装手順 🚀](#5-実装手順)
1. [参考文献 📚](#6-参考文献)
1. [おわりに 🎉](#7-おわりに)

# 1. 目的
最初に本記事の目的を説明しておきます。
– タスクを管理するアプリで設定する曜日指定の定業タスクの発生周期や、カレンダーアプリなどの予定の発生周期を設定するのって内部的にどんな動きをしているのか理解する。
– ビットマスク

元記事を表示

Railsで開発を行うときに考えていること

# はじめに

この記事は [VR法人HIKKY Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hikky) の14日目の記事です。
前日は [VRイベントサイト制作の振り返り2023 Nuxt3対応とWebアニメーションに寄せて](https://qiita.com/rohitotsubakura/items/938ec3d6703b4656b500) でした。

# 書くこと
普段 Rails 開発で意識していることやコーディングの仕方について基本的なことから宗教的なことまでだらだらと書き出してみる。
普段意識していないことは書かないかもしれない。
フレームワークによらず考えていることも含む。

# controller / routing
## routes.rb
member, collection 等、見通しよく整理できるメソッドが意外とある。

## データの保存失敗処理
“`ruby
def update

save!

rescue A

元記事を表示

【Rails・Next.js】devise-token-authによるログイン認証 Part2

# はじめに
今回の記事は【Rails・Next.js】devise-token-authによるログイン認証 Part2です。
Part1はこちらです。

https://qiita.com/ke_sukesakuma/items/c512af1e9b8c1eeb38e5

# deviseの日本語化

devise関連ファイルを日本語化していきます。
今回は認証URLを含んだメールの日本語化を目的としています。

“`ruby
rails g devise:i18n:locale ja
“`

“`ruby:config/application.rb
module Myapp
class Application < Rails::Application #省略 config.i18n.default_locale = :ja end end ``` # 認証メールの設定 今回は`letter-opener-web`を用いて、メール認証をしていきますがその際に送信元のドメインを定義する必要があります。 ```ruby:config/environme

元記事を表示

OTHERカテゴリの最新記事