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

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

【Rails】migrateでのモデル生成などの手順

# 【1】はじめに

## 記事を作成した経緯
私は4月に進学した大学の課外活動で初めてプログラミング言語について学び始め、 Railsを使ってチーム開発をおこなっている。途中、 migrate をするにあたってステータスを ` down ` から ` up ` にする方法などをまとめて知ることができるページが存在しなかったため、作成を試みた。

## 目的
Railsに関する規則・構文について、自分と同じような悩みを持つ人が読みやすい資料として一括にまとめる。また各章末に、参考にした記事のURLを貼っておくので活用してほしい。

## お願い
本記事内では、私が「詰まった」あるいは「必要」だと感じた内容を記載しており、内容の一部は「項4.参考サイト」にある記事を参考にしている。また、本記事内に記載のない内容についても同じくリンクしてあるので、もし不明なことがあれば参考先を確認することで解決できる場合がある。

# 【2】Railsにおける命名規則
## 命名規則の重要性
Railsの**コントローラ**や**モデル**を ` rails generate ` あるいは ` rails

元記事を表示

Rubyメタプログラミング入門:Railsでの活用例とともに解説

# はじめに
Rubyを使った開発を行っていると、「メタプログラミング」という言葉を耳にすることがあるかもしれません。Rubyのメタプログラミングは、非常に強力で柔軟な機能を提供しますが、最初は理解しづらいこともあります。本記事では、Rubyのメタプログラミングについて、コード例を交えながら解説し、さらにRailsでの具体的な使用例を紹介します。

# メタプログラミングとは?
メタプログラミングとは、プログラムが他のプログラムや自身を動的に変更・生成する技術を指します。Rubyは動的な言語であるため、実行時にメソッドを生成したり、クラスの振る舞いを変更することが可能です。これにより、冗長なコードを削減し、開発をより効率的に行えるようになります。

# 1. 基本的なメタプログラミングの例
### “`define_method“`を使った動的メソッド生成
“`define_method“`を使うと、メソッドを実行時に動的に定義することができます。以下は、複数のメソッドを一度に動的に生成する例です。

“`ruby
class Greeting
[:hello, :goo

元記事を表示

【Rails】非推奨警告(deprecation warning)の扱いを変えたい場合はconfig.active_support.deprecationを変更する

## はじめに

Railsのデフォルト設定では、非推奨機能を使うとログに警告が出力されます。

ただしログを見落としてしまうと、警告を見逃していつまでも非推奨機能を使い続けてしまう恐れがあります。

これを避けるため非推奨機能を使った際にエラーを発生させたいです。

この記事ではこういった、非推奨機能を利用時の挙動を設定変更する方法をまとめます。

## 非推奨(deprecation warning)の扱いを変えたい場合は`config.active_support.deprecation`を変更する

結論として、`config.active_support.deprecation`で非推奨機能を使用時の挙動が指定できます。

各環境の設定ファイルに`config.active_support.deprecation`が記述されているため、要件に合わせて変更すればOKです。

たとえば、開発環境で非推奨機能の使用時に例外を発生させたい場合、次のように修正します。

“`ruby:config/environments/

元記事を表示

【Ruby on Rails】Rspec・rails-controller-testingを用いたテスト実施方法

ここではGemファイルのRspec、rails-controller-testingを用いた
テストの大まかな流れを記載しています。

前提
【開発環境】
・Rails7
・Docker(DockerファイルにてGemのbundle installが行われるように設定済)

目次
・テストで使用するGem(RSpecとrails-controller-testing)をインストール
・コントローラー&モデルのテストで使用するファイルを作成
・テスト用のDB作成(必要な場合)
・テストの実行(モデルの場合)
・テストの実行(コントローラーの場合)

【テストで使用するGem(RSpecとrails-controller-testing)をインストール】

**1 Gemfileを開きdevelopmentのテスト環境のブロックへrspec-railsを追記する。**

rspec-railsのバージョンが古いと、scopeエラーが発生することがあるので、できるだけ最新をとってくるようにする。(これで結構はまっていました…)

“`ruby:Gemfile
group

元記事を表示

mysql2 (0.5.3) がインストールできなかった時の対処法

##### 下記のコマンドで解決しなかった人受けの記事です
“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/zstd
$ bundle install
“`

この方法で解決することも多いですが、私の場合は解決しませんでした。

## 最終的な解決方法

##### 最終的には Ruby の再インストールを行うことで問題が解決しました。

この方法で解決できたので、同じような問題に遭遇した方は試してみてください。

## まとめ

Ruby 2.7.3 で `mysql2` (0.5.3) のインストールに失敗した場合、まずは以下のコマンドを試してみましょう。

“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/

元記事を表示

RSpecでのモックの使い方

# はじめに

こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。

本記事では、RSpecでのモックの使い方についてまとめます。

# 目次
1. [モックとスタブについて](#モックとスタブについて)
1. [モックを使う目的](#モックを使う目的)
1. [スタブを使う目的](#スタブを使う目的)
4. [モックとスタブの書き方](#モックとスタブの書き方)
4. [最後に](#最後に)

# モックとスタブについて
外部に依存する部分をテスト時に仮のオブジェクトで置き換える手法のことです。例えば外部のAPIを使うシステムのテストをするとき、モックやスタブを使わずにテストをすると、APIが正常に動いていない場合、テストが通らなくなってしまいます。つまり APIサービスが落ちていたり、エラーになっている時にはテストを実行しても失敗してしまいます。その他にも、ネットワークの遅延や、レスポンスが変動することで、テストが不安定になります。本来確認したい内容は、APIの状況ではなく、自分が作ったプログラムが正しく動いているかなので、このような状況で、APIを

元記事を表示

[Rails] belongs_toの関連付け

# Rails の belongs_to 関連付け:詳細解説

## はじめに

Ruby on Rails の `belongs_to` 関連付けは、モデル間の関係を定義する上で非常に重要な役割を果たします。この記事では、`belongs_to` 関連付けの詳細について解説していきます。

## belongs_to 関連付けとは?

`belongs_to` 関連付けは、「このモデルは別のモデルに属している」という関係を表します。データベースの観点から見ると、この関連付けは「このモデルのテーブルに、別のテーブルを参照するためのカラムが含まれている」ことを意味します。

### 具体例:

“`ruby
class Book < ApplicationRecord belongs_to :author end class Author < ApplicationRecord has_many :books end ``` この例では、`Book` モデルが `Author` モデルに属しています。つまり、`books` テーブルには `author_id` というカラム

元記事を表示

【Rails】furimaアプリ データベース設計

## 実装概要

1. フリーマーケットサイトを再現するために必要な、データベースの設計を行う。
2. ER図を描画した後、READMEに設計情報を記述する。

以下の機能の実装条件を確認し、データベース設計を行うこと。

– ユーザー管理機能
– 商品出品機能
– 商品購入機能

## 1. フリーマーケットサイトを再現するために必要な、データベース設計を行う。

データベース設計の最初のステップは、アプリに必要な機能に基づいて各テーブルの構造を決めることです。ここでは、ユーザー情報、商品情報、購入履歴、配送先情報を管理する4つのテーブルを作成します。

### Usersテーブル
**目的**: ユーザーの情報を管理します。

**カラム説明**:
– **nickname**: ユーザーのニックネームを保存する(必須)
– **email**: ユーザーのメールアドレス(必須かつ一意制を持つ)
– **encrypted_password**: 暗号化されたパスワード(必須)
– **first_name**, **last_name**: ユーザーの名前を保存(必須)

元記事を表示

[Rails] Active Recordの関連付け

## はじめに

Ruby on Rails における Active Record の関連付けは、データベース内のテーブル間の関係を簡単に表現する方法です。この記事では、Rails の主要な関連付けタイプについて解説します。

## なぜ関連付けを使うのか?

関連付けを使用する主な理由は以下の通りです:

1. コードをシンプルに保つ
2. データベースの操作を簡単にする
3. モデル間のつながりを分かりやすくする
4. 共通の操作を一貫して行える

## Rails の主要な関連付けタイプ

Rails では以下の 6 種類の関連付けがあります。それぞれを日常生活の例を使って説明していきます。

### 1. `belongs_to`(〜に属する)

`belongs_to` は、「このモデルは他のモデルに属している」という関係を表します。

例:生徒は学級に属している

“`ruby
class Student < ApplicationRecord belongs_to :classroom end class Classroom < ApplicationRecord

元記事を表示

rails assets:precompileとは

# rails assets:precompileとは

“`rails assets:precompile“`
上記コマンドの役割は、本番環境向けにアセットをコンパイルし、最適化すること。

1. **アセットのコンパイル**
Rails アプリケーションでは、CSS、JavaScript、画像などのアセットは開発中に編集しやすい形で管理されている。
本番環境ではこれらを効率的に配信するためにコンパイル(結合、圧縮、最適化)する必要があります。
rails assets:precompile コマンドはこれを行い、アセットを単一ファイルに結合したり、余分なスペースやコメントを削除して圧縮したりします。

2. **パフォーマンスの向上**
アセットをプリコンパイルすることで、本番環境でのページ読み込み速度が向上します。これには以下の理由があります。
* アセットが圧縮されてサイズが小さくなるため、サーバーからクライアントに転送されるデータ量が減ります。
* 複数のファイルが1つにまとめられるため、HTTPリクエストの数が減少し、ロードが

元記事を表示

【Ruby】初学者向け-言語基礎①

Stringについて学んだことを整理しました。

Stringに使用するメソッド一覧

**upcase**
…小文字の文字列を大文字にする
<使用例>

test = 'test'
test.upcase
    =>TEST

—————————-
**downcase**
…大文字の文字列を小文字にする
<使用例>

test = 'TEST'
test.downcase
    =>test

—————————-
**slice**
…文字の切り分けを行う
<使用例>

test = 'あいうえお'
 test.slice(1,2)
  => "いう"

—————————-
**size**
…文字の大きさを確認する
<使用例>

test = 'あいうえお'
 test.size
  => "5"

—————————-
**to_i**
…文

元記事を表示

Vimerの開発スピードに勝つ為のVSCode拡張機能開発

結論から言うと勝てはしないと思う。
しかし、私は自作のVSCode拡張機能を開発して実際に今の開発チームに使用してもらって、開発効率をかなり上げた。

今回は開発した拡張機能の紹介と簡単に作り方を紹介します。
見ていただけた方達の開発効率の助けになれば思います。
実務でRailsを使用しているのでRuby寄りの機能もありますが、考え方は他の言語でも同じだと思います。

まずgenerator-codeをグローバルインストールします。これをYoemanで使用するとVS Code拡張のプロジェクトの雛形を生成できます。
“`bash
npm install -g yo generator-code

“`

“`bash
yo code

_—–_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|–(o)–| │ Studio Code Extension │
`———´ │ generator!

元記事を表示

セッションハイジャックとは

# セッションハイジャックとは?
>攻撃者がユーザーの`セッションIDを盗むと、そのユーザーとしてWebアプリケーションを操作可能`になります。

https://railsguides.jp/security.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%8F%E3%82%A4%E3%82%B8%E3%83%A3%E3%83%83%E3%82%AF:~:text=%E6%94%BB%E6%92%83%E8%80%85%E3%81%8C%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3ID%E3%82%92%E7%9B%97%E3%82%80%E3%81%A8%E3%80%81%E3%81%9D%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6Web%E3%82%A2%E3%83%97%E3%83%

元記事を表示

Rails – rails console ( pry )で配列テキストが省略表示されてしまいコピー&ペーストしづらいので、ページングを無効にする

# 問題

rails console ( pry ) で配列の列が長くなると、続きが省略されて、ページングされてしまう。

スクロールしないと続きが見られないし、コピー&ペーストもしづらい。

“`
pry(main)> [*1..10000]
“`

image

# 前提

まずは `Gemfile` で `pry-rails` を入れておく

“`
gem ‘pry-rails’
“`

インストールしておく

“`
$ bundle install
“`

# 解決

pryの設定でページングを無効にする

“`
vi .pryrc
“`

“`
Pry.config.pager = false
“`

結果の例

“`
pry(main)> [*1..10000]
“`

i</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Rails</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/YumaInaura/items/db74ea3ca2f0b2316a4c'>元記事を表示</a></div>
<h3 id=【Rails】エラーを自動でSlackに通知する方法

この記事では、Railsアプリのエラーを自動でSlackに通知する方法について解説します。
今回は、簡単なTODOアプリに通知機能を追加し、実践していきます。

# 目次
[1. Slack側の設定](#1-slack側の設定)
[2. Railsアプリに記述を加えていく](#2-railsアプリに記述を加えていく)
[3. エラーを通知する](#3-エラーを通知する)
[4. 通知フォーマットのカスタマイズ](#4-通知フォーマットのカスタマイズ)
[5. まとめ](#5-まとめ)
[6. 参考資料](#6-参考資料)

# 1. Slack側の設定
まずはSlackチャンネルに通知を送信するためのSlack Appを作成します。

この記事で手順がとても丁寧にまとめられていますので、参考にしながらSlackの通知アプリを作成してください。

https://qiita.com/to3izo/items/c2d16f8b3e52b09e543e

これでslackの通知アプリが作成できます。

最後の動作確認が少し難しいですが、
その場合は下の画像にある `curl -X` か

元記事を表示

アセットパイプラインについて(※超初心者の記事です)

今日も引き続きrailsについて。
タイトルに毎度悩みますが、超初心者の人が書いてるので、
他のすごい人たちが見てがっかりしないようにタイトルに超初心者と入れてみました。

今、練習問題のwebアプリケーションの作成をしています。
webアプリのトップページにいい感じの画像を背景画像として表示させたいと思い、
記述例をもとに入力していました。

そしてCSSファイルに入力しながら思ったこと。
なんで、画像のurlの設定が、画像のファイルの保存先と一致しないのか?
例で示すと
「~/assets/images/sample.jpg」が画像ファイルの保存先なのに、
背景画像として登録するときにはなぜ、
「~/assets/sample.jpg」となるのか理解ができませんでした。

そしてこの疑問を一生懸命ChatGPTに質問しまくり、検索しまくりでやっと納得した答えが、
railsにはアセットパイプラインという便利機能があり、「/assets/ファイル名.jpg」と入れるだけで画像の設定をすることができる、ということでした。
ちなみにこれを知るまでの数十分、「/assets/images/

元記事を表示

2つのモデルを使ってユーザーフォロー機能の実装

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
Xのクローンサービスを制作している時に自分が躓いたユーザーフォロー機能の実装内容について知識整理も兼ねてまとめたものです。

## 実装時のER図(最終版)
![スクリーンショット 2024-10-14 20.41.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/03d3eea2-1ef1-543e-d5d2-8fca3a4a9cc0.png)

## 実相当初のコード
“`ruby:user.rbの関連箇所を抜粋
has_many :relations, dependent: :destroy
has_many :followers, through: :relations
“`
“`ruby:relation.rb
class Relation < ApplicationRecord belongs_to

元記事を表示

RailsのEnum型を使う

## Enum(列挙型)とは
名前がついた定数の集まりです。
あらかじめ用意した選択肢の列挙からデータを選択することで、可読性の向上, 値の代入ミスを防ぐことができます。

## DBのEnum(列挙型)
RailsのEnumを見る前にDBレベルでのENUMについて説明します。
DBのENUMはテーブル作成時に列挙された定義リストに存在する値のみを保管可能になるデータ型です。

要するに”banana”, “apple”, “orange”と定義すると、その3種類しか保存ができなくなります。

## Ruby on RailsでのEnum
Railsのenum型は`数値のカラム`に対してプログラム上で扱える別名を付与することで使用することが可能です。

重要な点としてDBレベルで見るとカラムの型は`数値`です。
これにより、DBのカラムの型自体をEnumにした場合と比べ、カラムに保存可能な値を変更したい際に、DBの変更が必要になる点や、アプリ側からカラムに保存可能な値がわかりづらいという問題点を解消できます。

## Enum型を定義する
今回はAnimalというModelを作成し、k

元記事を表示

【Ruby】URI.escapeが使えない

## はじめに
Railsのアップデート中にURI.escapeを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
URI.escape(str)
“`

エラー文
“`ruby
NoMethodError (undefined method `espace’ for URI:Module)
“`

## 解決方法
Ruby3.0からURI.escapeは削除されました。また、URI.unescapeも削除されています。
代わりに、CGI.escapeやURI.encode_www_formなどを使用します。

## 参考

元記事を表示

【MySQL】COALESCE関数を活用した日数の計算

# はじめに
ActiveRecordのメソッドだけでは表現できないような書き方についてまとめます。

きっかけは、Railsのselectメソッドで、SQLを直接書く場面があったことです。
その時にSQLの重要性がより理解できたので共有させて頂きます。

# 前提知識
## selectメソッド
データベースから取得するカラムを指定するためのメソッドです。
selectメソッドは、SQLの**SELECT句**に相当します。

### 基本的な書き方
“`ruby
# 全てのカラムを取得
User.select(“*”)

# 特定のカラムのみを取得
User.select(:name, :email)
“`

### 複数のテーブルを結合して取得
“`ruby
# UserモデルとPostモデルを結合して、ユーザー名と投稿タイトルを取得
User.joins(:posts).select(“users.name, posts.title”)
“`
:::note info
`joins`によるテーブル結合については[こちらの記事](https://qiita.com/k12

元記事を表示

OTHERカテゴリの最新記事