Rails関連のことを調べてみた2023年10月09日

Rails関連のことを調べてみた2023年10月09日

【Ruby on Rails】bundle installをもう少し速くしたい時の設定

# はじめに
`bundle install`実行時に`gem`が膨大になってくると、その分実行時間が長くなるのが地味にストレスでした。調べたところ、速くする方法があったのでまとめます。

# 前提条件
– `bundler`がバージョン**1.5**以上である事
“`ruby
bundler -v
Bundler version 2.4.17
“`
# コマンド
“`ruby
bundle install –jobs=4

#or

bundle install -j4
“`
このコマンドで**並列処理**で実行してくれるようになり、処理が速くなるケースが多くなります。

https://qiita.com/4_mio_11/items/7f418ca661d9f5a2a39d

`time`コマンドをつけると、実際の計測時間を測ることができます。

“`ruby
time bundle install -j4
Bundle complete! 16 Gemfile dependencies, 75 gems now installed.
Use `bundle info

元記事を表示

FaradayでHTTPリクエストのリトライ処理を実装する

# はじめに
Railsのプロジェクトに限ったことではないですが外部のAPIを呼び出すはよくあることだと思います.
RubyにはいくつかHTTPクライアントのGemがありRailsのプロジェクトで利用できますが今回は`Faraday`というGemを用います。
APIが構えてあるサーバやAPIまでのネットワークなど一時的な高負荷などが原因でAPIへのリクエストが失敗したときに同じ内容のリクエストをかけたいケースがあります.
`Faraday`を用いることでリトライの処理が簡単に記述できるので紹介していきます。

https://github.com/lostisland/faraday

# インストール
“` ruby:Gemfile
gem ‘faraday’
“`
or

“`bash:console
gem install faraday
“`

# faraday-retry
`Faraday`でリトライを実装する場合`faraday`のとは別に`faraday-retry`が必要です.

“` ruby:Gemfile
gem ‘faraday-retry’
“`

元記事を表示

SQLインジェクションのエスケープ処理をRailsがどんな感じで実装しているか見に行った記録

## はじめに
こちらの記事ではSQLインジェクションが何かについては解説していませんので、詳しく知りたい方はRailsガイドをご覧下さい。

http://railman.net/railsguides/6.1/security.html#sql%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

## 記事を書いた動機と概要
Railsガイドを読んでいて、SQLインジェクションについて読んでいると`Ruby on Railsには、特殊なSQL文字をフィルタが組み込まれており、「’」「”」「NULL」「改行」をエスケープします。` と書かれていたので、それってどこで、どうやって実装しているんだろう?と疑問に思って調べてみたので、その過程をつらつらと書いています。
はい、ほぼ独り言です。
下記は疑問に思った部分をRailsガイドから引用しています。

>7.2.4 対応策
Ruby on Railsには、特殊なSQL文字をフィルタが組み込まれており、「’」「”」「NULL」「改行」をエスケープ

元記事を表示

例外処理について調べてみた!

例外処理について、ChatGPTと一緒に勉強してみました!

## ChatGPT
例外処理は、プログラムが実行中に予期せぬ状況が発生した際に、それに対処するための仕組みです。これはプログラムの正常な流れを中断し、エラーや異常状態に対する適切な対応を可能にします。

# 例外処理の基本: プログラムの異常状態への対応方法 ?

プログラムを書く際には、エラーや異常な状態が発生することがあります。そんなときに役立つのが「例外処理」です。

## 1. 例外処理って何?

例外処理は、プログラムが実行中にエラーや異常な状態が発生した際に、それに適切に対応する仕組みです。
例外処理を使用することで、プログラムが終了せずにエラーをハンドリングすることが可能になります。

## 2. 例外ってどんなもの?

プログラムでの例外は、エラーや異常な状態を表す。
例外を投げることで、プログラムがその状況にどう対処するかを示すことができる。
Rubyでは raise を使って例外を投げることができる。そして、rescue ブロックを使ってその例外をキャッチし、適切な処理を行っていく。

## 3. 例外

元記事を表示

Railsの基礎について

# Railsの基礎

## **Ruby on Railsの特徴**

– MVCにより構成

MVC(Model-View-Controller)とは、プログラムをModel、View、Controllerの3要素に分割し、ソフトウェア内部データをユーザから分離することで、ソフトウェアの保守性を向上させる考え方です。

!https://udemy.benesse.co.jp/wp-content/uploads/08d09bb2261e51937df93f9044415eb9.png

Controllerからのメッセージを受け取り、アプリケーションが扱うデータとその手続きに関しての処理を行います。データが変更された場合、Viewに表示の変更を指示します。Ruby on Railsでは、Active RecordによりModelを扱います。(DBとの受け渡しの役割)

**Rails modelを使うと、直感的で記述しやすいコードでデータベースを扱うことができる。**

