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

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

レビューで指摘されたリファクタリングベスト5【まだ短く・分かりやすくできる】

「このリファクタリングは思いつかなかった。。。 ?? 」

# はじめに
こんにちは、[まつけん](https://twitter.com/matsuken_web314)です。渋谷の[サウナ道場](https://sauna-ikitai.com/saunas/78191)によくいます。
最近エンジニアになって、1年が経ちました。

実装で、手も足も出ないことが無くなってきて、成長を感じてます。
ですが、「もっと短く・分かりやすくできる」というリファクタリングの観点でレビューをもらうことが割とあります。
その中でも「これは、、、気づかなかった。あざます!」となるリファクタリングのベスト5を紹介します。

:::note info
この記事が参考になりそうな読者

– RubyのリファクタリングTipsを知りたい方
– エンジニア1年目がレビューで指摘されたリファクタリングを知りたい方
:::

※こちらの記事に出てくるコードに関しては全て`Ruby`です。実務で学んだことなので、出てくるコードは全てフィクションです。(実際のサービスのコードではないです)

# 【第5位】wher

元記事を表示

【Rails】ネーミングのお作法:MVC編

# はじめに
Railsでの一般的な命名規則について説明していきます。

:::note info
表記法
* キャメルケース
* アッパー
* ロウワー
* スネークケース
* コンスタントケース
* ケバブケース
* M (Model) → 単数形
* V (View) → 複数形
* C (Controller) → 複数形
:::

## キャメルケース
キャメル(camel)はラクダのことで、コブに見立てて単語ごとの頭文字を大文字で表記します。
全体の先頭の文字は、大文字の場合と小文字の場合とがある。

### アッパーキャメルケース
主にクラス名、モジュール名で使用され
先頭が大文字のキャメルケースで表記します。

“`admin_user.rb
# 例
class AdminUser
end
“`

### ロウワーキャメルケース
主に`JavaScript`の変数名などで使用され
先頭が小文字のキャメルケースで表記します。

“`.js
// 例
const helloWorld = “ハローワールド”;
console.log(helloWorl

元記事を表示

Ruby on Railsで簡単にlocaleファイルを自動生成するコマンドを作ってみたら便利だったので紹介する

Ruby on Railsで以下のように、モデルの日本語ファイルを用意する機会があると思います。

“`yml
ja:
activerecord:
models:
article: 記事
attributes:
article:
title: 題名
content: 本文
created_at: 作成日時
updated_at: 更新日時
“`
このファイルを用意しておくと、エラーメッセージなどでも日本語で表示してくれますね。

しかし、このファイルを毎回手動で作っていくのは非常に大変です。
そこで、自動でこのファイルを作れるようにしてみようっていうのが今回の記事の内容です。

## 完成イメージ

“`bash
❯ bundle exec “rails tools:locale_generate”
Created: config/locales/ja/models/post.yml
config/locales/ja/models/user.yml already e

元記事を表示

ガード節について

# はじめに
現在、railsを使う現場で働いてますが、コードレビューでうけた指摘を定着し、記憶に残すために投稿します!

# 【結論】ガード節を使った書き方

**要件**
ある特定のユーザー名`param[:name]`が渡される。
* `users`テーブルに情報がある場合
さらに`purchases`テーブルを検索し、当該ユーザーの購入記録を取得する。
* `users`テーブルに情報がない場合
処理を終了する。

**ガード節を使わない書き方**
“`ruby
def index
if param[:name].present?
@user = User.find_by(user_name: param[:name])
if @user.present?
@purchases = Purchase.find_by(user_id: @user.id)
if @purchases.present?
# 購入記録がある場合の処理
els

元記事を表示

【Rails + Bun】Rails 7.1.0.beta1でJSのビルドにBunを試してみる

Rails 7.1.0.beta1で導入された新機能の一つに、JavaScriptのビルドツールとしてBunが追加されました。

https://rubyonrails.org/2023/9/13/Rails-7-1-0-beta-1-has-been-released

Rails 7.0のオプションに関して以前別記事にてまとめましたが、今回はこのBunを選択して試してみます。
よければこちらの記事も読んでみてください。

https://qiita.com/kyntk/items/0936598a903ac74e607d

:::note warn
執筆時点でv7.1.0はまだベータ版となっています
“`bash
$ rails -v
Rails 7.1.0.beta1
“`
:::

## Bunについて

Bunは先日バージョン1.0がリリースされたばかりの、新しいJavaScriptランタイムです。
Node.jsやDenoと比較しても速いことを推しています。
このBunですが、JavaScriptランタイムだけでなく、bundlerやパッケージマネージャー、テストといっ

元記事を表示

【Rails】Active Storageのバリデーション

## Gemをインストールする

`active_storage_validations`をインストールします。

https://github.com/igorkasyanchuk/active_storage_validations

“`rb:Gemfile
gem ‘active_storage_validations’

# :dimension または :aspect_ratioを使用する場合には以下のいずれかを併せてインストールします。
gem ‘mini_magick’, ‘>= 4.9.5’
gem ‘ruby-vips’, ‘>= 2.1.0’

“`

“`terminal:ターミナル
bundle install
“`

## バリデーションを設定する

モデルにバリデーションを記述します。

“`app/models/user.rb
class User < ApplicationRecord has_one_attached :avatar validates :avatar, content_type: { in: %w[image/

元記事を表示

【Rails】x-rubyを使ってみた

### x-ruby: 新たなTwitter gemの使い方

Twitterは最近、APIの仕様を一新し、「x-ruby」という新しいgemをリリースしました。このgemは、v1.1とv2のAPIの両方に対応しており、Rubyの開発者にとって非常に便利です。

なので、今回はその基本的な使い方について説明します。

**【セットアップ】**

1. **Gemのインストール**
新しいgemをインストールするために以下のコマンドを実行します。
“`ruby
gem install ‘x’
“`
または、Gemfileに以下の行を追加した後、`bundle install`を実行します。
“`ruby
gem ‘x’
“`

2. **環境変数の設定**
TwitterのAPIキーなどの情報を環境変数として設定します。`dotenv` gemを利用することで、このプロセスが簡単になります。

**【ツイートの実装】**

1. **APIクライアントの初期化**
APIクライアントを以下のように初期化します。
“`ruby
x_credentials = {

元記事を表示

deliver_later をテストの時だけ即時実行したい

時は、`perform_enqueued_jobs` と書く。

“`ruby
it do
perform_enqueued_jobs do
subject
end

expect(ActionMailer::Base.deliveries.size).to(eq(1))
end
“`

とりあえず動いてるか?のテストしたい時はこれで良さそう。

ちゃんとどのメソッドが呼ばれてるか?みたいなテストにしたいなら、呼ばれてるMailerをスタブしないとダメそう。

一周回って、結合テスト的に呼び出し〜どんな内容のメールが送信されているか?でテストするなら、このように書くことでメールの内容が検証できる。

“`ruby
mail = ActionMailer::Base.deliveries.last

expect(mail.subject).to eq(‘Expected Subject’)
expect(mail.to).to eq([‘example@example.com’])
expect(mail.from)

元記事を表示

【Ruby】アソシエーションを使った投稿分類【投稿分類応用】

# はじめに
筆者は 大学生限定 プログラミングコミュニティ 『GeekSalon』で活動している者です!
もし少しでも興味がありましたら、ぜひお話を聞きにきてください!

# 前提
この記事でできることを紹介します。
今回は投稿の分類をし、その後にアソシエーションを使いさらに分類するといったことをします。

例えば、音楽をジャンル毎に分ける → ジャンル毎にアーティストを投稿する → アーティストの曲ごとに分類する。
流れはこんな感じになります。

他にも、スポーツをジャンル毎に分ける → ジャンル毎にスポーツを投稿する → そのスポーツチームごとに分ける。といったこともできます。

https://qiita.com/kubochiro/items/4d80a91a6133b680cb4b

参考記事:投稿の分類はこちらの記事を参考にしました

# カテゴリー分けその1
今回は、音楽をジャンル毎に分ける → ジャンル毎にアーティストを投稿する → アーティストの曲ごとに分類することをします!
![Qiita動画2.gif](https://qiita-image-store.s3.

元記事を表示

【Rails】rubocop導入手順の備忘録

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

現在、色々なことを試して遊んでいるミニアプリに~~重い腰を上げて~~rubocopを導入しました。
その際の備忘録です。

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# 実装
[rubocop](https://github.com/rubocop/rubocop)をインストールする。
“`ruby:Gemfile
+ gem ‘rubocop’, require: false
“`
“bundle install“を実行。

“bundle exec rubocop“でrubocopを通してみる。

“`ruby:ターミナル
52 files inspected, 688 offenses detected, 669 offenses autocorrectable

The following RuboCop extension libra

元記事を表示

rails ユーザデータ削除方法(備忘録)

#### 登録したユーザーの削除

rails consoleを起動

“`ruby
User.all
“`
を使い、現在の登録されているユーザを確認する。

#### id指定で削除
“`ruby
User.find(id).destroy
“`

– 再度、User.allをして消えたか確認する。

元記事を表示

【RSpec】備忘録:stub_constメソッド、create_listメソッド

## stub_constで定数をスタブ化する

:::note
RSpecのテストフレームワークを使用しているRubyやRuby on Railsのプロジェクトで見られるメソッドの一つ。一時的に定数の値をスタブ(つまり、偽の値に置き換える)するのに役立つ。
:::

#### 使用例
特定の定数の値に依存するコードをテストしている場合、その定数の値を一時的に変更してテストシナリオを検証することができる。

“`ruby
it “does something based on MY_CONSTANT” do
stub_const(“MyClass::MY_CONSTANT”, “fake_value”)

# このブロック内では、MyClass::MY_CONSTANTは”fake_value”として扱われる
expect(MyClass.some_method).to eq(expected_result_based_on_fake_value)
end
“`

この例では、`MyClass::MY_CONSTANT`を`fake_value`に一時的に置き換え

元記事を表示

【Rails】Qiita APIを使ってRailsに関する記事を取得する

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

[前回](https://qiita.com/kumaryoya/items/eafbc5063e60e3aaa4d5)に引き続きAPIについてです。
今回は、**Qiita API**を使ってRailsでミニアプリを作ってみました。

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# アクセストークンを取得する
それでは、[Qiita APIのドキュメント](https://qiita.com/api/v2/docs)に沿って実装していきたいと思います。
まず、初めに**アクセストークン**を取得します。
アクセストークンを取得しなくてもAPIを利用することはできますが、認証している状態ではユーザーごとに1時間に1000回まで、認証していない状態ではIPアドレスごとに1時間に60回までという[利用制限](https://qiita.com/api/v2/doc

元記事を表示

実務未経験から情報共有サービス『HomeCareConnect』を開発してみた【Rails7 / MySQL / AWS / Docker 】

![スクリーンショット 2023-09-19 12.07.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117662/02d1be9a-8939-0cd5-604b-4b8897ea1df9.png)

# はじめに

はじめまして! ごん([@gon0821](https://qiita.com/gon0821))と申します:relaxed:

未経験からWebエンジニアへの転職を目指しており、その過程で **「在宅療養者の健康状態と薬の管理を円滑にするサービス」** を作成しましたので、`プロダクト内容`や`学習過程等`を紹介したいと思います!

これからエンジニアを目指される方や現在学習中の方にとって少しでも参考になれば、嬉しいです:raised_hands:

# 自己紹介
– バックエンドエンジニアを目指す27歳
– 前職は地方公務員
– 性格は「穏やかだね」と言われることが多い
– 好きなことは、テニス、スノーボード、ピアノ、ドライブ?
– 2023年4月から本格的に学習開始(学習期

元記事を表示

【Rails】CarrierWaveとMiniMagickで画像を.wepbに変換する

# 画像を.webpに変換したい

と思って記事を探したんですが、無さそうだったので投稿します。

CarrierWaveとMiniMagickの導入方法については多くの記事があるため、今回は割愛させて頂きます。

https://qiita.com/wonder_boooy/items/1510f8750d1282693148

### .webpに変換する方法

具体的な方法ですが、CarrierWaveのUploaderクラスに記載するだけです。

https://github.com/carrierwaveuploader/carrierwave#getting-started

“`$ rails generate uploader 〇〇〇“`コマンドで作られたファイルにコードを書きます。?マークのコメントが該当部分

“`app/uploaders/stamp_image_uploader.rb
class BoozeImageUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagic

元記事を表示

ransack scopeの検索キーワードとして ‘T’ が使えない

# 問題

ransackでは、ActiveRecordのscopeを用いて検索することができます。しかし、以下のように検索キーワードとして `’T’` は使えません。エラーメッセージにある通り、scopeに渡されているはずのキーワードが渡されていません。

![Sep-24-2023 23-49-35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472392/4e3f26ba-85f5-3ce6-680d-540e33f2515d.gif)

## 環境

– Rails 7.1.7
– Ruby 3.2.2
– Ransack 4.0.0

# 原因

このような問題が起きるのは、`’T’` などといった真理値っぽいものは、ActiveRecordのscopeに渡される前にサニタイズされるからです。

検索キーワードとして、真っぽいものが入っていたら `true`に、偽っぽいものが入っていたら`false`に変換しています(`sanitized_scope_args`メソッドの5-8行目)。

元記事を表示

Railsの本番環境を作る

## 概要
Railsの本番環境を作る手順です。

## 環境
– Ubuntu20.4 (vagrant)
– PostgreSQL12.4
– Rails5.2

## 手順

#### アセットファイルのプリコンパイル

アセットファイルをプリコンパイルします。JavaScriptsでコードを書いている場合、プリコンパイルでYarnが使われます。Yarnがインストールされていなければ、Yarnがありませんというエラーメッセージが表示されますので、事前に、Yarnをインストールしておく必要があります。
“`
$rails assets:precompile RAILS_ENV=production
“`

>(トラブルシュート)
>このようなエラーが出てきました。対応方法はメッセージにある通りです。ハーモニックモードを有効にする設定場所は、config/production.rbです。
>
>To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true). (訳)ES6 構

元記事を表示

コールバックでのsaved_change_to_ と will_save_change_to

## はじめに
スクールにて、コールバックの設定に手間取り、その際調べることで挙動の違いを理解したつもりなので、同じようなことにハマった人のためになればいいなと、健忘録として残します。

### 開発環境
Rails 6.1.7.4
ruby 3.0.1

### 目的
管理者が、最後の1人のとき、管理者が0人とならないように権限の編集を制限する。
つまり、1人もいなくなっちゃ困るので、必ず1人は権限を在籍させたい訳です。

### 最初に試したこと(失敗したこと)
– Qiita記事や調べてまずは下記のように設定
“`rb
def admin_cannot_update
if User.where(admin: true).count == 1 && self.saved_change_to_admin == [true,false]
throw :abort
end
end
“`
adminに設定されたユーザーがデータベースに1人だけであり、かつ対象のオブジェクトのadminカラムをtrueからfalseに変更しようとしたとき、 thow :abortで更新を中

元記事を表示

画像複数投稿

# 初学者の備忘録
初学者の備忘録です。前に投稿した[画像投稿]()の発展、画像複数投稿編
[参考にした記事](https://qiita.com/oak1331/items/830755889a37ceee1bc6)

## 注意
前回の画像投稿はプレビュー機能も一緒に載せてましたが、今回は複数投稿なのでプレビューは表示できません。これから挑戦しようと思います。

## 実装
【1】 アソシエーション
元々あったアソシエーションは単数なので複数に対応したアソシエーションに変更します。
“`diff_ruby:app/model/必要ファイル名


# 単数投稿
– has_one_attached :image
# 複数投稿
+ has_many_attached :images


“`

【2】 ストロングパラメーター
ストロングパラメーターの定義をハッシュ形式にします。ハッシュ形式にした場合は最後に記述してください。
“`diff_ruby:app/controllers/必要ファイル名


private

def place_

元記事を表示

【個人開発】LINEMessagingAPIを使って無差別に飯テロできるアプリを作りました

# はじめに
こんにちは、すずゆーと申します。

突然ですが皆様は飯テロをしたことはありますでしょうか。
私はSNSに美味しいご飯をアップするのが大好きです。
アップした写真に対してフォロワーさんからの反応を楽しむのが大好きです。

しかし、SNSだとせっかくアップしても本当に見てもらいたい人に見てもらえない時があったり…
そんな中、LINEなら確実に相手に届くし見てもらえるじゃん!ということで私の悪戯心を具現化したアプリを開発しました。

## 記事を読む上での注意点
当記事はプログラミング学習を開始して日の浅い業界未経験者が書いたものになりますので、技術的な内容などは誤りを含む可能性があります。予めご了承ください。

# サービス名

### 飯テログ
URL: https://meshitelog.com
GitHub: https://github.com/suzuyu0115/meshitelog
![placeholder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493892

元記事を表示

OTHERカテゴリの最新記事