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

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

Rails 7.2 (Hotwire) でDeviseのログアウトリンクを作成

最近はRailsのアプリ開発から少し離れていましたが、Rails 7あたりからHotwireやYJITなどおもしろそうな動きもあり、またRailsに興味を持ちはじめています。

Rails 7.2のアプリでDeviseのログアウトリンクを作成したとき、Hotwireに対応する方法がわからなかったのですが、以下の情報を見つけました。

https://dev.to/spaquet/rails-7-devise-log-out-d1n

https://discuss.hotwired.dev/t/simple-method-delete-with-confirm/4834

開発中のアプリには以下のように記述して、以前と同様にログアウトができるようになりました。

“`erb
<%= link_to destroy_user_session_path, data: { turbo_method: :delete, turbo_confirm: t("views.confirm_sign_out") }, class: "dropdown-item" do %>

元記事を表示

ShoryukenをActiveJobのアダプターとして利用する際のリトライの挙動を調べた

# はじめに

Gakken LEAPで働いていますkoboriです。普段はRuby on Railsを使用したWeb APIの開発に携わっています。その中でShoryuken というgemに触れる機会があり、リトライ制御について調べた話について書いていきます。

# Shoryukenとは

ShoryukenはAmazon SQSに対応した、スレッドベースのメッセージプロセッサで、RubyGemとして提供されています。ShoryukenはプレーンなRubyプログラムに組み込むこともできますが、ActiveJobのアダプターとしても利用することもできます。
今回の記事では、ActiveJobのアダプターとして利用する場合のリトライの挙動について調べました。

# Shoryukenのリトライ制御について

ActiveJob経由でShoryukenを利用する場合、ActiveJobの`retry_on`メソッドを利用してリトライの設定を行うことができます。
しかし、単純に `retry_on` を定義すると、意図しない挙動になることが [wiki](https://github.co

元記事を表示

[rails]ログイン後に同じページにリダイレクトする

はじめまして!オンラインスクールでRuby on Rails勉強中の初学者です。
この度卒業制作として、「甲子園NOW!」というアプリを作成いたしました。
甲子園球場の試合中の盛り上がりを可視化でき、ファン同士の交流を促進するアプリです。
そのアプリの作成中に発生した問題たちを記事にしていけたらと思います!
皆様のアプリ制作のお役に立てると幸いです^^

開発環境

Ruby 3.2.3
Ruby on Rails 7.1
gem devise

問題

LINE bot APIの実装中に、LINEのメッセージで送ったURLにリダイレクトすると、[ ログインしてください ]のバリデーションが発生しログインしなおしたら、リダイレクトしたかったページに飛べない😭という問題が発生しました。

原因

ログイン後のリダイレクト先をroot_pathに設定していたため。

解決方法

application_controllerに以下を記述。

“`application_controller .

元記事を表示

kaminariの使い方

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## kaminariとは
Railsでページネーションに便利なgem。
大量のデータを効率的に分割し、ページリングされたビューを返す。
gem ‘bootstrap5-kaminari-views’と合わせるとスタイリングも簡単にできる。

## 手順
1.gemfileにgem ‘kaminari’を書く
2.bundle install
3. サーバーの再起動
4.ターミナルでrails g kaminari:config
5.生成されたファイルに1ページあたりのデフォルトのレコード数を書く。
“`config/initializers/kaminari_config.rb
Kaminari.configure do |config|
config.default_per_page = レコード数
end
“`
6.indexアクションでpageスコープを使用。
※req

元記事を表示

SEOを意識したWebP画像の活用とRuby on Railsでの実装方法

## SEO上、Webpが有利

WebPは、従来の画像フォーマットよりもファイルサイズが小さく、ページの読み込み速度を向上させるため、SEOに有利です。これにより、モバイルフレンドリー性が向上し、ユーザーエクスペリエンスが改善され、結果的に検索エンジンでの評価が高まります。

今日は、Ruby on RailsのActiveStorageを使って、どのようにWebpを使っていくかを説明します。

## そもそもWebPとは

WebP(ウェッピー)は、Googleが開発した画像フォーマットで、主にウェブでの画像配信を最適化するために設計されています。WebPは、静止画とアニメーション画像の両方をサポートし、以下のような特徴があります。

### 特徴

