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

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

実務未経験の初心者がRailsを学習してみた

# ① はじめに

初投稿になります🌷
IT業界に未経験で転職して約1週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます!

# ② 使用した教材

今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。

![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)
                       

元記事を表示

Ruby エイリアスメソッド

# エイリアスメソッドについて
Rubyには全く同じ機能でありながら異なる名前のメソッドが複数存在します。これらのメソッドのことをエイリアスメソッドと呼びます。
可読性向上やプログラマーの好みによって使い分けられています。(メソッドによっては派閥がわかれているとか…)

以下にエイリアスメソッドの一例を記載します。

# エイリアスメソッド一覧

## Array クラス

– `map` と `collect`
– `size` と `length`
– `slice` と `[]`
– `append` と `push`
– `prepend` と `unshift`

## Hash クラス

– `store` と `[]=`
– `size` と `length`
– `key` と `index`
– `to_s` と `inspect`

## String クラス

– `size` と `length`
– `slice` と `[]`
– `to_s` と `to_str`

## Enumerable モジュール

– `collect` と `map`
– `f

元記事を表示

RailsでGitHubActions(CI)を導入してみた

# GitHubActionsとは
GitHubによる***CI/CD(継続的インテグレーションおよび継続的デリバリー)サービス***です。
これを使うと、コードのビルド、テスト、デプロイなどを自動化できます。

### 導入メリット
新しくブランチを切って作業する時、rubocop と RSpec は通った状態でマージするのがいいですよね。
どちらも手動で実行するのですが、実行漏れがあってそのまま commit, push、PR作成まですると、
漏れに気づかずマージしてしまうと、エラー時に、どの段階でエラーが出たのか、わからなくなります。

CI を導入することで、これらの作業を自動で実行してくれて、問題があったら教えてくれる

こちらも参考にしてみてください。

https://qiita.com/Hashimoto-Noriaki/items/4a30f06be4fd3c5a4956

# できること
調べてみたら以下のことができるみたいです。

1.***自動テスト***
誰かが新しいコードを追加すると、すぐにそのコードが動くかどうか自動的に確認するテストが実行します。

2

元記事を表示

Docked Rails CLI With PostgreSQLでRailsコマンドをDocker化する

# はじめに
僕は普段Docker環境で開発しています。
でも、Rails newでサクッと試したいときに環境作るのめんどくさいなーと思ってました.
Railsのリポジトリを見てるとDocked Rails CLIなるものを見つけてコレ使えるんじゃね?と思ったので試してみます:smile:

https://github.com/rails/docked

# 前提
Docker環境がセットアップ済み

# 使い方
使い方は至って簡単:relaxed:
READMEにあるように、aliasを登録したり時前のシェルスクリプトを作ったりするだです。
Railsのコマンドを開発PCのホスト環境のセットアップなしに実行できるようになります!

“`bash
docker volume create ruby-bundle-cache
alias docked=’docker run –rm -it -v ${PWD}:/rails -u $(id -u):$(id -g) -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cl

元記事を表示

DockerのHealthCheckでコンテナの実行順序を制御する。

## はじめに
プログラミング学習コミュニティ「progaku」で行っているチーム開発で取り組んだ内容になります。

## コンテナの実行順序の制御が必要になった場面
Dockerで環境構築を行い、初めてDB作成のコマンド実行する際に以下のようなエラーが発生
“`
docker compose run backend rails db:create
“`

