- 1. 【Rails】ユーザー認証と認可の基本
- 2. [個人開発]チャット形式の英語日記システムをRailsとDockerで開発してみた (上) – 導入と開発環境
- 3. importmapのhelpで出てくるコマンドを試してみた
- 4. [Rails] 単一ファイルのRailsアプリケーションを作ってみた
- 5. Rails7.2で出る新機能を紹介 & どう実装されているかみてみる
- 6. dockerを使ったrails環境でのletter_opnerのtimezoneの設定
- 7. Rails:params[:id]はURLのどこを参照しているのか? クイズ
- 8. RubyKaigi2024初参加者レポート
- 9. Rails Admin が重い – N+1クエリに対策する設定
- 10. Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. エラー解消法
- 11. erbからslimに変換する際の`File.exists?` メソッド使用についての解決方法
- 12. 【Google Cloud Vision API】Rails6.1で画像登録時に関連度を判定する
- 13. 【Rails6.1】初心者なりに試行錯誤してwebpを使おうとした話
- 14. 【Rails6.1】画像を保存する際のリサイズとActiveStorageのvariantについて
- 15. 【2024年6月】Rails7をWindows上で環境構築する方法
- 16. uuid生成からルーティングでuuidをidとして使用するまでの方法を解説
- 17. Heroku + Rails + S3 Google Search Console で「サイトマップを読み込めませんでした」を解消する
- 18. 小規模Railsチームの私はDDDを学ぶべきなのか
- 19. ,で区切って 複数ワード検索 実装
- 20. いいねしたユーザーの一覧表示
【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 helpCommands:
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アプリケーションを作ってみた
# はじめに
上記の記事で、気になる箇所がありました。
**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 0SELECT `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_imagedef 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日投稿
Heroku + Rails + S3 Google Search Console で「サイトマップを読み込めませんでした」を解消する
# 背景
herokuで動かしている web ページのサイトマップをGoogle Search Console で登録したい。※ Herokuのダイナモはエフェメラル(一時的)ファイルシステムを採用しているため、デプロイごとにリセットされます。そのため、サイトマップのような定期的に更新されるファイルは、Heroku上で直接生成しても、次のデプロイ時に消えてしまいます。そのため、永続的なストレージへの保存(例えばAmazon S3など)が必要になります。
> Storing static files elsewhere is crucial for Heroku apps since dynos have an ephemeral filesystem. Whenever you replace a dyno or when it restarts, which happens daily, all files that aren’t part of your application’s slug are lost. Use a storage solution like S3 t
小規模Railsチームの私はDDDを学ぶべきなのか
# エクスキューズ
これは社内向けの発表なので、フェーズやメンバーのスキル想定が大幅に異なる可能性があります。
Evans本、IDDD、ボトムアップ本ぐらいしか読んでないので、あくまで現時点での感想として捉えてください。# 想定読者
– 1チーム10人程度のRails
– 全員がスキルフルというわけではなく、インフラ・フロントの分野でも課題が残っている
– 規模感としてテーブルは200~300ぐらいあってまぁまぁ複雑
– レビューでServiceクラスにドメインの知識を流出してしまっています、と言われたがドメインの定義って何?
– QiitaなどでDDDについて書かれた記事を見かけることはあるが、謎の用語が多すぎてよくわからない# 結論
そんなに優先度高くない# 理由
– 他に勉強しないといけないことがいっぱいある
– クラウドインフラやIaC
– フロントエンド周りのあれこれ
– Ruby, Railsのバージョンアップ
– 前提としている知識が多い
– SOLID原則などのソフトウェア工学
– オブジェクト指向についての理解
– デザインパタ
,で区切って 複数ワード検索 実装
# はじめに
ポートフォリオ制作中です!
,で区切って複数のワードを検索できるように実装したためアウトプットします✍️
複数検索のアウトプットなので、検索機能についてはさらっと書いています!
検索機能実装については下記記事がわかりやすかったです!https://qiita.com/hapiblog2020/items/6c2cef49df5616da9ae3
複数ワード検索はもっといい方法を検討中です🧐
もしあれば教えていただけると幸いです!※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 開発環境
・ruby: 3.1.2
・Rails: 6.1.7.7
・Cloud9
・bootstrap導入済# ER図
# ルーティング
“`routes.rb
いいねしたユーザーの一覧表示
# はじめに
ポートフォリオ制作中です!
いいね数をクリックするといいねしたユーザーの一覧を表示
できるように実装したためアウトプットします✍️※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 前提
いいね機能は実装済み、いいねボタンの非同期化済みです
ご留意ください!# モデル
“`plan.rb
class Plan < ApplicationRecord # アソシエーション belongs_to :user has_many :likes, dependent: :destroy # この行を追加 has_many :liked_users, through: :likes, source: :user #throughで、likesを通してuserのカラムを使用できる : end ``` # ルーティング ```routes.rb Rails.application.routes.draw do scope module: :public do resources :p