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

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

【Ruby on Rails】使えるコマンドチートシート&VSCodeおすすめ拡張機能

# はじめに
こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!

この記事は、株式会社スピードリンクジャパン Advent Calendar 2023 の14日目の記事です。

https://qiita.com/advent-calendar/2023/slj

# 目次

– [Railsの主要コマンド](#railsの主要コマンド)
– [アプリケーションのセットアップ](#アプリケーションのセットアップ)
– [コンポーネント生成コマンド](#コンポーネント生成コマンド)
– [データベース関連コマンド](#データベース関連コマンド)
– [データベーススキーマ変更コマンド](#データベーススキーマ変更コマンド)
– [Railsのコマンドライン操作](#railsのコマンドライン操作)
– [Rails開発のVSCode拡張機能](#rails開発のvscode拡張機能)

## Railsの主要コマンド

### アプリケーションのセットアップ
– 新しいRailsアプリケーションを作成しま

元記事を表示

RailsのZeitwerk化でやったこと、見落としていたこと

Railsアプリケーションで、`classic`オートローダーを使っているものがあったのですが、Rails v7からはZeitwerkしか使えなくなってしまうのでZeitwerkへ移行しました。

手順は基本的にはRailsガイドに乗っているのですが、やりながら詰まったところ等もあったので記事にまとめました。

https://railsguides.jp/classic_to_zeitwerk_howto.html

## やったこと

やったことは大きく、以下3点です。

1. autoloaderを`:zeitwerk`に変更して、`bin/rails zeitwerk:check`でエラーが出た部分を修正
2. 不要な自動読み込みを削除
3. アプリケーション起動時の自動読み込みの修正

1つ目は比較的すぐ完了しましたが、2と3については少し時間がかかった部分もありました。

### 1. autoloaderを`:zeitwerk`に変更して、`bin/rails zeitwerk:check`でエラーが出た部分を修正

`bin/rails zeitwerk:check`で

元記事を表示

【Rails + Heroku】PostgreSQLからJawsDB MySQLへ移行する

## 概要
HerokuのPostgreSQLアドオンは費用が高めです。そこで、よりコスト効率の良いMySQLのJawsDBに移行する方法を紹介します。

## ローカル環境の設定変更
主に修正するファイルは`Gemfile`と`config/database.yml`です。

### ファイルの修正手順
– **Gemfile**: `pg` gemをコメントアウトし(念のため保持)、`gem “mysql2”, “~> 0.5″`を追加します。ここで`”~> 0.5″`を指定する理由は、新規に`rails new -d mysql`で作成したプロジェクトに同じバージョンが指定されていたためです。

– **database.yml**: MySQLを使うために、新規に作成したRailsプロジェクトの設定を参考に変更します。違いはdefaultの設定だけだったのでそこだけ変更します。

変更前:
“`yaml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV

元記事を表示

Next.jsでCSVをAPIに送るのに苦戦した

# はじめに

Next.jsからファイルをAPIにポストしようとしたのですが、調べてもすぐに解決できなかったのでまとめていきます。

# 問題

以下のようにインプットにいれたファイルを登録できるようにしました

“`ts
const [file, setFile] = useState()

const handleSubmit = async () => {

const res = await fetch(
`/api/v1/resources/mappings`,
{
method: “POST”,
body: { fle: file }
},
);
const { body } = await res.json();
setResponse({ status: res.status, body });
};
“`

そしてNext.jsのAPIでさらに外部APIを叩くようにしています

“`ts
export async function

元記事を表示

RailsエンジニアはPhoenixでもStimulusを使いたい

## はじめに

この記事は、Elixir Advent Calendar 2023 14日目となります。

https://qiita.com/advent-calendar/2023/elixir

前日13日目は、

@mnishiguchi さんで Elixir Erlang match_spec の文法 でした。

https://qiita.com/mnishiguchi/items/b597f70a186220bf6ec7

## 作るもの

今年は、Phoenix触る時間が全然なくて、ネタに困ったので、ズバリ・・・

#### PhoenixでもStimulusを使いたい

です。

いや、LiveView使えよというツッコミはご容赦いただきたく・・・

今年はRails7漬けになってて全然Phoenix使って

元記事を表示

数値が三桁区切りで表示される input タグをつくる

# `` では物足りない
`form.number_field`でレンダリングされる input タグでは次のような不満があります。
– 3桁区切りの表示をして欲しい(ことがある)
– うっかり全角数字で入力しても、入力がなかったことにしないで欲しい[^1]
[^1]:ウェブ入力欄で、「全角で(半角で)入力してください」とか、「ひらがなで(カタカナで)入力してください」とかに出会うが、お前が正規化しろよと思っている。

HTML の仕様(規格)の範疇だから自分でなんとかするしかない。なので設計方針はつぎのとおりです。

– input 欄に入力中 (focusin) は数値のみで、カンマは入力しない
– 入力は全角でも可能(使用者にできるだけ負担をかけない)
– 欄外に移ったら (focusout) 3桁区切りのカンマが入った表示にする
– POST(PATCH、PUT) の送信時 (submit) は数値を渡す

Stimulus についての概要は把握していることを前提としてます。
検証は、ruby 3.2、Rails 7.1 の環境です。

元記事を表示

Darklaunch(ダークローンチ)を導入してチーム開発を進めやすくした

[GLOBIS Advent Calendar 2023](https://qiita.com/advent-calendar/2023/globis) 14日目の記事です。

こんにちは!GLOPLA LMS開発メンバーの太田です。

開発をしていると「大きな機能の開発」をすることがあると思います。

私たちが開発しているプロダクトの開発メンバーは比較的多く、スクラムチームとして3〜4人くらいのチーム構成になるよう分かれて開発をしているため、あるチームが「大きな機能の開発」を担当することがあるのですが、開発途中の機能をメインブランチに混ぜると他チームのリリースの妨げになってしまいます。[^1]

この記事では、この困りごとを解消するためにDarklaunchを導入した話について書きます。

## Darklaunch(ダークローンチ)とはなにか
ユーザーに気づかれないよう機能をリリースし、内部でパフォーマンスの測定をしたり、動作確認を行ったりできる手法のことです。
これはいわゆるFeature Toggles(Feature Flagsとも呼ばれる)と呼ばれる機構であり、「ON」にす

元記事を表示

rubyで配列から空(諸々)を除外するメソッド

# はじめに
この記事は2023年度の振り返りです。

これは自分が知らなかったメソッドなので、備忘録としてのメモです

# いままで
過去にこの記事を見ていたこともあり、基本的にこれを利用していました

https://qiita.com/ta1kt0me@github/items/33c4d37a65b69b75ee40

“`ruby
[1, 2, nil, 3, “”, []].compact
=> [1, 2, 3, “”, []]

[1, 2, nil, 3, “”, []].compact.reject(&:blank?)
=> [1, 2, 3]
“`

# こんな便利メソッドがあった!!
“`ruby
[1, 2, nil, 3, “”, []].compact_blank
=> [1, 2, 3]
“`

https://qiita.com/SoarTec-lab/items/0c19a4eb5e17c417d165

# さいごに
rails6.1から追加されていたのに、今まで知りませんでした。
ここ最近rubocopとバトルしていて気付いたのですが、r

元記事を表示

【Rails】テスト実行後にDBをキレイにするのにGemを使う択もアリ

# 概要
プログラムを作成すると多くの場合はテストコードを作成すると思います
Railsでテストを実行しているときに「Userデータ作成、作成したらXXも合わせて作成される」みたいなケースがあったときに開発者はあまり考えることはせずともテスト実行後に作成したデータが消えていることが多いと思います

Railsには標準でその仕組が存在し見ていきます
また標準ではなく[`DataBaseCleaner`](https://github.com/DatabaseCleaner/database_cleaner)や[`DatabaseRewinder`](https://github.com/amatsuda/database_rewinder)といったGemを利用する選択もあるので、Gemを利用するケースについて考えてみます

|名前|バージョン|
|—|—|
|Rails|7.2.0-alpha|
|rspec-rails|6.2.0.pre|

※ バージョンは2023/12/13の各Gemのmainブランチ

## テストデータの自動ロールバックについて
結論: テスト実行時に

元記事を表示

JS書けないけど非同期処理はTurbo Framesで作れる

### そもそもTurboって?

TurboはJSのバンドラー(ex: webpack,esbuildなど)を使わなくても非同期で画面が変わるような処理をしたいときに便利なRails標準機能のこと。HotwireはTurbo, Stimulus, Stradaの3つの相性のことで、詳しく知りたい方はわかりやすい記事もあるのでぜひ。

[stimulus-rails gemを読み解く – Qiita](https://qiita.com/yasu-sg/items/08d586ef53b63e32531d)

[猫でもわかるHotwire入門 Turbo編](https://zenn.dev/shita1112/books/cat-hotwire-turbo)

### Turbo Framesとは

通常の画面遷移でHTMLが丸ごと置き換わるのに対して、Turbo Framesでは“`“`というHTMLタグのようなもので囲った要素が非同期で置き換わります。

### 何が便利?

ちょっと前まで画面の一部だけ非同期(画面遷移

元記事を表示

【Rails7】アソシエーションで使用するオプションについて

## はじめに
[HappinessChain](https://happiness-chain.com/) で日々勉強中のAkiraです!
本記事は [HappinessChain Advent Calendar 2023](https://adventar.org/calendars/9414) 14日目の記事になります!
Railsを学習していると自身のアソシエーションに関する理解が浅いために複雑な設定をしようとすると手が止まるということがありました。
本記事では何故極端に浅い理解になってしまったのか、どのように咀嚼することである程度理解できるようになったのかを書いていこうと思います。

## 何故理解が浅くなってしまったのか?
これは各種教材等でインプットする際に `has_many` や `belongs_to` の記述を “呪文” や “おまじない” のように捉えてしまっていたからだと思います。
故に複雑な設定をしなければいけない場合、オプションが何を指して何をしようとしているのか、という思考ができず手が止まったというわけです。
例を挙げると `has_many :book

元記事を表示

【Rails】gem configで定数管理を行う手順

# はじめに
`CORS`の設定でこのようにドメインをベタ書きしている点が気になったので、gem `config`を用いて定数管理する方法をまとめました。
“`ruby:config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ‘http://localhost:8000’

resource “*”,
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
“`

# 導入手順
https://github.com/rubyconfig/config

“`ruby:Gemfile
gem ‘config’
“`
“`ruby
bundle install
“`

`generate` コマンドを実行すると、`confi

元記事を表示

JqueryでRedmineの「wikiページ」をもっと便利に(フィルタリング機能と移動機能)

## JqueryでRedmineの「wikiページ」をもっと便利に(フィルタリング機能と移動機能)

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

[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の11日目の記事として[JqueryでRedmineの「活動ページ」をもっと便利に②(フィルタリング機能と移動機能)](https://qiita.com/yam_asaki/items/2428610fd89bc73ce0ab)を作成しましたが、「活動ページ」だけではなく、「wikiページ」にも「フィルタリング機能と移動機能」を追加できそうな気がしてきましたので、試してみた結果を記事にまとめました。

* * *
### 既存のRedmineで不便なこと、改善したい点

Redmineのwikiページは、マークダウン形式でリッチなテキストを作成できる便利な機能です。ただし、か

元記事を表示

~memo~ Rspecでメソッドの呼び出し回数をテスト時に実際にメソッドも呼び出したい場合

メソッド呼び出し回数をテストしたいけど、モックにしてしまうのではなくて、実際にメソッドも呼び出してその結果も確認したいー!
ということがあり、色々調べたらブロックで呼び出しが出来ました。

“`ruby
before do
org_method = xxx_instance.method(:xxx_method)
allow(xxx_instance).to receive(:xxx_method) { |*args| org_method.call(*args) }
end

it “” do
subject
expect(xxx_instance).to have_received(:xxx_method).once
# expect ~
end
“`

ありがとうブロック

元記事を表示

Rails の状況について振り返り2023年

静岡でフリーランスでWeb開発をしているkazuomatzです。

[静岡 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/shizuoka)の2日目に[「Rails10年選手がGoの勉強会に参戦してきた」](https://qiita.com/kazuomatz/items/ce44c92d2e90a96e9380)というエントリーを投稿して、あれから4年が過ぎました。

Goやるといいいつつ、この4年間でGoの成果物は全くなく、あいかわらずRailsを使っていろいろなWebサービスを開発しています。

当時、Ruby/Railsの状況については、このように書いていました。

## 2019年当時のRuby / Railsの状況

– 2〜3年前に開発したWebサービスがサポート外のRailsで動いている
– とはいえ、Railsのバージョンアップする時間・費用がない
– 慣れ親しんだライブラリーが更新されず、最新のRails環境で使えない

2019年といえば、当時の安定バージョンはRails 5.2系で、R

元記事を表示

デジタルKJ法

## 背景
2022/10に作成したアプリケーションです。
AWSで稼働させていたのですが、維持費高いので現在停止中(2023/8 -)

## アピールポイント
実装例が載っていないドラッグ&ドロップで3層にネストしたカンバン方式を実現したこと(vue.js)
TDD形式で開発したこと

## サービス説明
・作成秘話

・サービスの使用方法

## ソースコード
https://github.com/motoya0118/kj_method

元記事を表示

【Ruby on Rails】アセットパイプラインとはなんぞや(初学者向け)

私は現在、未経験からのエンジニア転職に向けてプログラミングスクールで学習をしている、いしかわと申します。

今回Webアプリケーションの個人開発を進めている際、詰まってしまった**アセットパイプライン**について調べました。
どなたかの参考になれば幸いです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

## アセットパイプラインってなに?
アセットパイプラインは、アプリケーション開発において、JavaScript、CSS、画像などの静的ファイルを効率的に管理、最適化、提供するための仕組みです。主な目的は、ウェブページの読み込み速度を向上させ、ユーザーエクスペリエンスを向上させることです。アセットパイプラインはこれらのファイルを自動的に最小化、結合、キャッシュ管理し、ブラウザへの効率的な提供を補助します。これにより、ウェブアプリケーションのパフォーマンスを向上させることができます。

## 要するになに?
`アセット`:画像やCSSやJavaScriptファイルのリソースのこと
`パイプラ

元記事を表示

Rspecを実行するとin `‘: uninitialized constant NameErrorが発生する

# はじめに

すぐに解決できなかったのでまとめます

# 問題

Rspecを実行すると以下のエラーが出ました

“`
rspec

Bullet settings loaded.
=== Bullet settings loaded. ===
[ddtrace] Unable to patch Datadog::Tracing::Contrib::ActionMailer::Integration (Available?: true, Loaded? true, Compatible? false, Patchable? false)
/apps/spec/controllers/api/internal/v1/dmappings_controller_spec.rb:4:in `‘: uninitialized constant Api::Internal::V1::MappingsController (NameError)
from /usr/local/bundle/gems/rspec-core-2.11.1/lib/rspec/cor

元記事を表示

メール機能の実装 ( ruby on rails )

# まえがき
**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 13日目記事です。

DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

# 初めに
ここでは,rubyのフレームワークである,ruby on railsを使用して,メールを送信する機能を実装します.

# 1. メイラーの作成
“`shell
$ rails g mailer GroupMailer
## 以下実行ログ
create app/mailers/group_mailer.rb # mailerのコントローラー
create app/mailers/application_mailer.rb # アプリケーションコントローラーと同じようなもの
invoke erb
create app/views/group_mailer # mailerのテンプレートのディレクトリ
create app

元記事を表示

SlackからRailsアプリケーションをAWS ECS Fargateへデプロイする手順

# はじめに

本記事では、Ruby on Railsで構築したアプリケーションをSlack経由でデプロイする方法について紹介します。

従来の方法では、AWSマネジメントコンソールから直接CodeDeployを実行したり、インスタンスにSSHで接続してコマンドを実行する必要がありました。
これは、新しく参加するメンバーやQAエンジニアにとっては複雑で手間のかかる手順でした。

そこで、より簡単かつ効率的にデプロイを行えるよう、Slackを利用したデプロイ方法に構成を変更しました。

はじめに、完成した構成の概要を以下に図示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031807/3110530b-ccdb-4f1e-83d8-e7b3d7b38907.png)

左側から順に、以下のフローが取られます。
1. Slackからチャット形式でデプロイコマンドを投稿
1. AWS Lambdaに適用したSlack boltがデプロイコマンドを処理
1. Fargateのタスク

元記事を表示

OTHERカテゴリの最新記事