エラー内容
“`terminal
[+] Building 0.0s (0/0) docker:desktop-linux
[+] Creating 3/0
✔ Network [ネットワーク名] Created

元記事を表示

基礎知識④Active Recordについて

## はじめに
転職活動をする中で、MVCそれぞれの役割やhttp通信についてなど、基礎的な技術知識について問われるシーンがあったので、改めて基本に立ち返って自己学習しようと思った。

出題例にActive Recordについての質問があり、
そういえばちゃんと説明できないな〜…と思ったので学習内容をまとめる。

## Active Recordとは
Ruby on Railsで使用されるデザインパターンの一つで、**DBとのやり取りを簡素化してくれる**もの。
本来DBとやり取りをするためにはDB言語であるSQLが使われますが、
RailsにはこのActive Recordが適用されているため、
複雑なSQL文を書かなくてもRubyで直感的にDBとのやり取りを記述することができる。

### Active Recordで出来る主なこと
– CRUD機能のサポート
Create Read Update Deleteといった基本的なデータ処理機能を
メソッドを用いて簡単に行うことができる。

– モデル同士のアソシエーション
異なるモデル間を結ぶことができます。
ex)1ユー

元記事を表示

【個人開発】Rails×ReactのアプリでGoogleログインを実装しました(devise使わないパターン)

## はじめに
こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)と申します。プログラミングスクールRunteq50期生です。先日、生成AIを用いた習慣化支援RPGアプリ「3日目に魔王がいる」をMVPリリースしました。その技術要素を細かく切り出して順に備忘録として残していこうと思います。

今回は**OmniAuthを用いたGoogle認証(ログイン)機能**についてです。SNS認証ではdevise(とdevise token auth)を使ったパターンを聞くことが多いですが、自分のアプリ要件だと過剰な印象もあったので今回はそれを使わない方法で進めました。

## 参考
### アプリ紹介記事
https://qiita.com/MaTTA_RUNTEQ50B/items/c8eac9251f704164dc9c

### サービスURL
https://mao-the-3rd-day-front-e8eb3156d3f2.herokuapp.com/

### Githubリポジトリ
https://github.com/MaTTalv001/M

元記事を表示

ゼロから始めるstimulus入門5(外部リソースとの連携)

## はじめに
今回はstimulusで外部リソースとの連携についてドキュメントを見ながら学んでいきます。

過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)
第3回:[ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)](https://qiita.com/shinry/items/b2b732b6aeb4374d146d)
第4回:[ゼロから始めるstimulus入門4(状態の管理)](https://qiita.com/shinry/items/b5396cc5f5165940e17d)

## 外部リソースとの連携
コントローラーが外部リソースの状態を追跡しないといけない場合があります。
(「外部」とは、DOMやStimulusの一部ではないものを

元記事を表示

enumとバルクインサートを使用した通知機能実装

# はじめに
ポートフォリオ制作中です!
今回は通知機能を実装しました!
enumとバルクインサートを活用しポリモーフィック関連付けを
使った実装をしたのでアウトプットとしてまとめます

※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 完成物
![スクリーンショット 2024-06-15 13.33.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/acf7b7dc-e8a6-ec35-0ce4-22266ca9aec6.png)

レイアウトがまだ整ってなくてすみません💦

#### 通知の条件
1.新規投稿されたときフォロワーへ通知
2.投稿にコメントされたとき投稿者へ通知
3.投稿にいいねされたときに投稿者へ通知
4.フォローされたときにユーザーへ通知
5.メッセージを送信されたときに受信者へ通知

各機能は実装されていることを前提にまとめていきます

# ER図
複雑ですが、通知テーブルから各アクションのリレーションは省略

元記事を表示

[Rails] rails db:migrateが失敗したら、スキーマファイルからデータベースを構築しよう

# 概要
マイグレーションに不整合がある場合、**`rails db:migrate`** が失敗することがあります。
過去のmigrationファイルから原因を特定し、修正しようとするとかなり時間がかかります。

このような時は **`rails db:schema:load`** コマンドを使うことで、スキーマファイルから迅速にデータベースを構築することができます。

# マイグレーションコマンド
**`rails db:migrate`:**
db/migrate のマイグレーションファイルを順次実行する

**`rails db:schema:load`:**
db/schema.rbのスキーマ情報をそのままデータベースに反映する ※db/migrate のマイグレーションファイルは使わない

# まとめ
既存プロジェクトの環境構築などで、マイグレーションが失敗した時のために頭の片隅に置いておくと役立つ時が来るかもしれません…

新規メンバー参画予定のため備忘録として執筆… :memo:

元記事を表示

Web API 混在の Rails アプリケーションで500エラーを適切に処理したい

## はじめに

Rails で、Web API でJSONを返すものと、HTMLのページを返すものを混在させたアプリケーションを `rails new` で作成していました。

routing で、Web API は、 `/api` 以下にマウントしていました。

`/api/xxx` で Web API が呼ばれて想定外のエラーが発生した時、JSON でレスポンスを返すようにしたいと考えたのですが、意外に手間取ったので自分用にメモしておきます。

なお、動作確認は、Rails7.1 で実施しています。

## 500エラーを発生させる
意図的に 500 エラーを発生させるために、Controller で以下のようなコードを書きます。

“`ruby
class Api::UsersController < ApplicationController def index raise StandardError, 'error' end end ``` ## 何もしない場合 何もしない場合、Rails は、`/500.html` を返します。JSON ではなくて、H

元記事を表示

railsのマイグレーションファイルを削除する方法

# 環境

“`
$ ruby -v
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [aarch64-linux]
“`
“`
$ rails -v
Rails 7.0.6
“`

# 削除手順
現在のマイグレーションの状況を確認する。

“`
$ rails db:migrate:status

