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

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

【個人開発】Rails×ReactのアプリでGoogleログインを実装しました(devise使わないパターン)

## はじめに
こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)と申します。プログラミングスクールRunteq50期生です。先日、生成AIを用いた習慣化支援RPGアプリ「3日目に魔王がいる」をMVPリリースしました。その技術要素を細かく切り出して順に備忘録として残していこうと思います。

今回は**OmniAuthを用いたGoogle認証(ログイン)機能**についてです。SNS認証ではdevise(とdevise token auth)を使ったパターンを聞くことが多いですが、自分のアプリ要件だと過剰な印象もあったので今回はそれを使わない方法で進めました。

## 参考
### アプリ紹介記事
https://qiita.com/MaTTA_RUNTEQ50B/items/c8eac9251f704164dc9c

### サービスURL
https://mao-the-3rd-day-front-e8eb3156d3f2.herokuapp.com/

### Githubリポジトリ
https://github.com/MaTTalv001/M

元記事を表示

ゼロから始めるstimulus入門5(外部リソースとの連携)

## はじめに
今回はstimulusで外部リソースとの連携についてドキュメントを見ながら学んでいきます。

過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)
第3回:[ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)](https://qiita.com/shinry/items/b2b732b6aeb4374d146d)
第4回:[ゼロから始めるstimulus入門4(状態の管理)](https://qiita.com/shinry/items/b5396cc5f5165940e17d)

## 外部リソースとの連携
コントローラーが外部リソースの状態を追跡しないといけない場合があります。
(「外部」とは、DOMやStimulusの一部ではないものを

元記事を表示

enumとバルクインサートを使用した通知機能実装

# はじめに
ポートフォリオ制作中です!
今回は通知機能を実装しました!
enumとバルクインサートを活用しポリモーフィック関連付けを
使った実装をしたのでアウトプットとしてまとめます

※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 完成物
![スクリーンショット 2024-06-15 13.33.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/acf7b7dc-e8a6-ec35-0ce4-22266ca9aec6.png)

レイアウトがまだ整ってなくてすみません💦

#### 通知の条件
1.新規投稿されたときフォロワーへ通知
2.投稿にコメントされたとき投稿者へ通知
3.投稿にいいねされたときに投稿者へ通知
4.フォローされたときにユーザーへ通知
5.メッセージを送信されたときに受信者へ通知

各機能は実装されていることを前提にまとめていきます

# ER図
複雑ですが、通知テーブルから各アクションのリレーションは省略

元記事を表示

[Rails] rails db:migrateが失敗したら、スキーマファイルからデータベースを構築しよう

# 概要
マイグレーションに不整合がある場合、**`rails db:migrate`** が失敗することがあります。
過去のmigrationファイルから原因を特定し、修正しようとするとかなり時間がかかります。

このような時は **`rails db:schema:load`** コマンドを使うことで、スキーマファイルから迅速にデータベースを構築することができます。

# マイグレーションコマンド
**`rails db:migrate`:**
db/migrate のマイグレーションファイルを順次実行する

**`rails db:schema:load`:**
db/schema.rbのスキーマ情報をそのままデータベースに反映する ※db/migrate のマイグレーションファイルは使わない

# まとめ
既存プロジェクトの環境構築などで、マイグレーションが失敗した時のために頭の片隅に置いておくと役立つ時が来るかもしれません…

新規メンバー参画予定のため備忘録として執筆… :memo:

元記事を表示

Web API 混在の Rails アプリケーションで500エラーを適切に処理したい

## はじめに

Rails で、Web API でJSONを返すものと、HTMLのページを返すものを混在させたアプリケーションを `rails new` で作成していました。

routing で、Web API は、 `/api` 以下にマウントしていました。

`/api/xxx` で Web API が呼ばれて想定外のエラーが発生した時、JSON でレスポンスを返すようにしたいと考えたのですが、意外に手間取ったので自分用にメモしておきます。

なお、動作確認は、Rails7.1 で実施しています。

## 500エラーを発生させる
意図的に 500 エラーを発生させるために、Controller で以下のようなコードを書きます。

“`ruby
class Api::UsersController < ApplicationController def index raise StandardError, 'error' end end ``` ## 何もしない場合 何もしない場合、Rails は、`/500.html` を返します。JSON ではなくて、H

元記事を表示

railsのマイグレーションファイルを削除する方法

# 環境

“`
$ ruby -v
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [aarch64-linux]
“`
“`
$ rails -v
Rails 7.0.6
“`

# 削除手順
現在のマイグレーションの状況を確認する。

“`
$ rails db:migrate:status

Status Migration ID Migration Name
————————————————–
up 20230206140511 Create tasks
“`
削除対象のIDを指定し、statusをdownに。

“`
$ rails db:migrate:down VERSION=20230206140511
“`
一応確認。

“`
$ rails db:migrate:status

Status Migration ID Migration Name
—————————-

元記事を表示

ゼロから始めるstimulus入門4(状態の管理)

## はじめに
今回はstimulusの状態管理についてドキュメントを見ながら学んでいきます。

過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)
第3回:[ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)](https://qiita.com/shinry/items/b2b732b6aeb4374d146d)

## 状態の管理
最近のフレームワークのほとんどは、常に JavaScript で状態を維持することを推奨されていますが、stimulusではDOM内の属性として状態が存在します。
この方法によって、最初のHTMLドキュメント、Ajaxリクエスト、Turboのページ遷移、さらには他のJavaScriptライブラリなど、どこからでも HTML を

元記事を表示

【Rails】ログローテーションをする方法

`config/environments/production.rb`などの設定ファルに以下の設定を追記するとログローテーションができます。

“`rb
# ファイルサイズ基準
config.logger = Logger.new(“log/production.log”, 5, 10 * 1024 * 1024)

# 日数基準
config.logger = Logger.new(“log/production.log”, ‘daily’) # weeklyなども可

“`

## その他の方法

Linuxコマンドの `logrotate` コマンドを使用してもログローテーションが可能です。

【日本語man】logrotateの全オプション解説

元記事を表示

gemが上手く動作せず、gemの内部処理でデバッグしたい/モンキーパッチを作りたいときのやり方

gemの怪しいと思った部分をoverwriteして、binding.pryを追加すれば、追加した場所で止まってくれます。

overwriteのやり方
https://qiita.com/arakaji/items/dbf26f0b1d1c4659ef32#%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%86

元記事を表示

after_saveでsidekiqを叩いてもデータが存在しない

# はじめに

E2Eがコケて原因が謎だったところについてまとめておきます

# 問題

ユーザーをDBに保存すると、Sidekiqのジョブを叩くような実装をしました

“`rb:user.rb
after_save TriggerIndexingCallbacks
“`

しかしジョブでは作成したユーザーが存在しませんでした

# 解決方法

“`rb:user.rb
after_commit TriggerIndexingCallbacks
“`

`after_commit`にすることでDBに保存してから実行されるようになりました
保存前に動いていたのが原因でした

# おわりに

初めてafter_commitというものを使いました
そもそも知らなかったです

元記事を表示

【rails】railsにおけるMVCモデルが誰でもわかるように説明

今回はrailsにおけるMVCモデルについて説明したいと思います。
経験のないエンジニアにとっては非常にわかりにくい概念であると思います。図も使いながらなるべく理解できるよう努めます。

# mvcモデルとは
`model`、`view`、`controller`の3つに分けてコードを管理するものです。
それぞれの役割を簡潔に述べたのが以下です。
| 名前 | 役割 |
|:-:|:-:|
| model | データベースとのやり取り |
| view | 画面表示 |
| controller | modelとviewの制御 |

# 処理全体像
今回は動的な場合と静的な場合で分けてみました。
動的・静的とは何だ?となっている方は[こちらのサイト](https://www.takara-sc.co.jp/column/2621/)を見てみてください。
図を見ると動的・静的がわかりやすいと思います。
![スクリーンショット 2024-05-22 17.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した

# 概要
`RDS`がフェイルオーバを行うと`Ruby on Rails`(以下、`Rails`)では、ダウンしたDBを参照する現象が発生します。この問題により、`DB`を参照出来ない為、`Rails`が動作しなくなります。今回は、`RDS`のフェイルオーバーが行われたら、`RDS`のイベントサブスクリプション、`SNS`、`Lambda`を使用して、`ECS`で起動している`Rails`の`puma`を再起動する処理を構築しました。今回は、その実装方法を記載します。

# 前提条件
– `ECS`で`Ruby on Rails`の環境が動作している
– `Amazon aurora`(postgres)を使用している (RDSでも今回の実施は可能)
– `Terraform`を使用している (webコンソールから設定する事も可能)

# Lambdaの処理を動かす為の技術選定
フェイルオーバーが行われた事を`Lambda`に通知する機能として、RDSの[イベントサブスクリプション](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/

元記事を表示

Sidekiqのretry設定は忘れずに!!

# はじめに
SidekiqでJobを実行して、エラーが発生すれば、リトライをしてくれます。
しかもデフォルトで、`25回`も…!!

なので、明示的に設定を行っていないと、25回もリトライされてしまうので、通知するように設定していたら…

イベント数がとんでもないことになってしまいますね。
`(※ 自分がそうでした…)`

反省も含めて、アウトプットいたします。

# config/sidekiq.yml に設定
上記ファイルに、以下のように記載いたします。

“`rb
:max_retries: 10
“`

上記のように記載すると、デフォルト値を変更して、最大で10回リトライしてくれます。
また、Job別にリトライ数を設定することもできます。

# 各Jobにも設定可能

“`rb
class HogeJob < ApplicationJob queue_as :hoge sidekiq_options retry: 10 def perform fuga.hogehoge end end ``` `sid

元記事を表示

【個人開発】万年下痢症の男が胃腸の弱い人のための健康管理アプリ「Puri.log」を作りました

# はじめに
こんにちは、nomotoと申します。
プログラミングスクールRUNTEQ53期生です。
Puri.logというwebアプリをリリースしました。

この記事では、アプリの概要と開発背景に軽く触れた後、機能の実装において、工夫した部分の手法と思考について詳しく書いていきます。

https://www.puri-log.com/

https://github.com/tkhero555/Puri.log

# アプリ概要
胃腸の弱い人のための食事と排便の記録アプリです。
あなたの胃腸と食事の相性を、記録を元にアプリが判定します。
LINEBOTを活用し、手軽に記録ができるようになっています。

# このアイデアに決めた理由
私は生まれつき胃腸が弱く下痢症で、中学時代には毎朝腹痛で通学電車を途中下車してトイレに行く人生でした。
社会人になってから自身の腹痛の要因が食事にあるのでは?と考え、色々な食事を試しては胃腸の反応を観察することを始めました。
何を食べると調子を崩すのかを少しずつ把握していった私は、相性の悪い食事を極力避けて生活して症状を改善することができました。
2

元記事を表示

SHA-1で作成したsigned_idをRails 7.0でもfind_signedで検索できるようにする

## はじめに:困ったこと・解決したいこと
Rails 7.0ではActive RecordのデフォルトのハッシュダイジェストアルゴリズムがSHA-1からSHA-256に変更されました。

https://railsguides.jp/upgrading_ruby_on_rails.html#active-record-%E6%9A%97%E5%8F%B7%E5%8C%96%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E5%A4%89%E6%9B%B4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

この変更が入ると、Rails 6.1以前に生成したsigned_idはRails 7.0以降で利用できなくなります。

“`ruby
# Rails 6.1時代に user.signed_id で生成した署名付きid
signed_id = “eyJfcmFpbHMiOnsibWVzc2FnZSI6Ik1USXpORFU9IiwiZXhwIjpudWxsLCJwdXIiOiJ1c

元記事を表示

CI / CD パイプラインのエラー奮闘記

# はじめに
学習用のサイトが完成しCI / CD パイプラインを GitHubActionsで構築しようとしたところエラーがでてうまくできませんでした。
バックエンド・フロントエンド両方でエラーが出ていてビックリしました 笑
その時の奮闘記になります。

# もくじ
1\. 開発環境
2\. バックエンド(Rails)
3\. フロントエンド(Next)
4\. まとめ
5\. 参考

# 開発環境

・フロント・バックエンドなど
nginx
docker
Next.js 14.2.1
Ruby on Rails 7.0.8.1

・デプロイ先
AWS
GitHubActions (CI/CDパイプライン)

・使用PC
Macbookpro M3
WSL Ubuntu

# バックエンド(Rails)

GitHubActionのエラー内容
・Deploy Amazon ECS task definition
“`
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information,

元記事を表示

タグ付け タグ検索 機能実装

# はじめに
今日は複数のタグ付けと検索機能を実装しました
思ったより苦戦してしまったので、まとめます✍️

いろんな実装方法があるようですが、簡潔になるよう頑張りました!

※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!

# 完成物

![スクリーンショット 2024-06-12 20.31.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/f0553e44-cd77-2f8b-d937-caea74328b09.png)

![スクリーンショット 2024-06-12 20.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/2445ee6b-7007-1b0a-83e1-77dd37c4b2a8.png)

レイアウトがまだ整ってなくてすみません💦

# ER図
プランは複数のタグをつけることができる
タグは複数のプラン

元記事を表示

ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)

## はじめに
今回は古いブラウザを考慮したstimulusの設計をドキュメントを見ながら、学んでいこうと思います。

過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)

## 古いブラウザを考慮した設計
クリップボード APIは現在のブラウザでは十分にサポートされていますが、古いブラウザを使用するユーザーも少なからずいます。
また、ネットワークの接続不良、CDNが利用できない、jsの一部またはすべてが読み込まれない場合があります。
そうしたブラウザを考慮した設計をstimulusで行うことができます。

## 実装

### clipboard_controller.js
– static classes = [ “supported” ]というものを定義
– conne

元記事を表示

TypeScriptで書ける型安全なRuby on Railsを求め、ORMの開発を始めた

私はAccel Recordという、TypeScript用ORMライブラリを開発しています。
このライブラリについては、先日[Active Recordパターンを採用したTypeScript用ORM「Accel Record」の紹介](https://qiita.com/koyopro/items/917c2c98db3de7518849)という記事を公開しました。

次に、なぜTypeScript用ORMを新たに開発しようと思ったかを書いてみようと思います。

## 最初の動機

普段Ruby on Railsを使ってサーバーサイド開発、TypeScriptを使ってフロントエンド開発をしていると、以下のように感じることがあります。

– **TypeScriptにもRuby on Railsくらい開発効率の高いフレームワークが欲しい**

これはまず「サーバーサイド開発においてもTypeScriptを使いたい」という気持ちがあるということです。それは主に次のような理由があります。
– サーバーサイドも型安全に開発したい
– フロントエンドとバックエンドを同じ言語で開発し、コンテキスト

元記事を表示

【Ruby on Rails】namespace と scope の違いって何?

# はじめに

こんにちは、エンジニア3年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!

Railsアプリケーションを開発していると、ルーティングの設計がとても大切だと感じることが増えてきました。
同時に自分の理解が浅いことも実感しています…
そこで今回はこの記事でアウトプットをして理解を深めていきたいです。

よろしくお願いします!

# 目次

– [namespaceとscopeの違い](#namespaceとscopeの違い)
– [namespaceの特徴](#namespaceの特徴)
– [scopeの特徴](#scopeの特徴)
– [namespaceの使い方](#namespaceの使い方)
– [基本的な使い方](#基本的な使い方)
– [ネストしたリソース](#ネストしたリソース)
– [scopeの使い方](#scopeの使い方)
– [基本的な使い方](#基本的な使い方)
– [パスとパラメータのカスタマイズ](#パスとパラメータのカスタマイズ)
– [使い分けのポイント](#使い分けのポイント)
– [カス

元記事を表示

OTHERカテゴリの最新記事