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

Ruby関連のことを調べてみた2023年09月15日
目次

Railsのdelayed_jobがわけわかめなのでメモメモ

どうもこんにちは。

今回はRailsアプリケーションで使用しているdelayed_jobについてメモしていきます。

# delayed_jobってなに?

delayed_jobとは、「バックグラウンドで非同期処理をしてくれるrailsのライブラリ」です。

何に使えるかっていうと、「大量のジョブを処理する時」に使えます!

一番わかりやすい例だと、**大量のメール送信を一度に行うとかなり時間がかかってしまうため、小分けにして送信していく**という手法をとるために最適です。

# 導入方法

導入はGemを使用して行います。

## 1. Gemの追加

Gemfileに以下のコードを記述します。

“`gemfile
gem ‘delayed_job_active_record’
“`

## 2. bundle installの実行

ターミナルで`bundle install`を実行します。

## 3. マイグレーションファイルの作成

ターミナルで`rails generate delayed_job:active_record`を実行します。

Delayed_jo

元記事を表示

【Rails】【Ruby】ENV[]とENV.fetch() {}の違い

## `ENV[]`と`ENV.fetch() {}`の違い
`ENV[]`と`ENV.fetch() {}`の違いは指定した環境変数が存在しない場合に`nil`を返すかデフォルト値を返すかの違いです。

例えば、以下の場合には、`RAILS_MAX_THREADS`、`DB_USER_NAME`、`DB_USER_PASSWORD`が存在しない場合にはnilとなります。
“`detabase.yml

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV["RAILS_MAX_THREADS"] %>
username: <%= ENV["DB_USER_NAME"] %>
password: <%= ENV["DB_USER_PASSWORD"] %>
host: db

“`

以下のように記述すると`RAILS_MAX_THREADS`、`DB_USER_NAME`、`DB_USER_PASSWORD`が存在しない場合には{}内に記述したデフォルト値となります。