Status Migration ID Migration Name
————————————————–
up 20230206140511 Create tasks
“`
削除対象のIDを指定し、statusをdownに。

“`
$ rails db:migrate:down VERSION=20230206140511
“`
一応確認。

“`
$ rails db:migrate:status

Status Migration ID Migration Name
—————————-

元記事を表示

ゼロから始めるstimulus入門4(状態の管理)

## はじめに
今回はstimulusの状態管理についてドキュメントを見ながら学んでいきます。

過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)
第3回:[ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)](https://qiita.com/shinry/items/b2b732b6aeb4374d146d)

## 状態の管理
最近のフレームワークのほとんどは、常に JavaScript で状態を維持することを推奨されていますが、stimulusではDOM内の属性として状態が存在します。
この方法によって、最初のHTMLドキュメント、Ajaxリクエスト、Turboのページ遷移、さらには他のJavaScriptライブラリなど、どこからでも HTML を

元記事を表示

【Rails】ログローテーションをする方法

`config/environments/production.rb`などの設定ファルに以下の設定を追記するとログローテーションができます。

“`rb
# ファイルサイズ基準
config.logger = Logger.new(“log/production.log”, 5, 10 * 1024 * 1024)

# 日数基準
config.logger = Logger.new(“log/production.log”, ‘daily’) # weeklyなども可

“`

## その他の方法

Linuxコマンドの `logrotate` コマンドを使用してもログローテーションが可能です。

【日本語man】logrotateの全オプション解説

元記事を表示

gemが上手く動作せず、gemの内部処理でデバッグしたい/モンキーパッチを作りたいときのやり方

gemの怪しいと思った部分をoverwriteして、binding.pryを追加すれば、追加した場所で止まってくれます。

overwriteのやり方
https://qiita.com/arakaji/items/dbf26f0b1d1c4659ef32#%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%86

元記事を表示

after_saveでsidekiqを叩いてもデータが存在しない

# はじめに

E2Eがコケて原因が謎だったところについてまとめておきます

# 問題

ユーザーをDBに保存すると、Sidekiqのジョブを叩くような実装をしました

“`rb:user.rb
after_save TriggerIndexingCallbacks
“`

しかしジョブでは作成したユーザーが存在しませんでした

# 解決方法

“`rb:user.rb
after_commit TriggerIndexingCallbacks
“`

`after_commit`にすることでDBに保存してから実行されるようになりました
保存前に動いていたのが原因でした

# おわりに

初めてafter_commitというものを使いました
そもそも知らなかったです

元記事を表示

【rails】railsにおけるMVCモデルが誰でもわかるように説明

今回はrailsにおけるMVCモデルについて説明したいと思います。
経験のないエンジニアにとっては非常にわかりにくい概念であると思います。図も使いながらなるべく理解できるよう努めます。

# mvcモデルとは
`model`、`view`、`controller`の3つに分けてコードを管理するものです。
それぞれの役割を簡潔に述べたのが以下です。
| 名前 | 役割 |
|:-:|:-:|
| model | データベースとのやり取り |
| view | 画面表示 |
| controller | modelとviewの制御 |

# 処理全体像
今回は動的な場合と静的な場合で分けてみました。
動的・静的とは何だ?となっている方は[こちらのサイト](https://www.takara-sc.co.jp/column/2621/)を見てみてください。
図を見ると動的・静的がわかりやすいと思います。
![スクリーンショット 2024-05-22 17.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した

# 概要
`RDS`がフェイルオーバを行うと`Ruby on Rails`(以下、`Rails`)では、ダウンしたDBを参照する現象が発生します。この問題により、`DB`を参照出来ない為、`Rails`が動作しなくなります。今回は、`RDS`のフェイルオーバーが行われたら、`RDS`のイベントサブスクリプション、`SNS`、`Lambda`を使用して、`ECS`で起動している`Rails`の`puma`を再起動する処理を構築しました。今回は、その実装方法を記載します。

# 前提条件
– `ECS`で`Ruby on Rails`の環境が動作している
– `Amazon aurora`(postgres)を使用している (RDSでも今回の実施は可能)
– `Terraform`を使用している (webコンソールから設定する事も可能)

# Lambdaの処理を動かす為の技術選定
フェイルオーバーが行われた事を`Lambda`に通知する機能として、RDSの[イベントサブスクリプション](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/

元記事を表示

Sidekiqのretry設定は忘れずに!!

# はじめに
SidekiqでJobを実行して、エラーが発生すれば、リトライをしてくれます。
しかもデフォルトで、`25回`も…!!

なので、明示的に設定を行っていないと、25回もリトライされてしまうので、通知するように設定していたら…

イベント数がとんでもないことになってしまいますね。
`(※ 自分がそうでした…)`

反省も含めて、アウトプットいたします。

# config/sidekiq.yml に設定
上記ファイルに、以下のように記載いたします。

“`rb
:max_retries: 10
“`

上記のように記載すると、デフォルト値を変更して、最大で10回リトライしてくれます。
また、Job別にリトライ数を設定することもできます。

# 各Jobにも設定可能

“`rb
class HogeJob < ApplicationJob queue_as :hoge sidekiq_options retry: 10 def perform fuga.hogehoge end end ``` `sid

元記事を表示

【個人開発】万年下痢症の男が胃腸の弱い人のための健康管理アプリ「Puri.log」を作りました

# はじめに
こんにちは、nomotoと申します。
プログラミングスクールRUNTEQ53期生です。
Puri.logというwebアプリをリリースしました。

この記事では、アプリの概要と開発背景に軽く触れた後、機能の実装において、工夫した部分の手法と思考について詳しく書いていきます。

https://www.puri-log.com/

https://github.com/tkhero555/Puri.log

# アプリ概要
胃腸の弱い人のための食事と排便の記録アプリです。
あなたの胃腸と食事の相性を、記録を元にアプリが判定します。
LINEBOTを活用し、手軽に記録ができるようになっています。

# このアイデアに決めた理由
私は生まれつき胃腸が弱く下痢症で、中学時代には毎朝腹痛で通学電車を途中下車してトイレに行く人生でした。
社会人になってから自身の腹痛の要因が食事にあるのでは?と考え、色々な食事を試しては胃腸の反応を観察することを始めました。
何を食べると調子を崩すのかを少しずつ把握していった私は、相性の悪い食事を極力避けて生活して症状を改善することができました。
2

元記事を表示

OTHERカテゴリの最新記事