Rails関連のことを調べてみた

Rails関連のことを調べてみた

開発環境のpumaでhttps接続をを有効にする

## はじめに
開発環境のpumaを自己署名証明書でhttps対応させます。任意のFQDNでアクセスし、証明書はブラウザ側で例外指定する想定です。

## 環境
* AlmaLinux 9.3
* Ruby 2.7.8
* Rails 6.1.4.7
* puma 5.5.2

## 自己署名証明書の作成
“`
$ cd /path/to/app
$ mkdir -p config/ssl && pushd $_
$ openssl req -x509 \
-newkey rsa:4096 \
-keyout server.key \
-out server.crt \
-days 3650 \
-noenc \
-subj ‘/CN=dev.example.com’ \
-extensions san \
-config <( \

元記事を表示

There is 1 other session using the database. の修正方法

# 概要
テストを行う為、`rspec`コマンドを入力した際、下記のエラーが表示されました。今回は、このエラーの修正方法について説明します。

# エラーの内容
エラーの内容に、`データベースを使用している他のセッションが1つあります`と記載されています
“`sh
# 入力コマンド
rspec

# エラーの出力内容
rails aborted!
ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database “***************” is being accessed by other users (ActiveRecord::StatementInvalid)
DETAIL: There is 1 other session using the database.

Caused by:
PG::ObjectInUse: ERROR: database “***************” is being accessed by other users (PG::ObjectInUse)
DETA

元記事を表示

【rails】rspecでENVをスタブ化した際に詰まった話

# はじめに
あるシステムの自動テストをrspecで作成していた際に、`Please stub a default value first if message might be received with other args as well.`というエラーが表示され詰まった時のお話です。

# 問題
下記を含んだテストコード実行した際にエラーが表示されました。
~~~
allow(ENV).to receive(:[]).with(‘HOGE’).and_return(‘111’)
~~~
エラーについて、chatgptに聞いてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3382528/286bed48-1b00-2638-ca3f-8a2bcb2e7409.png)
ENVの[ ]メソッドが`HOGE`以外の引数で呼び出されている箇所が存在することが問題のようです。

# 解決策
chatgptの回答のように、allow(ENV).to receive(:[]).an

元記事を表示

ActionDispatch等をスタンドアローンで動かしてミニマムなRailsのような何かをDIYしたらRailsともっと仲良くなれた話

# 前置き
Webアプリケーションエンジニアとして働き始めて4年といくらか、そこそこの浮気期間は挟みつつも長らく付き合い続けているRuby on Railsだが、たまに必要に迫られてコードを見るくらいでその中身に関しては正直まるで知らない。

Railsのことをもっと知りたい。いったいどうすれば良いだろう…

![o0300022814160302731.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283780/c4e26d6a-6a27-207b-1687-7679b2c6767e.jpeg)

![スクリーンショット 2023-12-17 11.51.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283780/7e4c2f25-909d-5447-8de2-1b79dcf7a457.png)

もちろんRailsになっちまうのはDHHでもなければ無理なので、Railsのコンポーネント、今回の場合は特にA

元記事を表示

【Rails】config/settings.ymlについてまとめてみた

:::note
Ruby on Railsアプリケーションにおいてconfig/settings.ymlは、アプリケーション全体の設定を管理するために使用されるYAML形式のファイルです。このファイルを使用することで、アプリケーションの設定を一箇所に集約し、環境変数やハードコードされた値に依存しないようにすることができます。
:::

## `settings.yml`の主な特徴と利用方法
#### 設定の中央集権化
`settings.yml`はアプリケーションの様々な設定値を一箇所にまとめるために使用されます。これにより、設定値の管理が容易になり、コード内でのハードコードを避けることができます。

#### 環境固有の設定
通常、アプリケーションは開発、テスト、本番など複数の環境で動作します。`settings.yml`を使用すると、これらの異なる環境に対して固有の設定を行うことができます。

