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

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

【Rails】ユーザー認証と認可の基本

# はじめに

こんにちは!
新卒1年目の石川です。
記事をご覧いただきありがとうございます。

この記事では、ユーザー認証と認可の基本を説明します。
Webアプリケーション開発において、ユーザー認証(authentication)と認可(authorization)は非常に重要なセキュリティ機能なので整理してみました。
ぜひ最後までご覧ください!

:::note warn
今回は主に機能の流れを説明します。ロジックの主要部分がコントローラとヘルパーに集中しているため、モデルとビューについてこの記事では触れません。
:::

## 目次
1. [ユーザー認証 (Authentication)](#1-ユーザー認証-authentication)
・[ユーザー登録](#ユーザー登録)
・[ログイン/ログアウト](#ログインログアウト)

2. [ユーザー認可 (Authorization)](#2-ユーザー認可-authorization)
・[アクセス制御](#アクセス制御)
・[フレンドリーフォワーディング](#フレンドリーフォワーディング)
・[フレンドリーフォワーディングの

元記事を表示

[個人開発]チャット形式の英語日記システムをRailsとDockerで開発してみた (上) – 導入と開発環境

どうも、3月に卒業できなくて9月に卒業予定の現役大学生です。
Qiitaで初めての投稿ですので温かい目でみていただけたら幸いです。

今回はrailsとChat GPT APIを用いてチャット形式の英語日記システムを作成してみました。
何か間違いやアドバイスがあればぜひ!
少し長くなりそうなので上、中、下の三本でお届けします。
こんな形で投稿すると思ってなかったのでなんでこんなプログラムにしたかなど結構忘れてます。すみません

## 開発の経緯
まずなんで開発してみようと思ったかから
開発の目的は英語の勉強において日記の作成は有効らしからやってみたけど書くネタなくて全然続かんくね?てか俺の英文正しいの?と思って毎日続けられて、英文評価してくれるようなシステムあれば便利やなと思ったからです。

## システム概要

### 目的
– **英語学習者が日記を書くことでライティングスキルを向上させることを支援する。**

### 機能
1. **チャット形式での日記入力**
– ユーザーはチャット形式で日記を入力することができ、直感的に操作でる。
2. **リアルタイムフィードバック*

元記事を表示

importmapのhelpで出てくるコマンドを試してみた

## はじめに
railsのimportmapを使っていて、そういえばpin以外にどういうコマンド使えるのかと思ったので、使ってみたいと思います。

## importmapのコマンド
### importmap help [COMMAND]
利用可能なコマンド、または指定された特定のコマンドの詳細な説明を表示する。
利用可能なコマンドを表示
“`bash
$ docker compose run –rm web ./bin/importmap help

Commands:
importmap audit # Run a security audit
importmap help [COMMAND] # Describe available commands or one specific command
importmap json # Show the full importmap in json
importmap outdated # Check for outdated p

元記事を表示

[Rails] 単一ファイルのRailsアプリケーションを作ってみた

# はじめに

週刊Railsウォッチ: Ruby on Jets 6.0がRailsをサポートほか(20240620後編)

上記の記事で、気になる箇所がありました。

**1ファイルで動くRailsアプリケーションを作った**

これを見た時の自分は、「え?そんなことできるの?」と思いました。

https://greg.molnar.io/blog/a-single-file-rails-application/

上記記事の記載があったので、参考にして自分も作ってみました。
その内容をアウトプットいたします。

# 実装
## 環境
– Ruby:3.2.2

お好きなディレクトリで、`app.ru`を作成します。

“`rb:app.ru
# frozen_string_literal: true
require ‘bundler/inline’

gemfile(true) do
source ‘https://rubygems.org’

gem ‘rails’, ‘7.0.4’
gem ‘sqlite3’, ‘~> 1.4’
gem ‘puma’
en

元記事を表示

Rails7.2で出る新機能を紹介 & どう実装されているかみてみる

## はじめに

Rails7.2の新機能について気になったので調べてみました。

Rails 7.2の新機能は、[Ruby on Rails Guides](https://edgeguides.rubyonrails.org/7_2_release_notes.html)を参考にしていきす。
現時点だと、7.2.0.beta2までしか出ていないですが、この時点までのでまずは書いてきます。

## rails new myapp –devcontainer
rails newに `–devcontainer` オプションが追加されました。

devcontainerを用意できるようになりました。

コードで言うと[この辺り](https://github.com/rails/rails/blob/de53ffd6a121b6772afc5be4eafeb4cdb333b4e3/railties/lib/rails/generators/app_base.rb#L114-L115
)です。

“`ruby
class_option :devcontainer,

元記事を表示

dockerを使ったrails環境でのletter_opnerのtimezoneの設定

# letter_opner でテスト送信をした際に

letter_opner でテスト送信をした際に送られてくるメールの
送信日時が UTC(協定世界時)でした。

## 早速プロジェクトの imtezone を日本時間に設定する

“`config/application.rb

config.time_zone = ‘Tokyo’
#Railsアプリケーション内部でのデフォルトのタイムゾーンを設定
config.i18n.default_locale = :ja
#Railsはデータベースに保存される時刻を日本時間で保存
“`

としてコンソールで確認すると
きちんと日本時間になっています。

“`
Time.now #出力結果 =>2024-05-22 14:16:09.609170085 +0900
“`

再度 letter_opner でテスト送信をしてみると
なぜか送信時間は UTC のままです。
Docker コンテナのタイムゾーンを確認して見ます。

“`
docker-compose exec web date #出力結果=>Thu Jun 20

元記事を表示

Rails:params[:id]はURLのどこを参照しているのか? クイズ

## 読んで欲しい人
– params[:id]ってURLのどこを見てるの?と悩んでいる人
例:URLが`/posts/12/likes`だった時、`@post = Post.find(params[:id])`のparamsは何を取ってくるの?
– これに苦戦している過去の自分
## 動作環境
– MacOS 14.5
– ruby 3.3.0
– Rails 7.1.3.3

## Paramsについて
https://pikawaka.com/rails/params

## クイズ
下記のparamsはURLのどこを参照しているでしょうか?

**問題1**
URLが`/users/34/posts/56/likes/78`の場合、`params[:post_id]`は何を返しますか?

**問題2**
URLが`/search?q=rails&category=web_development`の場合、`params[:id]`は何を返しますか?

**問題3**
URLが`/se

元記事を表示

RubyKaigi2024初参加者レポート

初めまして、Qiitaに初投稿させていただきます。株式会社キネカでWebエンジニアをやらせていただております。nikeです。
## はじめに
今回初めて、弊社のメンバーとRubyKaigiに参加させていただいたので、振り返りも兼ねてレポートとしてまとめます。恥ずかしながら技術的な内容は私の力不足もあり、ほとんどできませんが、今後初めてRubyKaigiに参加する人の参考になればなと思い書かせていただきます。

https://rubykaigi.org/2024/
## 事前に準備したこと
#### Rubyコミッターの松田明さんによる「初心者のための RubyKaigi 入門 」
私が技術カンファレンス自体の参加が初めてなこともあり、かなり不安だったのですが、こちらを一読してからRubyKaigiにかなり臨みやすくなったなと感じています。私と同じようにRubyKaigi初参加を考えてる方是非!
RubyKaigi自体の目的、参加者の心構え、に関してかなり簡潔にまとめてくださっています。

https://speakerdeck.com/a_matsuda/rubykaigi-int

元記事を表示

Rails Admin が重い – N+1クエリに対策する設定

# 設定例

たとえば user 対 books が関連している場合、
`rails_admin.rb` に以下のように設定

“`rb
RailsAdmin.config do |config|

config.model ‘User’ do
configure :books do
eager_load true
end
end
“`

# ページ閲覧で発行されるSQLクエリの例

RailsAdminの設定は eager load という名前だが、 Railsの eager load ではなく preaload 的なクエリが発行されていた

“`sql
SELECT `users`.* FROM `users` ORDER BY users.id desc LIMIT 20 OFFSET 0

SELECT `books`.* FROM `books` WHERE `books`.`user_id` IN (65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,

元記事を表示

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. エラー解消法

# はじめに
dockerでdocker compose run web bundle 〜 実行時に下記の注意が出ました。
こちらの解決方法について記載します。

:::note warn
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
:::

# 解決方法
bundlerのバージョンを上げる。

“`
bundle update –bundler
“`

# 補足
私の環境ではDockerfileにbundlerのアップデート文を記載してdocker compose buildをしてもbundlerのアップデートがされませんでした。
コンテナで直接コマンドを実行するとbundlerのアップデートに成功して注意が解消されました。

“`
docker compose run web bund

元記事を表示

erbからslimに変換する際の`File.exists?` メソッド使用についての解決方法

# はじめに

erbからslimに変換しようとしてエラーで詰まって調べてあまり有用な記事がなかったため
作成することにします(自分見直し用でもあります!)

# 起きたこと

dockerコンテナ内で

“`bash
erb2slim app/views/users/ app/views/users/ -d
“`
をしてapp/views/users/内のerbファイルを一括でslimファイルに変換しようとしたところ
“`
NoMethodError: undefined method `exists?’ for File:Class
Use –trace for backtrace.
“`
とエラーが出て、できなかったので
“`bash
erb2slim app/views/users/ app/views/users/ -d –trace
“`
–traceオプションをつけてエラーが起きているファイルを特定したところ
“`
/usr/local/bundle/gems/html2slim-0.2.0/lib/html2slim/converter.rb:1

元記事を表示

【Google Cloud Vision API】Rails6.1で画像登録時に関連度を判定する

# はじめに
ポートフォリオの課題でお花屋さんの商品予約サイトを作成中のとき。
Google Cloud Vision APIを使って、お花と関連のない商品写真が登録された場合、管理者の承認が必要になるという設定を作ることにしました。

※前提として、いろんなお花屋さんが登録した商品の中から、ユーザが選ぶという形のサイトになっているので、「複数のお花屋さん」「複数のユーザー」「サイトの管理者」という3パターンのユーザが存在しています。

# 実装内容
Cloud Vision APIについては公式ドキュメントを確認してみてください。

https://cloud.google.com/vision?hl=ja

このページ内の「デモ」の部分で画像をアップロードしてみると仕組みがイメージしやすいです。

## 準備
visionAPIの導入については学習課題を見ながら進めたため省きます。
導入について以下の記事が参考になりそうでした。

https://qiita.com/ysda/items/67c983510f4d7d1c6982

https://qiita.com/dam-san

元記事を表示

【Rails6.1】初心者なりに試行錯誤してwebpを使おうとした話

# はじめに
前職のWebショップで、ページの表示スピードが遅いからコンサルタントの方にアドバイスいただいて、webpを導入してもらったという経験がありました。
その記憶から、webpを使えばページが軽くなるのでは?と思い、ポートフォリオの画像にwebpを使うことにしました。

# 実装内容
結論から言うと、もともと用意してあったvariantを使った画像表示のためのメソッドに「, format: :webp」を追加するだけでwebpの導入はできました。

“`diff_ruby:models/item.rb
has_one_attached :item_image

def get_item_image(width, height)
+ item_image.variant(resize_to_fill: [width, height], format: :webp).processed
– item_image.variant(resize_to_fill: [width, height]).processed
end
“`

## モデル
モデル

元記事を表示

【Rails6.1】画像を保存する際のリサイズとActiveStorageのvariantについて

# はじめに
画像ってなんでもかんでも登録できたら、データベースを圧迫してしまうのでは…?という心配が浮かびました。
そこで、保存時に画像をMiniMagickで加工してリサイズしてから登録する設定にしてみました。

# 実装内容

## 準備

画像の扱いには、MiniMagickとActiveStorageを使用しています。
また、MiniMagickを使用するにはImageMagickが必要とのことだったのでインストールしておきます。

https://github.com/minimagick/minimagick

“`
$ brew install imagemagick
“`
“`ruby:Gemfile
# ActiveStorage
gem ‘image_processing’, ‘~> 1.2’
# MiniMagick
gem ‘mini_magick’
“`

## 画像保存時のコントローラの記述
商品を登録する際のコントローラの記述がこちら。
ちなみに長くなるので省きましたが、同じような記述をupdateアクションにも追加しています。

“`ru

元記事を表示

【2024年6月】Rails7をWindows上で環境構築する方法

「Railsをインストールできない」

RailsはWebアプリ開発フレームワークで初心者にもわかりやすいと言われます。

しかし、環境構築で挫折する人が多いのも現状です。

今回はRailsをWindows11で開発できるセットアップを行います。

せっかく始めるのに、何もできないまま終わりたくないですよね。

動画でサポートしていきます。

YouTubeを活用してぜひ始めてみてください。

結論は、WSL2を使いましょう。

# YouTubeでの解説-2024年6月24日投稿