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

Rails関連のことを調べてみた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

元記事を表示

[Hotwire] 電話番号を自動フォーマット

# はじめに

電話番号のように文字数が多いものがあっているかは確認しにくいです。なので、3桁、4桁区切りでハイフン(-)を入れます。自らハイフンを入れてもいいですが、自動でハイフンが入る方がいいです。電話番号があっているかだけに注意を向けられるからです。

そこで、HotwireのStimulusを使って、電話番号が自動フォーマットされるようにしました。

![Sep-14-2023 08-12-01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472392/3e673ec1-d2a4-87b2-28c6-e1d44ada1c44.gif)

## 環境

– Rails 7.0.7
– Ruby 3.2.2

# 実装

電話番号を入力する``要素に入力があるたびに、フォーマットが自動で実行されるようにします。

自動フォーマットのためのstimulus controllerを作成します。
“`js:app/javascript/controllers/phone_numbe

元記事を表示

【個人開発】名鉄名古屋駅の乗車位置が検索できるwebアプリケーションを開発した話

# 1.アプリケーションの概要
本アプリケーションは名鉄名古屋駅(名古屋鉄道)の乗車位置表示をユーザーが入力した駅名に応じて表示し、適切な乗車位置表示を案内するものです。

[乗車位置チェッカーof名鉄名古屋駅](https://sta.orion-raptured.com)

名鉄名古屋駅を初めて利用するまたはそれに相当する方を対象ユーザーとしています。
![IMG_7008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726580/c7214a56-fd8f-32ad-5d99-c198f748e8b4.jpeg)

# 2.開発した背景
名鉄名古屋駅は上下線合わせて2本の線路から多数の方面へ走る列車が発着します。そのため行き先に応じて乗車位置表示が色分けされています。
適切な乗車位置で列車の到着を待てば予定の列車に乗車することができますが、探す方法は駅の電光掲示板を確認するか駅員に問い合わせる方法に限られていました。
そこでスマートフォンからスムーズに乗車位置表示情報をユーザ

元記事を表示

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
“`

`

元記事を表示

【Rspec】SystemSpecにてwithin〜do~end テスト対象の範囲を絞る

## 目的

システムスペックテストコードで
it ~ do ~以降のテストコード内にある「within ~ do ~ end」 の部分について入口だけでも理解したい。

## テストコード確認

以下のシステムスペックのテストコードについて調べる。
これはタグのページでパンくず?を設定したので、それに関するテストの一部。

“`spec/system/tags_spec.rb
require ‘rails_helper’

RSpec.describe ‘Tags’, type: :system do
let(:user) { create :user }
before do
login(user)
end
describe ‘記事に紐付くタグの一覧画面’ do
it ‘Home > 「記事」というパンくずが表示されていること’ do
visit tags_path
within(‘.breadcrumb’) do
expect(page).to have_content(‘Home’), ‘「Home」とい

元記事を表示

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

元記事を表示

heroku導入+デプロイ

# はじめに
個人開発のアプリ制作を始めました。
調べながらの実装になるので、メモとして記載しています。

※注意※
プログラミング学習中の初心者です。
記述に間違いがあれば、ご指摘いただけますと幸いです。

# 環境
Mac M1
rails 7.0.7.2
ruby 3.2.0
Node.js 20.2.0
Yarn 1.22.19

# やったこと
今回は下記ページを元に進めていきました。

https://tech-blog.rakus.co.jp/entry/20200813/heroku

## ①Herokuアカウント登録
参考HPページを元に、Herokuのアカウント登録から始めました。
記事では2段階認証については記載がありませんでしたが、
下記のアプリをスマホにインストールする必要がありました。

https://play.google.com/store/apps/details?id=com.salesforce.authenticator

## ②Heroku CLIをインストールする
Herokuをコマンドライン上から操作するためのツールをインストールしま

元記事を表示

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 – APIモードでRailsAdminを利用する

# gem のインストール

Gemfileに以下を追加して `bundle install`

“`
gem ‘rails_admin’, ‘~> 3.1.2’
gem ‘rails_admin-i18n’
“`

# rails admin のインストール

`rails g rails_admin:install`

rails admin 3.1.2 では Gemfile に `sassc-rails` が追加されるのでもう一度 `bundle install`

# configを追加する

`api/config/application.rb`

“`rb
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Flash
config.middleware.use Rack::MethodOverride
config.middleware.use ActionDispatch::Session::CookieStore, {:key=>”_backe

元記事を表示

【Rails】pluralizeとsingularize

今回の記事ではpluralizeとsingularizeの2つのメソッドについて紹介したいと思います。
railsでの開発中に単数形や複数形に変換できたら便利なのに…と思ったことはありませんか?そんなときに役立つのがpluralizeとsingularizeです。
# pluralize
`pluralize`メソッドは、指定した文字列を複数形に変換します。
### 使い方
例えば以下のように使うことができます。
“`ruby
pluralized_word = “book”.pluralize
# 出力: “books”

# カウントに基づく複数形の変換
count = 3
pluralized_word = “book”.pluralize(count)
# 出力: “books”
“`
### 定義
定義は以下のリンクから確認することができます。

https://github.com/rails/rails/blob/7-0-stable/activesupport/lib/active_support/core_ext/string/inflections.rb

#

元記事を表示

カップラーメンを待つ間に作る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/ でログイン
“`

# 終わり!?

元記事を表示

SQL文について勉強になったことをメモメモ(インサート→バルクインサート)

どうもこんにちは。

今回はProduction環境で動いているRailsアプリケーションのDBに祝日データを投入する際に勉強になったことをメモします。

# 祝日データとは?

[内閣府](https://www8.cao.go.jp)が毎年発表している来年の祝日の日付データです。(データといっても日付と祝日の名前しか記載されていないですが。)

以下のサイトで祝日データを閲覧、ダウンロードすることができます。

https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html

# やったこと

今回私は、データベースでSQLを実行して祝日データを投入する作業を行いました。

holiday_settingsテーブルのnameカラム、dateカラムにデータを投入するという作業です。

私は以下のSQLを作成しました。

“`SQL
insert into holiday_settings(country_code,name,date,created_at,updated_at) values (‘JPN’,’元日’,’2024-01-01′

元記事を表示

RailsAdminで特定のカラムを非表示にする (除外する) (一覧・詳細・エクスポート)

# 設定例

exclude_fields を使えば良いようだ
一覧・詳細・エクスポート全てで出てこないようにするにはそれぞれ設定する必要がありそうなので注意

“`rb
RailsAdmin.config do |config|
config.model ‘League’ do
list do
exclude_fields :id, :name
end

show do
exclude_fields :id, :name
end

export do
exclude_fields :id, :name
end
end
end
“`

https://github.com/railsadminteam/rails_admin/wiki/Fields

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Tw

元記事を表示

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での設定]

元記事を表示

OTHERカテゴリの最新記事