Rails関連のことを調べてみた2022年07月08日

Rails関連のことを調べてみた2022年07月08日
目次

firebaseAuthの開始方法およびfschuindt / firebase_id_tokenの実装をみる

# 概要
RailsでfirebaseAuthのJWTを用いて認証するまでの流れです。

# firebaseAuth
1. firebaseプロジェクト作成
1. firebaseAuth開始
スクリーンショット 2022-07-08 10.29.00.png

## (APIを直接実行する場合)
SDKではなくAPIを直接叩きたい場合は以下手順。(ユーザー作成APIの例)

### APIキー
プロジェクトの概要の右のアイコンから開ける
`https://console.firebase.google.com/u/0/project/{project_id}/settings/general`
スクリーンショット 2022-07-08 10.31.03.png

元記事を表示

【Rails】Sorceryで外部認証 〜Google編〜

# はじめに??
現在個人開発しているサービスにて
SorceryのExternalモジュールを利用して外部認証を実装する際に
google認証を実装している例がなかったため、備忘録も兼ねて記します。

### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 sorcery `0.16.2`

### 想定読者?
– sorceryのexternalモジュールをベースとしてgoogle認証を実装したい人

### 前提?
– [Simple Password Authentication](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)でのメールアドレス認証機能は実装済みであること。

# 実装の流れ✔️
少し長い道のりなので全体像を把握しておきましょう。
1. authenticationsテーブルを作成
2. Authenticationモデルの設定
3. OauthsControllerの作成
4. ルーティングの追加
5. G

元記事を表示

Gem「google_drive」を使ってスプレットシートを更新する(2022年7月版)

# 使用するGem
https://github.com/gimite/google-drive-ruby

これを利用します。How to Installにある通り、Gemfileに追加するなどしてインストールしてください。