1. **高圧縮率**
– WebPは、従来のJPEGやPNGよりも高い圧縮率を提供します。これは、画像の品質を保ちながら、ファイルサイズを小さくすることができます。
– **ロスレス圧縮**: PNGと同様に、画質を一切劣化させない圧縮が可能です。
– **非可逆圧縮**: JPEGのように、多少の画質劣化を伴うが

元記事を表示

RailsでのJWT認証の実装手順ガイド:Gemのインストールからユーザーログインまで

## 1. Gemのインストール
まず、JWTを扱うためのGemをインストールします。gem ‘jwt’をGemfileに追加し、bundle installを実行します。

“`ruby
# Gemfile
gem ‘jwt’
“`

“`bash
bundle install
“`

## 2. 秘密鍵の準備
JWTを署名するための秘密鍵を設定します。これを環境変数に保存するか、Railsのcredentialsに保存します。

“`bash
# .envファイルに追加 (dotenv gemを使用している場合)
JWT_SECRET_KEY=your_secret_key
“`

## 3. JWTを生成するメソッドの作成
コントローラーやサービスクラスで、JWTを生成するメソッドを作成します。

“`ruby
require ‘jwt’

class JsonWebToken
SECRET_KEY = Rails.application.credentials.jwt_secret_key || ENV[‘JWT_SECRET_KEY’]

def se

元記事を表示

【初学者の教訓】gem Sorceryを使う時の注意点とmigrationについて

## はじめに

Railsでアプリを作成中、gem sorceryでユーザー認証機能を追加しようとしたときに起きた出来事と、そのときに学んだ教訓です。

## 結論

– `rails generate sorcery:install`を実行するとUserモデルも自動的に作成されるので、すでにUserモデルを作っている場合は要注意
– 公式をよく読みましょう。
https://github.com/Sorcery/sorcery

## 何があった?

Railsで掲示板アプリを作成していました。User、Post、Commentなどのモデルを作成したところで、「そういえばsorceryってgemでログイン機能作れるんだったな〜」と軽い気持ちでgemをbundle installし、`rails generate sorcery:install`したところ…

“`ruby
web-1 | == 20240827051328 SorceryCore: migrating ======================================
web-1 | — crea

元記事を表示

【Rails】update_attributesが使用できない

## はじめに
Railsのアップデート中にupdate_attributesを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
以下のように、update_attributesを使用するとエラーが出ます。
“`ruby
@user.update_attributes(attributes)
“`

## 解決方法
Rails6.1からupdate_attributesは使用できなくなりました。
代わりにupdateを使います。
“`ruby
@user.update(attributes)
“`

## 参考

元記事を表示

ポートフォリオで予約サイトを作りました

## はじめに
転職を目的として、未経験からスクールでプログラミングの学習を行った際に制作したポートフォリオです。
学習期間は約4か月、そのうちポートフォリオ制作には1ヶ月半ほどかけています。

また、前職がネットショップだったこともあり、考えやすいだろうと思って予約サイトを制作することにしました。
制作の中で、個人的にこだわったポイントをまとめて紹介します。

## ポートフォリオのテーマ
「お花屋さん発信型のフラワーアレンジメントや花束の予約サイト」
お客さんが、複数あるショップから商品を選んで予約する、お花屋さん限定のモールというイメージです。

## このテーマを選んだ理由
友人がお花屋さんで働いており、お花のアレンジメントや花束などを当日急に来店されたお客さんから注文されると、事前に準備することもできず焦ってしまって大変だという話を聞きました。
また、私自身、花束などを購入したことがなかったとき、どうやって予約や購入をすればいいのか悩んだ経験があります。

お店とお客さん、お互いにすれ違ってしまっているな…と感じたため、お花屋さん側が花束やアレンジ

元記事を表示

【個人開発】趣味でバンド活動をする私が、練習で使いたいタスク管理アプリを作りました🎸

# はじめに
初めまして。かめと申します。
未経験からのWebエンジニア転職を目指して、学習を続けております。
この度、バンド活動をする社会人に向けた、タスク管理ツール「bandmemo(バンドメモ)」を開発いたしました。

**▼サービスURL**
https://bandmemo-app.com/
**▼GitHub URL**
https://github.com/kame-0707/graduation_bandmemo