“`d

元記事を表示

【今更ながらChatGPT①】ラフなやり取りだけで元金均等返済を算出する簡易的なRubyプログラムが出来た

– 初めてChatGPTでプログラム作成してみた。
– ラフなやり取りだけで1行も自分でプログラムを書かずにかなりの速さでプログラムを完成するとは、今更ながらChatGPT凄いな。。

* * *

### 依頼

?rubyで元金均等返済を算出するプログラムを書いて。

* * *

?Rubyを使用して元金均等返済を計算するプログラムを作成することができます。元金均等返済は、ローンの元金部分が毎月均等に減少し、利息が残りの元金に対して計算される方法です。以下は、元金均等返済を計算する簡単なRubyプログラムの例です。

“`ruby
def equal_principal_amortization(principal, annual_interest_rate, num_months)
monthly_interest_rate = annual_interest_rate / 12 / 100
monthly_payment = principal * monthly_interest_rate / (1 – (1 + monthly_interest_rate)**(

元記事を表示

Ruby on Railsのデバック(raise 〇〇.inspect)の方法について

# デバックとは
プログラムを書いて開発する時などに、エラーは必ず出てきます。
その際人間の目で見ることは限界があるので、デバックのツールや手法を使って、
開発者はコードの手直しをしていきます。

# この記事の背景
Railsで開発をしている時に今までは“`binding.pry“`というデバックの手法しか知りませんでした。

https://qiita.com/Hashimoto-Noriaki/items/d4ec952005465e39f618

***今、入っているプロジェクトがbinding.pryを使わない案件でした***。
そこで教わったのが“`raise 〇〇.inspect“`を使った手法でした。

# 使い方
かなり省いていますが、以下がテストコードです。このコードを軸にデバックを説明していきます。
“`spec.rb
describe ‘logテスト’ do
subject { described_class.new.log(order) }
let(:order) do
{
:order_

元記事を表示

Ruby 3.0.1 -> 3.2.2、Rails 6.1.7 -> 7.0.8 へのアップデート時のエラーと対応

## はじめに
タイトルの通り今回 Ruby 3.0.1 -> 3.2.2、Rails 6.1.7 -> Rails 7.0.8 へのアップデートを行った中で出たエラーに対応した内容を記した記事になります。
ruby や rails の新機能や設定等は触れず、単にそのまま `bundle update` した時に出るエラーの解消を目的としています。
すでに様々な記事で似たような対応されているところがあると思いますが、何かのお役に立てば幸いです。

## `uninitialized class variable @@schemes in URI (NameError) Did you mean? scheme_list`

“`
/vendor/bundle/ruby/3.2.0/gems/data_uri-0.1.0/lib/data_uri/uri.rb:64:in `‘: uninitialized class variable @@schemes in URI (NameError)
Did you mean? scheme_list
“`

`

元記事を表示

【Ruby】GemをGitHub Packagesに公開する方法

## パーソナルアクセストークンの設定
GitHub Packagesに公開などをするには認証が必要です。
以下の手順でパーソナルアクセストークンの設定をします。

GitHubのSettingsページを開きます。
![image220730_080233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/14c246e6-70d9-7fd7-3d05-0155e24eeb20.png)

左サイドバー一番下の「Developer settings」を選択します。
![image220730_080909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/4e5c8cff-a85e-98b6-c83b-d5e379ba535f.png)

左サイドバーの「Personal access tokens」を選択します。
![image220730_081141.png](https://qii

元記事を表示

Dockerを利用したRuby/Railsの開発環境の作り方

もちろん、以下にMarkdown形式で記事を出力いたします。

# Dockerを利用したRuby/Railsの開発環境の作り方

## 目次

1. [はじめに](#はじめに)
2. [Dockerの基本](#dockerの基本)
3. [Dockerfileの基礎](#dockerfileの基礎)
4. [Dockerfileの作成フロー](#dockerfileの作成フロー)
5. [Ruby/Railsの開発環境の構築](#rubyrailsの開発環境の構築)
6. [付録: 完成したDockerfile](#付録-完成したdockerfile)

# Dockerを利用したRuby/Railsの開発環境の作り方

## はじめに

### Dockerのメリット

Dockerを使用する最大のメリットは、環境の再現性です。Dockerを使用することで、開発環境を短時間で構築でき、その環境を他のメンバーや環境で簡単に再現することが可能です。これにより、「私のマシンでは動くけど…」という問題が大幅に減少します。

### この記事の対象読者

この記事は、Ru

元記事を表示

JSでブラウザの戻るボタンを止める方法。

ウェブ開発の世界では、JavaScriptは開発者がインタラクティブでダイナミックなウェブアプリケーションを作成できる強力なツールです。ウェブ開発における一般的な要件の1つに、ブラウザの戻るボタンの動作を制御することがあります。

このブログ記事では、ブラウザの戻るボタンを無効にするJavaScriptのコード・スニペットを深く掘り下げ、それがどのように機能するのかを順を追って説明します。

“`ruby:app/javascripts/packs/application.js

function DisableBackButton(){
window.history.forward()
}
DisableBackButton();
window.onload = DisableBackButton;
window.onpageshow = function(evt) { if (evt.persisted) DisableBackButton() }
window.onload = function() {void(0)}
“`
要約すると、このJavaScriptコードスニペ

元記事を表示

悩みを解決するアプリ”MeyasuBako”(目安箱)

本記事について

スクールの卒業課題で作成しましたオリジナルアプリ、”MeyasuBako”についてご紹介します。

http://meyasubako-app.com/

https://github.com/oguyu2021/organized_brain

![スクリーンショット 2023-09-13 11.55.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468229/47bace57-6030-e447-535d-7dcf10c4d41e.png)

概要・制作背景

このアプリは一言で言うと、
日頃の悩みを整理し、相談して解決するアプリです。
まず作成に至った経緯ですが、「悩みを解決する際、同じ悩みを経験した人なら共感してもらえるし、解決する可能性は上がるのでは」と考えたからです。

拘った点としましては、誰でも簡単に使えるシンプルな機能となっています。

使用方法

まずはトップページからログインします。
※まだアカウント

元記事を表示

souceryを使った新規登録ができない

今回の記事はあまり役立つものではないが一応記録として残しておく
新規登録をする際にこのエラー文が出ていた
“`
NoMethodError in UsersController#create
undefined method `crypted_password=’ for #
Did you mean?
encrypt_password
Extracted source (around line #9):
“`
これに苦しんでいたわけだが有料chatGPTに登録して使ってみるとものの30分で解決してしまった

直した点は
・usersコントローラーの
“`
def user_params
params.require(:user).permit(:email, :password, :password_confirmation,:last_n

元記事を表示

Rails: send_file後にファイルを削除したい

# 背景
– 大きめのサイズのファイルをクライアント側にダウンロードさせたい
– `send_data`を使ってしまうと一度に全てをメモリに読み込んでしまうので、`send_file`の方を使いたい
– `send_file`を使用すると、後続処理で`file.unlink`とかするとダウンロード完了前にファイルが削除されてしまう
– Tempfileで作ればいつかGCで消してくれるけど、できればその場で消したい

# バージョン
“`
rails 6.1.5
ruby 2.7.5
“`

# 解決法
解決法1. `Rack::BodyProxy`を使用する
なんやねんそれ:https://www.rubydoc.info/gems/rack/Rack/BodyProxy
“`rb
def export
CsvModule::CustomModule.new().execute do |file|
response = send_file file.path, type: Mime[:csv]
wrapped_response = Rack::B

元記事を表示

RailsのTurbo Framesを利用してシンプルな遅延読み込みを実現

# はじめに

## 開発しているWebサイト:Incfeed

最近、[Incfeed](https://incfeed.defrag.works/)というWebサイトを個人的に開発しています。ビジネスをしていて実体のよくわからない法人に遭遇すると、その法人のことを調べることはあると思います。法人のWebサイトから得られる情報は客観的ではない場合も多いため、その法人の実体を知る情報としては十分ではないと考えられます。法人の活動情報の一部は政府関係のWebサイトでも公表していて、そういった公的な情報資源への参照を促すことが[Incfeed](https://incfeed.defrag.works/)の目的です。

https://incfeed.defrag.works/

## リスト表示の挙動

[Incfeed](https://incfeed.defrag.works/)のトップページでは法人のリストが表示されていて、これはページを読み込むたびにランダムにリストが更新されます。Webブラウザでページをリロードするような場合はよいのですが、ページ内のリンクでリストを更新した場

元記事を表示

カップラーメンを待つ間に作るRails × Docker × PostgreSQL環境構築テンプレート

## カップラーメン作ってる間にコマンドを一つだけ実行します ?

https://github.com/k-suke39/docker_rails_postgresql

“`ruby
git clone git@github.com:k-suke39/docker_rails_postgresql.git && cd docker_rails_postgresql && docker-compose build && docker-compose run web rails db:create && docker-compose up –build
“`
“`ruby
# http://localhost:8000/ でログイン
“`

# 終わり!?

元記事を表示

CircleCiの処理を追う

# CircleCiの処理を追う

## 目次

– [1. はじめに](#1-はじめに)
– [2. CircleCIの基本概念](#2-circleciの基本概念)
– [ワークフロー、ジョブ、ステップの定義](#ワークフロージョブステップの定義)
– [`config.yml` の役割とサンプル](#configyml-の役割とサンプル)
– [3. 環境のセットアップ:Spin up environment](#3-環境のセットアップspin-up-environment)
– [スピンアップとは?](#スピンアップとは)
– [DockerとCircleCIの関係](#dockerとcircleciの関係)
– [イメージの選択とカスタマイズ](#イメージの選択とカスタマイズ)
– [4. 環境変数の設定:Build Environment Variables](#4-環境変数の設定build-environment-variables)
– [環境変数のソースとその優先度](#環境変数のソースとその優先度)
– [CircleCIのUIでの設定]

元記事を表示

CapistranoとCircleCIを使用した自動デプロイの構築

# CapistranoとCircleCIを使用した自動デプロイの構築

### 目次

– [**はじめに**](#はじめに)
– [自動デプロイの重要性](#自動デプロイの重要性)
– [CapistranoとCircleCIの概要](#capistranoとcircleciの概要)
– [**Capistranoの基本**](#capistranoの基本)
– [Capistranoとは?](#capistranoとは)
– [Capistranoのインストールと初期設定](#capistranoのインストールと初期設定)
– [デプロイのフローとタスクの概要](#デプロイのフローとタスクの概要)
– [**Capistranoでのデプロイ設定**](#capistranoでのデプロイ設定)
– [`deploy.rb`の基本設定](#deployrbの基本設定)
– [環境固有の設定(例:`deploy/production.rb`)](#環境固有の設定例deployproductionrb)
– [Passengerの再起動タスクの設定](#p

元記事を表示

【Rails】Google Cloud Vision APIで不適切な画像をバリデーションしてみた

# はじめに
おつかれさまです。
おおくまです。

今回はRailsで実装した個人開発のアプリにGoogle Cloud Vision APIを導入し、不適切な画像をバリデーションしてみました。
というのも、先日、そういったことが起こったので、対策として実装してみました。笑

# 注意
私は今年の4月からプログラミング学習を始めました。
内容に誤りがある場合がございます。
あらかじめご了承ください。
また、コメント等で教えていただけると幸甚です?

# Cloud Vision APIとは
Cloud Vision APIとは、Google Cloud Platformで提供されている画像処理サービスです。
このAPIを利用することで、画像を分析し、テキスト検出、物体検出、顔認識、ラベル付けなどのさまざまなことができます。
[こちらのリンク](https://cloud.google.com/vision?hl=ja)から試すことができます。

# Google APIキーの取得
まずは[API ライブラリ – API とサービス](https://console.cloud.goog

元記事を表示

【Next.js × Rails7】NextAuthでのアカウント情報をDBに保存したい

## 概要
おつかれさまです!
前回はNextAuth.jsでログイン機能を実装しました。
今回はRailsのAPIと連携し、アカウント情報をDBに保存するような実装をまとめていきます!

https://qiita.com/keisuke_sakuma/items/4b56b9e81c1788d38440

## 実装方針
1. Rails側にUserモデルを作成
1. ルーティングの設定
1. コントローラとリクエスト時の処理を実装
1. CORSの設定
1. Next側でログイン後にリクエストを送るように実装
1. Rails側でデータの確認

## Rails側にUserモデルを作成
まずNext側でどのようにアカウント情報を保持しているかというと、下記の`callbacks`のバリューである`signIn()`フックを実行したときにコールバックで変数を保持できるようにできます。
今回は`provider`、`uid`、`name`、`email`をDB側に登録できるように設定していきます。

“`javascript:src/app/api/auth/[…nextau

元記事を表示

Ruby lengthについて

# はじめに

#### ※以下の内容には誤りが含まれる可能性があります

## lengthとは何か

Rubyで文字列の長さ(文字数)・配列の要素数を調べるために使うメソッドです。

## lengthメソッドの使い方

### 文字列の長さを調べる場合

“`
str = ‘123456789’
str.length
#=> 9
“`

### 配列の長さを調べる場合

“`
data = [1,2,3,4,5,6,7,8,9]
data.length
#=> 9
“`

# まとめ

lengthとは長さのことです。Rubyでlengthは文字列の長さ、配列の長さを調べるためのメソッドです。

元記事を表示

Rails7下でのnew画面→confirm画面(post)に画面遷移について

# 今回起きた事
自主制作の中でどうしても新規投稿画面→入力画面確認画面としたいですよね!
ですがRails7系になると思わぬ落とし穴がありました・・・

new.html.erbから以下コードでフォームを展開してtext_fieldを記述をしました。

“`ruby new.html.erb
<%= form_for @app, url: confirm_app_path do |f| %>
“`

ローカル環境下でnewページからテキストフィールドに任意のテキスト入力をして
ボタン押下してconfirmページへ遷移!のはずが、、、newページのまま。。。

# 確認した事
DockerのLog確認するとdatabaseには上手く登録はされているし、
confirmページには遷移成功していた。
MySQL確認しても入力データも確かにある事が確認できた

同じ事例がないか調べたら何件か同じ事例を見つけることができた
Rails7系ではTurboフレームワークがデフォルトで有効になっていることが
原因でした。

# Turboとは
Turbo Driveは、通常のリンクやフォーム

元記事を表示

【Ruby】%記法について

## 文字列

### `%`, `%Q`

`%`および`%Q`は式展開できる文字列を表現します。
ダブルクォーテーションで文字列を囲んだ`”文字列”`と同等になります。

“`ruby
%(a b c)
# => “a b c”

a, b, c = 1, 2, 3
%(#{a} #{b} #{c})
# => “1 2 3”
%Q(#{a} #{b} #{c})
# => “1 2 3”
“`

### `%q`

`%q`は`%`や`%Q`と同様に文字列を表現しますが、式展開ができない点で異なります。
シンブルクォーテーションで文字列を囲んだ`’文字列’`と同等になります。

“`ruby
%q(a b c)
# => ‘a b c’

a, b, c = 1, 2, 3
%q(#{a} #{b} #{c})
# => “\#{a} \#{b} \#{c}”
“`

## 配列

### `%W`

`%W`はスペースで区切った文字列を含む配列を表します。

“`ruby
a, b, c = 1, 2, 3
%W(#{a} #{b} #{c})

元記事を表示

OTHERカテゴリの最新記事