ちなみに、Google純正のGemは[こちら](https://github.com/googleapis/google-api-ruby-client)。google_driveは純正GemのラッパーGemのようです。

# Google認証(2022年7月版)
認証の方法は[ここ](https://github.com/gimite/google-drive-ruby/blob/master/doc/authorization.md)に記載がありますが、少し古くこの通りで二はできません。

特に、このOtherが2022年7月現在は消えており、使用することができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192137/1509ac7f-ddbd

元記事を表示

【Rails】【SQL】子モデルの最新レコードを基準に親モデルをソートする方法

大阪でRailsを中心に学習している薬剤師エンジニア(初学者)こと、ヨマ([@yoma_2003](https://twitter.com/yoma_2003))です!
Railsで`子モデルの最新レコード`を基準に`親モデルをソート`する方法をまとめます。

※おことわり※
断定口調でまとめますが、初学者であるため間違い等あればご指摘頂けると嬉しいです。

# はじめに
Railsで次のような親子関連を持ったモデルがあったとします。

“`character.rb
class Character < Application Record has_many :topics end ``` ```topic.rb class Topic < ApplicationRecord belongs_to :character end ``` ### charactersテーブル | id | name | describe | |:--:|:----:|:----------:| | 1 | 田中 | 初学者 | | 2 | 鈴木 | Rails学習中 | |

元記事を表示

rails7でomniauthで認証しようとしたらエラーばっかりでうまくいかなかった

# 最終的にはちゃんとできました。
他の言語にうつつを抜かしている間にRubyは3出てるし、railsは7系出てるしでまさに青天の霹靂。
ホスティングする環境によって最近使ってるdotnetをあまり使いたくなかったので、久々にrails触った。

# やりたいこと
ユーザー認証まわりはCognitoにおまかせして、さっと作りたかった。

## 参考にさせていただきました
こちら
https://qiita.com/yhirano55/items/272125c3ce3d7873002e
ありがとうございます。

## ですが動かない

### 最初は「OmniAuth::AuthenticityError Forbidden」が出る
![スクリーンショット 2022-07-07 22.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120789/7ca80e2f-48e9-6e64-c133-6871387d0779.png)
これですね。
これは
`gem ‘omniauth-rails_c

元記事を表示

【Rails】dotenv-railsの導入

# はじめに
* 学習の覚え書として書いています
* 自己解釈ですので参考程度にご覧ください

# dotenv-rails とは
* 環境変数を管理できるgem
* 環境変数 → **公開したくない情報(値)**
(メールアドレスやパスワードなど)

つまりGitなどにアップする際、公開したくない情報(値)をdotenv-railsで管理することができます。

# dotenv-rails 使用手順
①dotenv-railsの導入
②環境変数を記述するファイルを作成(.env)
③環境変数の記述
④ソースコード内で環境変数を使用
⑤GitHubの公開設定(.gitignoreに.envを追加)

## ①dotenv-railsの導入
* gemfileに追記(一番下の行に **gem ‘dotenv-rails’** を追記)
* ターミナルで **$ bundle install** を実行

## ②環境変数を記述するファイル **.envファイル**を作成
* ターミナルで **$ touch .env** を実行
(.envは既定のファイル名なので誤字が無いように作成)

元記事を表示

ZoomAPI(Server-to-server OAuth)でミーティング作成の自動化[技術検証]

[バヅクリ](https://buzzkuri.com)CTOの合原です。
ひさびさにqiita投稿です。

いいタイミングでこちらのキャンペーンも開催していたので、相乗りさせていただきました :sweat_smile:
https://qiita.com/official-campaigns/engineer-festa/2022

# やったこと
今回は、Railsアプリケーションからの利用を想定していたため、
Server-to-server OAuthアプリにて、実装Tryしてみました。
※Server-to-server OAuthの事例があまり見つからなかったのもあったので w

# 背景(こちらは読み飛ばしていただいても:smiley_cat::ok_hand: )

当社の主力事業[バヅクリ](buzzkuri.com)では、オンラインでのチームビルディングや研修をアソビを取り入れた、非常にユニークなプログラムを用意して、サービスとして提供しています。その際、Zoomミーティング機能を主に活用しています。

詳細は割愛しますが、これまで、イベント開催が確

元記事を表示

rails sができない(Address already in use – bind(2) for “127.0.0.1” port 3000 )

いつも通りrails sをしたら上記のエラーが出たので解決方法を載せておきます

現在動いてるRubyのプロセスを確認
“`
$ ps -ax | grep ruby
“`

このように表示される
“`
49551 ?? 0:00.00 /Users/UserName/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rb-fsevent-0.11.1/bin/fsevent_watch –format=otnetstring –latency 0.1 /Users/UserName/Rails_product/you_conect/config/locales
49552 ?? 0:00.00 /Users/UserName/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rb-fsevent-0.11.1/bin/fsevent_watch –format=otnetstring –latency 0.1
“`
動いてるプロセスを終了する
“`
例: kill 49551
$

元記事を表示

deviseのサインアップにenumを使用したら, ‘0’is not a validとエラーが出る

## やりたいこと
– Railsのユーザ認証を行うgem deviseでサインアップするモデルのカラムをenumにしたい
– 該当するモデルのカラムはInteger型

“`ruby
# app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable enum user_type: { user: 0, circle: 1 } end ``` ```ruby # db/schme.rb ActiveRecord::Schema[7.0].define(version: 2022_07_02_083714) do create_table "users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t

元記事を表示

Rails next if と break ifって何ですか?

#### はじめに
 自社製品のコードを見ていたら変なif文を見つけてしまいました。それは
– next if
– break if

というif文でした。条件のあるif文なのだろうくらいにしか捉えておらず、理解しました的な感じでしたり顔してましたら先輩から「この文の意味わかるよね」と言われたので取り繕っていたら詰められて白目になりましたので備忘録として残したいと思います。おかしな部分があれば教えていただければ幸いです。

#### 環境(今回検証した自分のPC)

Ruby 2.6.5
Rails 6.0.5

#### 前提
データを準備します。
booksテーブルを作り値を準備します。
– seeds.rbに次のように記述し、rails db:seedでDBにデータを登録します。
~~~ seeds.rb
Book.create!(
[
{
title: ‘hunter*hunter’,
price: 700
},
{
title: ‘SLAM DANK’,
price: 600
},

元記事を表示

[宇宙一わかりやすい] n + 1 問題とはなにが問題なのか

# はじめに

バックエンド側の開発を行っているとかならず遭遇するN+1問題。
今回は初心者向けにN+1問題はなぜ避けるべき対象とされているのか。例えを用いて分かりやすく解説していきたいと思います。

# 対象読者
– 初心者エンジニア
– Rails を触り始めたエンジニア

# N+1問題とは

> ループ処理の中で都度SQLを発行してしまい、大量のSQLが発行されてパフォーマンスが低下してしまう問題のことです。

まずはN+1問題の概要から。どうやらDB周りの処理によってパフォーマンスが低下してしまう問題のようですね。これだけだといまいちよく分からないかも知れません。ただパフォーマンスが低下するということはつまり非効率な動作を行なってしまっているという理解までできていれば問題ないです。

# 非効率性を身を持って体感してみよう
ではN+1を根底から理解するため、実際に検索行為という例えを通して非効率性を体感してみましょう。早速お好きなブラウザを開いて、以下の単語の検索結果を表示してください。そして一番最初の結果のURLをメモしておきましょう。

– ActiveRecord

元記事を表示

[Ruby] include, prepend, extend の違い

個人的に忘れがちなものなので、自分用でメモしておきます。

間違いがありましたら、ぜひご指摘お願いします!

# 用途による分け方
|用途|キーワード|個人的な
使用頻度|
|-|-|-|
| あるモジュールのインスタンスメソッドが欲しい
かつ、**今のクラスやモジュールの定義を優先したい** | [Module#include](https://docs.ruby-lang.org/ja/latest/method/Module/i/include.html) |高|
| あるモジュールのインスタンスメソッドが欲しい
かつ、**今のクラスやモジュールのインスタンスメソッド定義より優先したい** | [Module#prepend](https://docs.ruby-lang.org/ja/latest/method/Module/i/prepend.html) |底|
| あるモジュールのインスタンスメソッドが欲しい
かつ、**特異メソッドとして欲しい** | [Object#extend](https://docs.ruby-lang.org/ja/lat

元記事を表示

Rails Youtubeの動画投稿・編集

# 概要

Youtubeにアップロードされた動画をRailsアプリで投稿したいという方に向けたものです。
Youtubeの動画を投稿した時にYoutubeのURLのなかで最後の11桁の値のみを取り出し、他の変数に取り入れるようにしている記事が多い。
それだと編集する時に、末尾11桁を入力しないとエラーが起こってしまうので、それが起きないような、その実装方法を記載します。

# 事前準備

実装にあたって、私の開発環境を載せておきます。

“`rb:環境
ruby 3.0.4
Rails 6.1.6
“`

以下のコマンドを入力して、アプリケーションを作成していきます。

“`rb:ターミナル
cd desktop
rails new youtube_sample
cd youtube_sample
“`

# YouTubeURLの種類

## 1. パソコンでのYouTube閲覧時のURL

![Sc

元記事を表示

Rails開発環境でBootstrapが効かなくなってしまった時にしたこと

Railsの開発環境でassets:precompileは通常不要だが、やってしまったときにBootstrapがブラウザに反映されなくなり、しばらくはまってしまったのでその時にやったことを備忘録で記載します。

環境

macOS Big Sur(11.6.6)
rails 6.1.6
Bootstrap 4.5.3

:::note warn
警告
Bootstrapの導入にはWebpackerで入れる場合とassetsに入れる場合とがありますが、前者でやっています。
https://qiita.com/kazutosato/items/d47b7705ee545de4cb1a
:::

原因

開発環境でassets:precompileをしたことにより、public/assetsが生成されてしまい、そちらを見に行ってしまうようになり、以降のcssの変更なども反映されない。Bootstrapも読み込んでいない。

解決

assets:precompileによってできてしまったファイルを削除する。

念の

元記事を表示

【Ransack】セレクトボックスでソート機能

# はじめに??

Ransackを使い検索機能を実装している個人開発サービスにて
下記画像のようなソート機能を実装する際に少し面倒だったので、備忘録も兼ねて記します。

### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 [Ransack](https://github.com/activerecord-hackery/ransack)

### 想定読者?
– ransackでのソートをデフォルト表示からセレクトボックスでの選択に変えたい人

# ①セレクトボックスの選択肢にリンクを貼る?
まず、ただのセレクトボックスだと選択したところでリンク先に飛ばないので、
`

“`

元記事を表示

Goormで学習をすすめる “Web開発で学ぶプログラミング”

こちらの記事を参考に、Goorm にて開発を行いたい初学者の為に、
細かな変更箇所を追記しておきます。
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/379433

(追記予定)

![スクリーンショット 2022-05-24 12.28.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33092/a71ac3c5-7f42-4e2b-fa3b-2f583966f3a6.png)
右上にある**新しいコンテナ**をクリックしてください。
コンテナ名 **traveler**
地域 **Seoul (KOR)**
公開範囲 **Private**
テンプレート **基本テンプレート**
配備 **Not used**
ソフトウェアスタック **Rails**を選択
以上の情報を入力、選択し、コンテナを作成してください。
作成には時間がかかります。

作成されるとロードが入り、このようなページに入ります。
![スクリーンショット 202

元記事を表示

will_save_change_to_attribute?(attr_name)でプチ・リファクタリングした例

# やりたいこと
userテーブルのemailが変更されるかどうかを判定したい、みたいなこと、あると思います。

# 実装!

これでもいけますが、、

“`ruby
!new_record? && email == email_in_database
“`

この方がスマートですよね、と。

“`ruby
will_save_change_to_attribute?(:email)
“`

何が嬉しいかというと、コードがシンプルになったのと、`&&`が無くなったのでRubocop様も喜んでくれました(Metrics/PerceivedComplexity)。

# 参考

new_record
https://railsdoc.com/page/model_new_record_q

attribute_in_database(attr_name)
https://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Dirty.html#method-i-attribute_in_database

will_s

元記事を表示

Neovim内でのRSpec実行環境をneotermで簡単に導入する

# 前書き
Vim(Neovim)で開発をしている方、RSpecの実行どうしてますか?
参考までに私の試行錯誤遍歴を?‍♂️
– iterm2の画面分割で常にRSpec用の画面を確保しておいてRSpec実行時にウインドウ移動
常に画面領域を圧迫して邪魔(他にログ表示用やrails console用の領域を使いたいならなおさら)
VSCodeみたいに使いたいときにだけ表示したい!

– `C-z` でVimから抜けてターミナルでRSpecを実行する
一応使いたい時だけ表示することになるので画面は圧迫しないが都度Vimから抜けるのはストレス
再度Vimに戻った後にRSpecの実行結果をまた見たい時はまた `C-z` しないと見れないのが面倒

– Neovimのターミナルモードを使う
Neovimだと `:terminal` コマンドでターミナルモードに入れるのでVSCodeに近い感じには出来るが、どうも操作性が悪い
設定を結構ゴニョゴニョしないと使い物にはならないなという印象(設定弄る前に次に紹介するneotermを知ってしまった)

– **neotermを使う**
色々試して行き着い

元記事を表示

[ポリモーフィズムとは?]具体例で考える

## こんな人に読んでほしい
– ポリモーフィズムって言葉は聞いたことがある
– ググってもイマイチわからない
– 具体例を出して説明してほしい

## 具体例
ここはブック○フ。最近は、本も洋服もゲームも売っている。

こことコンビニさえあれば、一生生きていけるなぁ、
そんなことを思っていた矢先、在庫を管理するシステムの設計を任された。

先輩 「まず、在庫の情報を出力するコードをかいてね☆」

さぁ、こんなときどんなコードを書きますか??

## ポリモーフィズムを一言でいうと
ポリモーフィズム(多態性)の文字通り、同じメソッド名なのに、
クラスによって実行結果が変わる

## 今回の例でいうと
Itemを継承しているBook、GameSoft、Clotheにおいて定義したprintメソッドがあり、それを呼び出すと、それぞれの子クラスに合わせて違う結果を返してくれる

## 情報の整理
– 在庫(stock)にある商品(item)には全て、title, price, categoryがある
– 商品の種類は3種類
– 本(book): 著者(author)の情報がある

元記事を表示

eachの危険性を体で覚えて、その代替手段を知る(Ruby, Rails)

# やっちまった
話を単純化してお伝えすると、1万件以上レコードがあるusersテーブルに対して、`is_active`というカラムがあって、全員trueにしたかったです。

これを実現するのに、**全usersに`each`をかけて`update_column`する処理を仕掛けたら、本番のサーバーを一瞬死なせてしまい、めちゃめちゃ焦りました**。

“`ruby
User.all.each do |user|
user.update_column(:is_active, true)
end
“`

`User.all.each`すると、該当するレコードを全て取得してきて、メモリに置いて処理をするので、それで激烈に重くなってしまうようです。この場合、Userのインスタンスを1万件以上取得して配列にしてそれをメモリにドーン!と置いて処理しようとしたので、それがメモリを強烈に圧迫してしまったみたい。

# 解決策1:`find_each`を使う
この時の対処方法の1つが`find_each`を使うこと。

これはレコードを持ってくる数に制限をかけながら処理を実行するので、メモリへの

元記事を表示

OTHERカテゴリの最新記事