[![Image from Gyazo](https://i.gyazo.com/35c01695ae5f80b111b5ee763e70c76b.png)](https://gyazo.com/35c01695ae5f80b111b5ee763e70c76b)

# 開発した理由
これまで、仕事と両立しながら趣味で複数のバンドに所属してきました。
バンド活動は、実際に体験してみると細かいタスクが多いです。

社会人バンドのタスク内容例

“`
【ライブ運営の場合】
– ライブ会場を抑える
– イベント

元記事を表示

ポートフォリオ・テスト

テスト投稿

元記事を表示

Turbo Streamの主なアクション

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

# Turbo Streamとは
HTMLの断片をリアルタイムで更新するツール。
Java Scriptの動的な更新を知識が無くとも可能にする。

# 代表的なアクション
・append
・prepend
・replace
・update
・remove
・before
・after
“`
<%= turbo_stream.prepend "(IDの名称)" do %>
<%= render @xxxxxx %>
<% end %>
“`
指定した要素をアクションに従って指定したIDを持つ要素の内部に反映する。
# Append
新しい要素を既存のコンテンツの後に追加

# Prepend
新しい要素を既存のコンテンツの後に追加

# Replace
既存の要素を新しい内容で置き換える

# Update
既存の要素の内容を部分的に更新する際に使用する。
※いいね数等

#

元記事を表示

replaceメソッドを活用した関連テーブルの更新

# はじめに

Rubyには“`replace“`というメソッドがあります。

Rubyの配列 (Array) やハッシュ (Hash) などのオブジェクトに対して使われ、対象オブジェクトの内容を別のオブジェクトの内容で置き換えるメソッドです。

https://docs.ruby-lang.org/ja/latest/method/Array/i/replace.html

よく見るのは

“`ruby
a = [1, 2, 3]
a.replace [4, 5, 6]
p a #=> [4, 5, 6]
“`

“`ruby
hash1 = { a: 1, b: 2 }
hash2 = { c: 3, d: 4 }

hash1.replace(hash2)
puts hash1.inspect #=> { c: 3, d: 4 }
“`
この辺りでしょうか??

今回は“`replace“`を配列やハッシュではなく、ActiveRecordと一緒に使ってみることにします。

# replaceを使ったコード例

:::note

元記事を表示

Ruby on Rails コマンドラインまとめ

## 1. Rails New
– **実行方法**: `rails new <アプリケーション名>`
– **できること**: 新しいRailsプロジェクトを作成する
– **実行例**:
“`bash
rails new myapp
“`

## 2. Rails Server
– **実行方法**: `rails s` または `rails server`
– **できること**: ローカル開発サーバーを起動し、アプリケーションをブラウザでテストする
– **実行例**:
“`bash
rails s
“`

## 3. Rails Generate
– **実行方法**: `rails generate <タイプ> <名前>` または `rails g <タイプ> <名前>`
– **できること**: コントローラ、モデル、リソース、スキャフォールドを作成する

### 例:
– **コントローラの作成**:
– **実行例**:
“`bash
rails generate con

元記事を表示

ねえ、知ってた?「Railsドキュメント」はRailsの公式ドキュメントではないんですよ、という話

## TL;DR(最初に結論)

– Railsドキュメント( https://railsdoc.com/ )というサイトはRailsの公式ドキュメントではない
– 最初のとっかかりをつかむために参照するのは良いが、情報の裏取りとして公式サイトの情報も併せてチェックしよう

## はじめに

上記のTL;DRに書いた話をすでに知ってる人や、わかっている人はこの記事を読まなくても大丈夫です。
ですが、Railsを学び始めた初心者プログラマのみなさんは意外と勘違いしている人が多そうなので、注意喚起を兼ねてこの記事を書いておきます。

## 「Railsドキュメント」はRailsの公式ドキュメントではない
Rails関連の調べ物をすると、検索結果の上位によく上がってくる「Railsドキュメント」というサイトがあります。

![Screenshot 2024-08-24 at 11.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/c29064d5-b9ff-f8d1-311b-5061d95

元記事を表示

Rails7でActive Storageを用いた画像リサイズを行うために必要な準備

Rails初学者の備忘録として、表題の手順を簡単にまとめておきます。
振り返るとだいぶ初歩的な部分で詰まってしまったのですが、自身と同じくActive Storageを全く初めて使う方に少しでも参考になれば幸いです。

## 使用環境
– Rails 7.0.8.4
– Ruby 3.2.1

## 現状・実現したいこと
– ECサイトの商品一覧ページを只今製作中
– とりあえずActiveStorageの導入は済んでおり、Item(商品)テーブル上のimageカラムに画像の登録はできている
– 現在はシンプルに下記コードで画像表示中

“`erb:app/views/items/index.html.erb
<%= image_tag item.image %>
“`
– 下記画像のように、現状、Seedで登録した画像サイズがバラバラで、見栄えがよろしくないので450×300のサイズに統一したい

![スクリーンショット 2024-08-25 17.15.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

Ruby on Railsで簡単にMessagePackエコーサーバを構築してみた話 – Unity通信の学習用に

# はじめに
Unityのタグを入れましたが、内容はRailsを使ったサーバ構築の話です。
Railsを使ったサーバの構築がすごく手軽で感動したので記事として残しました。

### なぜエコーサーバを立てようと思ったのか
Unityの通信周りの実装を学ぼうと思い、通信テストを効率的に行うためにはサーバが必要になりました。
「エコーサーバ」という、クライアントから送信されたデータをそのまま返すサーバを立てることで、クライアント側の実装を容易にテストできるようになります。
エコーサーバとは、クライアントから受け取ったリクエストデータをそのままレスポンスとして返すシンプルなサーバです。
これにより、クライアントが送信するデータと受信するデータを簡単に確認でき、テストが非常に効率的になります。

### MessagePackについて
通信のデータ形式としてMessagePackを使用します。
JSONが広く使われていますが、MessagePackはパフォーマンス面で優れており選択肢として選ばれるケースも増えると思います。
私自身がMessagePackを試してみたいという好奇心から始めた内容

元記事を表示

S3 Presigned URLを使ってハマった話

社内システムでアバター機能を作る必要があり、s3を利用して実装することにした。

## tl;dr
以下の点で躓きました。
1. ローカルとデプロイ環境では設定が異なる
→ ECSが自動的に環境変数を処理してくれる
2. CORS設定
→ AWSコンソールで設定する必要あり
3. 署名方式
→ クライアントで送るとき複合化をする必要があった

## なんでpresigned url?
### クライアントで直接送りたい
サーバーで画像の処理を行うと、何台しかない状態でオーバーヘッドの起きる可能性がある。
その反面、クライアントはユーザーの数ほど存在するため、画像の処理をクライアントに任せたいと考えた。

### 外部からs3にアクセスする方法
調べると、以下のような選択肢があった。
1. Public
→ 誰でもアクセスできてしまう。今回は社内システムなので外部に公開したくない
2. AWS SDK
→ IAM権限を持っているユーザーだけ
3. AWS CLI
→ IAM権限を持っているユーザーだけ
4. S3サイトホスト
→ 静的サイトを作っているわけではない
5. C

元記事を表示

【Rails】findとfind_byの違いを理解する

## はじめに
Railsでデータベース操作を効率的に行うためfindとfind_byの違いを調べたのでメモとして残します!
それぞれのメソッドの動作や使いどころを簡単な例を通じてお伝えできればと思います。

## 両者の違い
### findメソッド
Rialsの公式より
> find(*args)
Find by id – This can either be a specific id (ID), a list of ids (ID, ID, ID), or an array of ids ([ID, ID, ID]). ‘ID` refers to an “identifier”. For models with a single-column primary key, `ID` will be a single value, and for models with a composite primary key, it will be an array of values. If one or more records cannot be found for the requ

元記事を表示

ECS環境で動作しているRuby on Railsの環境に、EventBridge Ruleでバッチ処理を組み込む

# 概要
表題の構成でバッチ処理を構築したので、その構築方法について記載します。

# 前提条件
:::note warn
前提条件一覧
– `ECS`環境で`Ruby on Rails`のアプリが動作している
– `Terraform`がインストールされている
– `ECS`や `Network`関連(`ALB`、`IAM`、セキュリティーグループ等)が`Terraform`で構築されている
– `Ruby on Rails`のバージョンは、7.0以上
:::

# 作成手順
## Ruby on Rails
### 初期設定
– `EventBridge Rule`から`rails runner`(以下、`r`に省略)でコマンド叩く際、`path`の入力を行わないで済む様にする為、下記を追加した
“`config/application.rb
config.eager_load_paths << Rails.root.join("lib", "batches") ``` 上記の設定をした事で、ローカル環境では、下記のコマンドでバッチ処理の確認が可能 ```sh rails r "

元記事を表示

OTHERカテゴリの最新記事