データベースはテーブルの集合でできています。テーブルとは、エクセルの表のように情報を縦横に並べ

元記事を表示

RailsAPIテストについての備忘録

# APIテストについて
 RailsのAPIテストについて理解がなかなかできていない部分があるので、調べたものを備忘録としてまとめていく。

## Rspecとは
– そもそもRspecとは、RubyプログラマのためのBehaviour-Driven Developmentツール
– テスト駆動開発、ドメイン駆動設計、受入テスト駆動設計を組み合わせたソフトウェア開発のアプローチ

**何が言いたいのかというと。。**
RSpecを使うことでRailsでテストを実行することができるということ

## テストを書く理由
– テストコードはアプリケーションの命綱、安全ネット、防弾チョッキ
画面に不具合が発生し、期待通りの挙動にならなくなるのを防ぐ役割

– 将来の自分が楽をするために書く(開発効率をあげる)
コマンド一つで今まで書いてきたコードの動作確認ができる(1つ1つ手作業で確認しなくて良い)
**リファクタリングをするには必須になる!**

– 将来共同で作業をするかもしれないメンバーに向けて書く
コードを書いた人の意図や期待している動きなどをテストコードで伝えるこ

元記事を表示

Discord likeなチャットアプリを作成した話

## 目次
[1. はじめに](#1-はじめに)
[2. 作ったアプリについて](#2-作ったアプリについて)
[3. 開発の流れ](#3-開発の流れ)
[4. プロジェクトを通して学んだこと](#4-プロジェクトを通して学んだこと)

## 1. はじめに
discordのようにグループトークができるチャットアプリを開発したのでその記録を記します。
制作したのは1年近く前になりますが、過去の開発記録を残すために記事を作成しました。

## 2. 作ったアプリについて
[2-1 アプリの概要](#2-1-アプリの概要)
[2-2 アプリの3つの特徴](#2-2-アプリの3つの特徴)
[2-3 アプリの画面](#2-3-アプリの画面)

### 2-1 アプリの概要
このチャットアプリは部活動やサークルで使われることを想定して制作しました。部活ごとに「グループ」を作成し、グループごとに複数のトークルームを作ることができます。

![アプリ画面](https://i.gyazo.com/f52ca83a56757a43dabe11d5e46c0e42.png)

元記事を表示

Rails Tutorial 第12章

## 演習1
>この時点で、テストスイートが green になっていることを確認してみましょう。

rails testでGREENになることを確認してみてください

>表 12.1の名前付きルーティングでは、_pathではなく_urlを使っているのはなぜでしょうか?理由を考えてみましょう。(ヒント: アカウント有効化の演習11.1.1.1と同じ理由です。)

https://qiita.com/ryoheitakahashi/items/5daa27cb3dec4690852f
こちらを参考にしてみてください

## 演習2
>リスト 12.4のform_withメソッドで、@password_resetではなく:password_resetを使っている理由を考えてみましょう。

そもそも@password_resetで定義されたインスタンス変数が定義されていないため
## 演習3
>試しに有効なメールアドレスをフォームで送信してみましょう(図 12.6)。どんなエラーメッセージが表示されますか?

エラーになります。私の場合は以下のエラーが出ました

![スクリーンショット 20

元記事を表示

Railsのcheck_box

Railsの`f.check_box`でBoolean型のカラムの情報の保存の際にめちゃくちゃハマったのでメモ。

Boolean型のカラムの場合には、以下のように書く。
ここで注意なのは、値であるtrue, falseを文字列にすること。
Boolean型のtrue, falseだと、保存に失敗した後のエラー画面でデフォルトの値がそのまま入ることになってしまうことになり、ユーザーが選択したものが解除されてしまうということである。

“`erb
<%= f.check_box :is_send_mail, { class: "mt-4", checked: f.object.is_send_mail }, "true", "false" %>
“`

では、なぜ送られないかというとBoolean型のtrue, falseだとform_withでパラメーターがコントローラーに渡っておらず、値を入れることができないようになっていたため。

元記事を表示

【Ruby on Rails】concerns,helpers,decorators の使い方について考えてみた

# **はじめに**

皆様初めまして。プログラミングスクールで現在 Ruby on Rails を勉強しております、うーさんと申します。

2023 年 4 月よりプログラマーへの門を叩いてから早半年の月日が経ちました。

# 概要

`Ruby on Rails` には MVC 機能において、Model や Controller のコードの重複や肥大化(「`Fat Model`」,「`Fat Controller`」)を防ぐために、共通的なロジックを部分ごとにモジュールやオブジェクトとして分離する役割を果たす `concerns`, `helpers`,`decorators` といったファイルや概念が存在します。

とは言っても、結局それって何を書くの?どのファイルにどのようなメソッドを書けばいいのか?と疑問に思いましたので、深掘りも兼ねてこの度初めて技術記事にさせていただきました。

::: note warn
? 誤った知識を記載してしまう場合がございます。
至らぬ点等何かございましたら、お手数ですがご教示いただけますと幸いです。
:::

# concerns

元記事を表示

railsのテーブル結合メソッドの使い分け

# はじめに
テーブルを結合するための複数あるメソッドの使い分けがあやふやなのでここで調べたことなどをまとめます。

得られる結果が同じだからと言って意識しないでいると思わぬところで足を掬われそう。

# joins
**結合先のテーブルの情報を使わない時に使う。→メモリ削減**
内部結合`INNER JOIN`を行う。

– 結合先のテーブルで絞り込むことが可能
– 結合先のテーブルの情報を取得できない

“`joins.rb
User.joins(:user_profiles)
# 発行されるSQL
SELECT “users”.* FROM “users” INNER JOIN “user_profiles” ON “user_profiles”.”user_id” = “users”.”id”
“`

# preload
**結合をしたくない時に使用する→テーブルの規模が大きく、動作が極めて重くなる場合(has_many関係)や、LEFT JOIN時のnullを発生させたくない場合など**
SQLを二回発行し、擬似的にJOINしてデータを取得する。

– 結合先のテーブルで

元記事を表示

【Rails】ransackを使用した検索機能の作成

Railsにてransackというgemを使用して投稿一覧にて検索機能を作成。備忘録として記述。

検索機能を使わない場合は公開中の全投稿を表示、検索機能を使用した場合は検索結果を表示していきます。
フォロー機能も実装しているので、今回は、「都道府県」「ジャンル」「フォローしている人かどうか」で検索できるようにしていきます。

※新規投稿する際に都道府県、ジャンル、投稿の公開・非公開を選択して投稿する仕様にしています。(都道府県、ジャンル、投稿の公開・非公開はenumにて管理)

・都道府県
“`
enum prefecture: {
hokkaido: 0,
aomori: 1,
~~~~~~~~~~~~ 省略 ~~~~~~~~~
kagoshima: 45,
okinawa: 46,
}
“`

・ジャンル
“`
enum location_genre: { food: 0, loc

元記事を表示

【Rails】PDFを登録できるようにする

# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。
※@tohonozo(とほ のぞ)さんの記事を参考に作成しました。
 とても分かりやすく参考になりました。
 ありがとうございます。

# PDFを保存したい
今回、私が作成しているアプリケーションでPDFを保存できるようにしたかったのでやってみました。
Active Sorageなどで画像の保存はやったことはありましたが、PDF保存は初めてでした。
いろんなところで躓いたので、この記事にまとめておこうと思います。

# Let’s start!!!
## 最初にCloudinaryに登録
このリンクから登録をはじめましょう。

https://cloudinary.com/

右上のsign up for freeを押すと、登録画面に飛びます。

## PDFファイルを投稿するために簡単なアプリを作成
今回はItemモデルを使用します。

### モデルとコントローラーを作成
`$ rails g model item`
`$ rails g controll

元記事を表示

Vtuberの歌枠データベースを作ってみた話

## 目次
[1. はじめに](#1-はじめに)
[2. 作ったアプリについて](#2-作ったアプリについて)
[3. 開発の流れ](#3-開発の流れ)
[4. プロジェクトを通して学んだこと](#4-プロジェクトを通して学んだこと)

## 1. はじめに
Vtuberが歌枠で歌った曲を検索できる歌枠データベースを制作したのでその記録を記します。

作成したアプリはこちらのリンクから見ることができます。

https://song-list.piny940.com

## 2. 作ったアプリについて
[2-1 アプリの概要](#2-1-アプリの概要)
[2-2 アプリの3つの特徴](#2-2-アプリの3つの特徴)
[2-3 アプリの画面](#2-3-アプリの画面)

### 2-1 アプリの概要
各チャンネルごとに、今までに歌った曲の一覧を見ることができるようになっています。
曲名と歌手名で検索をする他、詳細検索からは配信日や配信のタイトル名で絞り込むことができるようになっています。

![アプリ画面](https://i.gyazo.com/793f

元記事を表示

Deviseの認証をCognitoに委譲し、カスタムログイン画面でログイン機能を実装する

## はじめに
今回はdeviseの認証をcognitoに委譲し、アプリケーション側で独自のログイン画面を作成して、ユーザーがログインできるように実装していきたいと思います。
## 対象読者
– deviseを使用したことがある人
– deviseの認証をcognitoに委譲したい人
– deviseの認証をcognitoに委譲したが、cognitoの[ホストされたUI](https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-pools-hosted-ui-user-experience.html)では物足りない人
## 動作環境
今回はdeviseログイン画面ありのアプリケーションのひな形を作ってくれている方がいたので、そちらのプロジェクトを使用したいと思います。

https://github.com/timothyjamesmarias/rails_7_devise_example

## 実践
流れとしては下記に沿って進めていきます。
Cognitoを既に構築されている方は、

元記事を表示

GooglePlacesAPIで取得したデータをデータベースへ保存する

# 初めに
初めまして。チータ(@cheetag_02)と申します。
個人開発をするにあたって、GooglePlacesAPIから取得したデータをデータベースに保存することがあったので、同じような状況の方のために、記録として残します。

# テーブルの作成
まず、取得したデータを保存するテーブルを作成します。
GooglePlacesAPIから取得できるデータは、一部ですが記事にまとめたのでこちらをご覧ください。
[Google Places APIを使用して情報を取得(Rails)](https://qiita.com/cheetah_02/items/d7c62be909ac4edca5d2)

テーブルの作成(マイグレーションファイル)
“` ruby:2023083120000_create_shops.rb
class CreateShops < ActiveRecord::Migration[7.0] def change create_table :shops do |t| t.string :name, null: false #店名

元記事を表示

Rails – Rspec で paralells spec を利用して並列処理する ( create / migrate / prepare / setup / drop の違い )

# 公式

https://github.com/grosser/parallel_tests

# Gemfile

gem を追加して bundle install する

“`
gem ‘parallel_tests’
“`

# database.yml

公式READMEの通り DB設定で環境変数を利用するようにする
この環境変数はテスト実行時などに自動的に paralells spec が付与してくれる

“`yml
test:
database: yourproject_test<%= ENV['TEST_ENV_NUMBER'] %>
“`

# テスト実行

“`
rails parallel:setup
rails parallel:spec
“`

うまく行かない場合は以下でも良いかもしれない
`parallel:setup` / `parallel:prepare` コマンドは使わなくてもテスト実行できる

“`
rails parallel:create
rails parallel:migrate
rails parallel:spec
`

元記事を表示

「ChatGPT(有料) vs Bing Chat(無料)」今話題のAIの性能を検証してみた!

# 概要
皆さんは“ChatGPT“についてはご存知だと思いますが、最近話題のAIベースの検索エンジン“「Bing Chat」“についてご存知でしょうか??
どちらもすごく高性能なAIで、“ChatGPT“は“チャット bot“、“Bing Chat“は“検索エンジン“と名称や性能が若干違います。
今回は“ChatGPT“と“Bing Chat“のメリット、デメリット、得意、不得意を検証してみました!

:::note warn
私は初学者のため、間違った情報があればコメントなどで教えていただけると幸いです。
GPT-3.5に関しては~~個人的に嫌い~~なので検証しません。
:::

## Bing Chatとは?
BingはMicrosoftが作った検索エンジンです。
BingAIはChatGPT同様、対話型AIとして、雑談や質問に答えたり、創作物の執筆やプログラミングを手伝ったりなどができます。

また、画像生成AIとして、ユーザーのリクエストに応じて画像を作成したり、既存の画像を加工したりなども可能です。

## 検証1
どちらも画像を送る機能が

元記事を表示

[Rails]あなたのコードを半分にできるかもしれない?? 知って得するnil制御 ~presence編~

## 伝えたいこと
:::note info
ボッチ演算子はすごい
presenceはすごい
:::

## ~第1章~ はじまりのコード

**子供** 「ねぇねぇ父ちゃん!僕の書いたコードを見てよ!」
**父親** 「おぉ、どれどれ。見せてみろ。」

“`rb
name = nil
if @account.present? && @account.name.present?
name = @account.name
else
name = ‘未設定’
end
“`

**父親** 「アカウントがあったら名前を取得し、名前がなかったら[未設定]の文字を取得したいんやな」
**子供** 「さすが父ちゃん!見ただけで一瞬でわかっちゃうだ!」
**父親** 「まぁな。`present?`を活用しているのはグッドだ?nilや空文字など柔軟に判定してくれるからな」
**子供** 「でしょ!(実はネットに載ってたのコピペしただけだけど…)」
**父親** 「ただ、もう少し簡単にかけるな。**ぼっち演算子**って知ってるか?」
**子供** 「ぼっち演算子..?」
**父親** 「

元記事を表示

Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)):の解消方法

docker環境において、`localhost:xxxx/sidekiq`へアクセス出来なかった時の対処法

“`zsh:error
Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)):
“`

## docker-compose.ymlへ追記
envを追記

“`ruby:docker-compose.yml
sidekiq:
build: .
environment: # ここから下
RAILS_ENV: development
REDIS_URL: redis://redis:6379
“`

## 起動時の設定を追加する
以下を作成

“`ruby:config/initializers/sidekiq.rb
redis_config = { url: ‘redis://redis:6379/0’ }

Sidekiq.configure_server do |config|
confi

元記事を表示

OTHERカテゴリの最新記事