#### YAML形式
YAML(Yet Another Markup Language)は、データを階層的かつ読みやすい形式で表現するためのデータシリアライゼーション言語です。`setti

元記事を表示

「rails console」を使ってRedmine上のスケジュールを一括変更する方法

# 「rails console」を使ってRedmine上のスケジュールを一括変更する方法

[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の20日目の記事として作成しました。

* * *
## 背景

プロジェクトは長期の工程を扱ったり、不確実性な要素をたくさん含んでいるため、外部や内部の要因でプロジェクトの途中でスケジュールの変更やリソースの変更、予算の変更などが頻繁に発生します。そのため、プロジェクト管理ツールは、プロジェクトの変更に合わせて、柔軟にシステム上でも情報を変更できる必要があります。しかし、残念ながら、Redmineでスケジュールを一括変更させる方法がありません。

Redmineでスケジュール管理をする一般的な方法を確認します。Redmineでスケジュール管理をするためには、チケットに開始日、期日を登録すると、自動的にガントチャートを作成できるので、スケジュールの管理をガントチャートで確認することができます。

![image.png](https://qiita-image

元記事を表示

【Rails】外部DB上の複合主キーを持つテーブルのデータ取得をしてみた

## はじめに
Rails6.1系を利用しているとある案件開発において、複合主キーを持つ外部DB上の中間テーブルを利用しつつデータ取得をしたいという場面に遭遇しました。

## 問題点
Rails7.1系であれば[複合主キーへの対応が進められている](https://railsguides.jp/active_record_composite_primary_keys.html)ようなのですが、
現在は利用しているのが6.1系という状況でありました。~~そんなぁ~(;´༎ຶД༎ຶ`)~~
[外部DBへの接続](https://qiita.com/TKY_study/items/b13ddd6bf62f8fcf5311)自体は成功しており、同様の設定によってデータ取得自体は出来たのですが、中間テーブルが絡むアクセスパターンにおいて以下のような警告が大量に出て煩わしいといった状況になっていました。

~~~
WARNING: Active Record does not support composite primary key.

USER_ROLE_MAPPER has composi

元記事を表示

プログラミングスクールと実務を経て感じたこと

# はじめに
この記事は[WEMEX株式会社 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/wemex) 20日目の記事です

23卒の新卒エンジニアとして入社した私は、6月から10月にかけて、プログラミングスクールでの研修と実務でのOJT(On-the-Job Training)を並行して経験しました。この記事ではプログラミングスクールでの学びと実務経験を基に、新人エンジニアとして感じたことを共有したいと思います。

なんらかの形でみなさまのお役に立てれば幸いです。

# 筆者の開発歴について
背景として私の入社以前の開発歴について述べたいと思います。

私が学生時代に触れていた言語は主にPythonとC++です。

Pythonでは主に研究用のコードを書いていました。
研究室の専攻が自然言語処理だったので、コードとしても自然言語処理や機械学習等の内容がメインでした。

C++は所属の研究室とは別に行っていた、流体シミュレーションソフトのR&Dや可視化ソフトの開発(デスクトップアプリ)に使用していました。

元記事を表示

Six Best Courses To Learn Ruby On Rails Today

Ruby on Rails, more popularly called RoR, is a foremost web development model and a prevalent option for new beginners of web development because of its simplicity. Through this, individuals can comprehend the language as it is more straightforward than other frameworks. With uncountable online courses on RoR as well as Ruby programming, it might be hard to identify which one will fit best with your requirements.

We have assembled a listing of the topmost RoR courses established on learning ma

元記事を表示

bundle install で grpcが失敗する

grpcのinstallでエラー

“`sh
14 warnings generated.
linking shared-object grpc/grpc_c.bundle
Undefined symbols for architecture arm64:
“_ruby_abi_version”, referenced from:
-exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [grpc_c.bundle] Error 1

make failed, exit code 2

An error occurred while installing grpc (1.48.0), and Bundler cannot continue.

In Gemfile

元記事を表示

条件分岐が可能な診断機能

## はじめに
当記事は、Ruby on Railsにおいて**分岐が発生する診断機能**を実装したい方へ向けたものです。
[この記事](https://qiita.com/nakamura9atsuya20/items/f6a967c2854f769fc6d4)でも診断機能は実装することが可能ですが、どんな選択肢を選んでも同じ質問を回答することで結果が出る仕組みのため、「1問目で選ぶ選択肢によって、2問目の質問を変えたい…」という場合、活用することが難しくなってしまいます。
主に以上の悩みを抱えている人に向けて、役に立てれば幸いです。

## 実装に使う知識、及び筆者が伝えたいこと
**使う知識は「MVCの基本」**。これだけです。新規ページを作り、遷移を活用して作っていくイメージです。きちんとMVCが理解できていれば、不可解な点はなく実装できると思います。
ここで筆者が伝えたいことは、**基礎的な知識でも、使い方によっては大きなインパクトを発揮できることがプログラミングの面白さだ**ということです。
あくまで個人の感想ですが、難しいことを身に着けることに執着してしまう傾向がある

元記事を表示

【Rails】大量にメール送信してしまった話

# はじめに
以前、とあるシステムの開発でメール一括送信機能を開発する機会がありました。開発終了後本番環境でメール一括送信機能を使ってメール送信されたのですが、なぜが同じ人に対して大量にメール送信されたり、ある人に対してはメール送信されていなかったりしました…今後同じような事態が発生しないように、何が問題だったのか、どう解決したのかまとめていこうと思います。

# 問題点
メール一括送信機能はrailsのdelayed_jobを用いて実装していました。具体的には、「メール一括送信job」の中で全ての対象者全員に対してメール送信する処理を実装していました。

メール一括送信機能を実行すると、実装したdelayed_jobが実行され、一人目二人目とユーザに対してメール送信されるのですが、何らかの理由でn人目のユーザに対してメール送信失敗し、再度delayed_jobがリトライし、また一人目二人目からメール送信が始まりn人目でメール送信失敗し、再度delayed_jobがリトライされるの繰返しが発生していました。

dalayed_jobに関して調査してみると、**delayed_job

元記事を表示

【Rails】OpenWeatherMap APIで特定の都市の気象データを取得してみた

## はじめに
**※この記事は、『[RUNTEQ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/runteq)』の20日目に参加しております。**

今回、個人開発のアプリを作成するにあたり、初めてAPIを叩いてみました。

「[OpenWeatherMap API](https://openweathermap.org/)」を使用して、ローカル開発環境にてAPIお試し用のアプリを作成し、情報を取得するまでの一連の流れについてまとめました。

そもそもAPIとは何なのか?という部分も曖昧だったので、こちらの記事にまとめております。

https://qiita.com/rk2530/private/48d6100a36484e3b1ee1

## 今回のゴール
フォームに都市名を入力し、検索ボタンを押すと気象データが表示されるようにする。

## 注意点
::: note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。

元記事を表示

Ruby on Rails ✖️ Docker ✖️ gRPC

# はじめに
メタップスアドベントカレンダー20日目の記事です。

弊社では一部マイクロサービスになっており、その中でRuby on Railsのアプリケーションが動いています。
RailsアプリはクライアントとしてgRPCとProtoBufを使ってgoのサーバーと通信しています。
今回はRails on DockerのサービスにgRPCを導入する大まかな手順と運用をしていく中での知見を2点、紹介します。

#### 注意
– 「gRPCとは何か」や「ProtoBufの書き方」は紹介しません
– RailsアプリがDocker(docker comopse)上で動いているものとします
– コードは全てサンプルなので参考程度にとどめてください

# Rails on Docker へのgRPCの導入
#### protoファイルの作成

“`sample.proto
syntax = “proto3”;
package sample;

service SampleService {
rpc RequestSomething(SampleRequest) returns (Sa

元記事を表示

【Rails】既存の外部DBに接続してデータ取得をしてみた

## はじめに
開発チームのメンバーとともに、Railsを利用して外部DBの絡む案件開発を進めていました

## 問題点
既存の外部DBからActiveRecordを利用してデータ取得を行いたいが、方法が分からないという場面に遭遇しました

## 解決法
### database.ymlへの追記
まず、database.ymlに外部DBについての記述を追加する必要がありました。
今回は「外部DBが、アプリケーションで利用しているDBと同じRDSインスタンス内に存在している」という状況でしたので、以下の記載例のような形で接続情報を共有している状態とします。
また今回はデータ取得のみが目的で、Railsから外部DBを管理したいという意図はなかったため、`database_tasks:false`を設定しました。

“`yml:database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
username: user
password: password
host: host

development:

元記事を表示

趣味の壁を超える挑戦 ~ 「EMBE」一人開発の軌跡

[個人開発のカレンダー|Advent Calendar 2023 – Qiita](https://qiita.com/advent-calendar/2023/personal-developement) に向けた記事です。
今回、初めてアドベントカレンダーに参加します。

https://qiita.com/advent-calendar/2023/personal-developement

12月に個人開発でWebサービスをリリースしたので、どんな事があってどんなことをしたのかをゆるく書いていこうと思います。具体的なプログラミングの話はしません。

## 個人開発の魅力と難しさ

個人開発の魅力の一つに、”気軽さ”があります。開発する人によってそのスタンスは変わると思いますが、開発物の収益性が見込めなかったとしても自身のリソースを使って着手することができます。作りたいものを作る手段が個人開発だと思います。

昨今、ローコード・ノーコードツールの充実やchatgptなどの生成AIの登場により、個人開発のハードルは下がっています。一方で、個人レベルで作る開発物と企業や組織が作る開

元記事を表示

gem ‘debug’ではスコープ内の変数を優先して参照する

最近プロダクトコードの調査をしていたとき、’debug’ gemについて理解していなくて戸惑ったので残しておこうと思います。

### ことの発端
こんな感じのコードを調査中に見かけました。
同名のローカル変数とプライベートメソッドが定義されています。
レコード取得の条件に大きな違いはなさそうで、なぜメソッドのbarを使わないのか意図が分からずにデバッガを挟みました。
“`ruby
class HogesController < ApplicationController def show # debuggerをここに入れた bar = Bar.where(...) end private def bar @bar ||= Bar.where(...) end end ``` 上記の位置で`bar`を実行すると、プライベートメソッドの値が確認できると期待していたのですが、実際に返ってきたのはnilでした。 ```ruby (rdbg) bar nil (rdbg) self.bar [#

元記事を表示

モンキーパッチとは?Rubyモンキーパッチの利点とリスク

## モンキーパッチとは?

モンキーパッチは、プログラミングにおいて既存のコードを変更する技術です。Rubyでは、既存のクラスやモジュールに新しいメソッドを追加したり、既存のメソッドを上書きしたりすることが可能です。これにより、アプリケーションの特定のニーズに合わせてカスタマイズできます。

## モンキーパッチの具体的な利用シナリオ

– 機能の追加: 既存のクラスに足りない機能を追加する。
– バグ修正: ライブラリ内のバグをアプリケーション側で修正する。
– 振る舞いのカスタマイズ: アプリケーション固有の要件に合わせて、既存のメソッドの振る舞いを変更する。

## モンキーパッチの利点

– 柔軟性: 既存のクラスやメソッドをカスタマイズすることで、特定の要件に合わせて振る舞いを調整できます。
– 迅速な開発: 既存のライブラリやフレームワークに手を加えることで、新しい機能を迅速に実装できます。
– 互換性の維持: 古いコードベースを新しいライブラリやフレームワークのバージョンに合わせて修正する際に役立ちます。

## モンキーパッチのリスク

– 保守性の低下: 元のライブ

元記事を表示

RubyのBlock、Proc、Lambdaの違い、分かりやすく解説

Rubyは柔軟性と表現力に富んだプログラミング言語であり、その強力な機能の一つに「クロージャ」があります。クロージャとは、その周囲の環境(スコープ)を「閉じ込める」ことができる関数のことです。Rubyにおけるクロージャには主に3つの形式があります:**Block**、**Proc**、および**Lambda**。これらは似ているようでいて、実は重要な違いがあります。この記事では、これらの違いを明確にし、それぞれの使用例を通じて理解を深めます。

## Blockの基本
BlockはRubyで最もよく使われるクロージャの形式です。Blockは `{}` または `do…end` で定義され、メソッド呼び出しに際して、これを引数として渡すことができます。引数を渡すには、`{}`または`do`の後で引数リストを`|`で囲みます。

**例:**

“`ruby
[1, 2, 3].each { |number| puts number }
“`

この例では、each メソッドにBlockが渡され、配列の各要素が出力されます。

### メソッドにブロックを渡す

ブロックはメソ

元記事を表示

【Rails】マイページのURL末尾を「ユーザー名」にする

Railsを使ったWebアプリの開発中、「マイページのURL末尾を、ユーザーIDじゃなくて"ユーザー名"にできたらかっけぇ…」と思い、実際にその機能をつけました。

マイページ(ユーザー詳細ページ:users/show.html.erb)のURL末尾をユーザーIDから「ユーザー名」に変更することは、とてつもなく重要です。なぜなら、ユーザー情報を共有する/されるときに、ユーザーを一瞬で識別できるようになるからです。実際、X(旧Twitter)やInstagram、そしてQiita、といった超人気WebサービスのマイページURLの末尾は、自身で設定したユーザー名になっています。

しかし、問題点があります。それは「何の追記もないまま(=リソースフルにしたがったまま)usersのshowアクションをルーティングに設定すると、マイページのURL末尾がユーザーIDになってしまう」という問題です。

そこで、「マイページのURL末尾をユーザーIDから"ユーザー名"に変更する」ためのRails実装手順をまとめました。

&em

元記事を表示

OTHERカテゴリの最新記事