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

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

【Ruby on Rails】初学者向け-開発の流れについて① プロジェクトの作成編

## Rails開発の流れについて

本記事では下記の流れに沿って簡易的なタスク管理アプリを作成してみようと思います。

・Railsプロジェクトの作成とDockerの設定
・ルーティング
・新規作成、参照、更新、削除画面機能の追加
・検索機能の追加
・DBやモデル周りの整備
・バリデーション機能追加
・ユーザー認証機能追加

(※ 他追加機能があれば随時記事にしていく予定です)

まずざっくり前提とした環境としては以下です。
・Docker
・Ruby on Rails 7
・Mysql
・BootStrap
・VSCode

本記事では上記環境構築が既に行われている前提で
Railsプロジェクトの作成とDockerの設定から進めていきます。

———————————————————————————-
### 〇 Railsプロジェクトの作成とDockerの設定

まずアプリを作成するにあたって、根幹となるファイルを作成します。
Railsは大変便利なのでコマンドを打つとすぐに

元記事を表示

Railsでキャッシュの削除をpub/subで行う(ActiveSupport::Notifications)

# はじめに
Railsのプロジェクトでキャッシュを使う際のパターンをちょっと考えました。
一般的なActive Recordのキャッシュというよりは、複数のモデルに紐づく返り値のキャッシュをどうするかという観点で、もしもっと良い方法とか一般的なアーキテクチャパターンあれば教えてください。

# 前提条件
– 複数モデルに紐づくAPIの返り値をキャッシュしたい
– 複数モデルに紐づくが、その中の一つでもupdateされたらキャッシュを削除したい

# アンチパターン
アンチパターンという言葉はちょっと強いですが、パッと思いつく方法は以下のように紐づくモデルに`after_commit`でキャッシュを削除するコードを追加する方法です。

例えば、以下のような場合です。

“`ruby
class Api::MyApiController < ApplicationController def index cache_key = "my_api_cache_key" result = Rails.cache.fetch(cache_key, expires_in: 1

元記事を表示

ソケットファイルとPIDファイルの徹底解説!Railsアプリの安定稼働に欠かせない基礎を学ぼう

## はじめに

Railsアプリケーションの運用やデプロイをする際に、しばしば耳にする「**ソケットファイル**」と「**PIDファイル**」。これらはアプリケーションサーバー(PumaやUnicornなど)を正しく動作させ、管理するために重要な役割を果たしています。しかし、それぞれが具体的にどのような役割を担い、どのように設定するのかは意外と知られていないかもしれません。

この記事では、**ソケットファイル**と**PIDファイル**の役割や使い方について詳しく解説し、Railsアプリケーションの安定稼働にどう役立つかを学んでいきましょう。

## ソケットファイルとは?

### 1.1 ソケットファイルの役割

**ソケットファイル**は、**プロセス間通信**に使用される特殊なファイルで、アプリケーションサーバー(PumaやUnicornなど)とWebサーバー(NginxやApache)間で、データをやり取りするためのインターフェースを提供します。

通常、Webサーバーとアプリケーションサーバーは**TCP/IP通信**を使ってやり取りをしますが、同じサーバー内で動作して

元記事を表示

Rspec – Request のテストでレスポンスでセットされた Cookie を検証する

# コードの例

“`rb
expect(response.cookies[‘foo’]).to be_present
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

元記事を表示

あの日見た””の理由を僕はまだ知らない

## 始まりは自己紹介から
初めまして あおげばにゃんこです。
最近JSにこなれ感を出しつつコード書いていた矢先に悲劇が起きましたので、ご報告です。

## data属性に「””」がついてくる

普段はrailsで開発を行っているのですが、HTMLのdata属性にデータを入れておいて取り出そうとした際にある問題が生じました。

発生した問題は以下のとおりです。
“`

“`

お気づきになりましたか?

謎の「””」がついてますよね? 
こいつはいったい何者なんだと
そう思うのが自然の摂理です。

今回はこちらの直接的な原因について記事を書きます。
※究極的な原因であるhtmlやrails,jsのことについては詳しく述べません

## 原因はなんぞや

まずは我々が望む美しい理想形を確認してみましょう。

“`

元記事を表示

【Docker】【Ruby on Rails】初学者向け-頻出コマンドについて

前提
・windows
・環境はDocker使用
・フレームワークはRuby on Railsを使用

本記事はDocker環境を使用してRuby on Railsの開発を行った際に頻出したコマンドと
その内容についてまとめています。

## Dockerについて

### Docker
…アプリケーションを「コンテナ」と呼ばれる軽量な仮想環境で実行することができる。
 これによって環境の違いなどに依存しない動作が保証される。
「Dockerイメージ」という、依存関係・設定情報等すべて含むパッケージを使用して、
 任意の環境で「コンテナ」を作成し、実行することができる。

(※個人的にですが「コンテナ」はサーバなどといった実行環境という認識でいます。)

開発・テスト・運用環境で同じDockerイメージを使用することで、環境依存の問題を減らすことができる。

(※まとめると、軽いうえに環境に依存しない超効率的なやつ。)

## Ruby on Railsについて

### Ruby on Rails
…アプリケーションをモデル・ビュー・コントローラーに分けてコードの保守

元記事を表示

DATEDIFFは日付を文字列的に比較しているだけ

## 結論

DATEDIFF関数は使わないほうがよい。WHERE句で頑張ろう。

## 環境とテストデータ

“`sql
> show variables like ‘%time_zone%’;
+——————+——–+
| Variable_name | Value |
+——————+——–+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+——————+——–+
2 rows in set (0.014 sec)

> select id, name, start_at from hoges;
+—-+————–+———————+
| id | name | start_at |
+—-+————–+———————+
| 1 | yesterday 0 |

元記事を表示

【Rails】furimaアプリ 商品出品機能実装 #1

# 商品出品機能実装
### 実装概要
– 商品出品機能を実装する。
– モデルの単体テストコードを書く。

### Itemモデルを作成
ターミナル
“`
rails g model item
“`

### マイグレーションファイルの修正
マイグレーションファイルをDB設計に基づいて下記に修正
“`ruby:/db/migrate/2024~_create_items.rb
class CreateItems < ActiveRecord::Migration[7.0] def change create_table :items do |t| t.string :name, null: false t.text :description, null: false t.integer :category_id, null: false t.integer :status_id, null: false

元記事を表示

RailsのレスポンスをCloudFrontで一定期間キャッシュする方法

# はじめに
弊社のサービスの中には、数秒間で数千人〜数万人のアクセスが来るサービスがあります。
applicationサーバーにECS、キャッシュサーバーにElastiCacheを使っているものもあり、そうなると、サーバーの負荷・サーバー台数を増やすことによるAWSコストの問題がどうしても上がってきます。

今後はサーバーレス化という視野ももちろんありますが、
特定の条件化では、
`CloudFrontのキャッシュを利用することでECSやElastiCacheにそもそもリクエストが行かないようにする`
という戦略も有効と思いますので、今回の記事を書くに至りました。

# 条件
今回の条件は以下です。
– 一定時間の間、固定の値を返すだけのAPI(ステータスとして公開状態を返すAPI)
– 数秒間で数千人〜数万人のアクセスが来る画面では、上記APIのみ実行する
– これに耐えるため、公開状態はElastiCacheで保持している(ECS経由)
– ECSを経由するため、ECSのタスク数を増やす必要がある
– ElastiCache自体も負荷に耐えうるスペックにしないといけない

# 方

元記事を表示

ソフトウェアデザイン10月号「コードがドキュメント」を地で行く開発スタイル の所感

# はじめに
[ソフトウェアデザイン2024年10月号](https://gihyo.jp/magazine/SD/archive/2024/202410)を読んだ感想です。
著者の[伊藤淳一さん](https://blog.jnito.com)が働いている[株式会社ソニックガーデン](https://www.sonicgarden.jp/)では、納品のない受託開発という事業をやっています。タイトルに目が惹かれたのと、ドキュメントを作らない理由が興味深かったので皆さんに共有できれば、と思い書いています。

:::note info
伊藤淳一さんが書かれたRubyの技術書「[プロを目指す人のためのRuby入門](https://gihyo.jp/book/2021/978-4-297-12437-3)」もわかりやすくてすごくお世話になったのでぜひ読んでみてください!
:::

# 納品のない受託開発って?
多くの人がイメージする一般的な受託開発と異なり、継続的に週単位での打ち合わせと開発・リリースや運用保守を行う開発プロセスのことで、詳しくはソニックガーデンのコーポレートサイトを見ると良

元記事を表示

【Rails】rails db:resetとrails db:migrate:resetは何が違う?

こんにちは!

今回は、rails db:reset と rails db:migrate:reset の違いについて書きます!

![banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/83de7afc-66c8-8880-ad67-fd6231afad24.png)

# rails db:reset
* rails db:reset は、データベースを再作成し、シードファイルを読み込んでダミーデータを挿入します。テーブルは再作成され、既存のデータはすべて削除され、シードファイルを元に新しいデータが作成されます。
* ただし、rails db:reset はマイグレーションを実行しません。マイグレーションファイルの内容は反映されず、db/schema.rb に基づいてテーブルが再作成されます。

# rails db:migrate:reset
* rails db:migrate:reset はデータベースを再作成し、テーブルのデータがすべて削除される点は rail

元記事を表示

Ruby on Railsの魅力を引き出す!ダックタイピングを使った柔軟な設計術

## はじめに
**Ruby on Rails**の特徴の一つとして、**ダックタイピング**という柔軟な設計手法があります。Rubyは「もしそれがアヒルのように歩き、アヒルのように鳴くなら、それはアヒルだろう」というダックタイピングの概念に基づいて、クラスの型にとらわれない設計を可能にしています。

この記事では、Railsでダックタイピングをどう活用するかについて解説し、より柔軟で再利用可能なコードを書くためのヒントを紹介します。

## ダックタイピングとは?
**ダックタイピング**とは、オブジェクトの型やクラスに依存するのではなく、**そのオブジェクトがどのようなメソッドを持っているか**に基づいて、オブジェクトを判断するプログラミング手法です。Rubyでは、オブジェクトのクラスや型を気にせずに、オブジェクトが適切なメソッドを持っている限り、そのオブジェクトを使うことができます。

### 例:ダックタイピングの基本
“`ruby
class Dog
def speak
“Woof!”
end
end

class Cat
def speak

元記事を表示

【Rails】render nothing: trueでエラーが出る

## 問題
コード
“`ruby
class UsersController < ApplicationController def index render :nothing => true, :status => 200
end
end
“`

エラー文
“`ruby
ActionView::MissingTemplate
“`

## 解決方法
以下のように修正します。
“`ruby
class UsersController < ApplicationController def index render body: nil, status: 200 end end ``` ## 参考 https://ponpoko-nalplus.hatenablog.com/entry/2019/02/27/175641

元記事を表示

Rails における UserBook.all と UserBook.joins(:user).joins(:book) の違い

# はじめに
中間テーブル `user_books` があったとき、Rails (Active Record) における `UserBook.all` と `UserBook.joins(:user).joins(:book)` の違いについて説明します。

# モデルの定義
以下のようなモデルがあったとします。ユーザは複数の本を所有しており、本は複数のユーザに所有されている、いわゆる多対多の関係になっています。

“`ruby
class User < ApplicationRecord has_many :user_books has_many :books, through: :user_books end ``` ```ruby class Book < ApplicationRecord has_many :user_books has_many :users, through: :user_books end ``` ```ruby class UserBook < ApplicationRecord belongs_to :user be

元記事を表示

Rails のコンソールで Unable to connect: Adaptive Server is unavailable or does not exist (ホスト名) (TinyTds::Error) がでる

## Unable to connect: Adaptive Server is unavailable or does not exist (ホスト名) (TinyTds::Error)が出てどうしようもない

Ruby・Rails で開発をしている時に、テスト用のDBサーバ(SQLServer)を使用していると、コンソールで上記のエラーが出たので共有します。

https://github.com/rails-sqlserver/tiny_tds/issues/218

上記のサイトでも似たようなエラーが見られますが、Azure を私は使っていないし、日本語じゃないしで全然わからなかったです。

しかし、IRB Codeのところを参考にして、
irb>require ‘tiny_tds’
irb> client = TinyTds::Client.new username: ‘ユーザ名’, password: ‘パスワード’, host: ‘ホスト名’, port: 1433, database: ‘DB名’
と叩くと、同じエラーが出ました。
その時に、テスト用のDBサーバが急に動

元記事を表示

DEPRECATION WARNING: ActiveSupport::ProxyObject is deprecated and will be removed in Rails 8.0.

# tltr

原因はダウンロード済gemの中で古いものがあることで、解決方法はgemのアップデートです。

gemアップデートでアプリに影響を与えないように、以下コマンドでgemを一つずつアップデートして、該当warningが出なくなるまで古いgemを特定して、特定ができたら該当gemだけアップデートすれば、warningを解消できます。

“`
bundle update gemの名前
“`

gem全体が更新されても挙動変化の心配がない場合の解消法は以下です。

“`
bundle update
“`

# 背景

Rails ver up 7.1 to 7.2のときに以下warningが出ました。

“`
DEPRECATION WARNING: ActiveSupport::ProxyObject is deprecated and will be removed in Rails 8.0.
Use Ruby’s built-in BasicObject instead.
(called from

at /Users/xxx/yyy_rails_pro

元記事を表示

DEPRECATION WARNING: `rails/console/app` has been deprecated and will be removed in Rails 8.0. `rails/console/helpers` has been deprecated and will be removed in Rails 8.0.

# tltr

原因はダウンロード済gemのバージョンが古いことで、解消法はgemアップデートです。

gemアップデートでアプリに影響を与えないように、以下コマンドでgemを一つずつアップデートして、該当warningが出なくなるまで古いgemを特定して、特定ができたら該当gemだけアップデートすれば、warningを解消できます。

“`
bundle update gemの名前
“`

gem全体が更新されても挙動変化の心配がない場合の解消法は以下です。

“`
bundle update
“`

# 背景

Rails ver up 7.1 to 7.2のときに以下warningが出ました。

“`
DEPRECATION WARNING: `rails/console/app` has been deprecated and will be removed in Rails 8.0.
Please require `rails/console/methods` instead.
(called from

at /Users/yuhaogao/.rb

元記事を表示

GitHub Actionsを使用してbundle update自動実行→PRを自動作成

# 概要
– CircleCIを使用して週1で自動実行していたbundle updateを、GitHub Actionsに移行した際に行ったことのメモ
– CircleCIを使用していたときは[circleci-bundle-update-pr](https://github.com/masutaka/circleci-bundle-update-pr)というGemを使用させていただき、bundle update自動実行→プルリクエスト自動作成を実現していた
– [circleci-bundle-update-pr](https://github.com/masutaka/circleci-bundle-update-pr)は、名前の通りCircleCIでの使用を目的に作成されているように見受けられたGemだが、READMEを見ていたらGitHub Actionsで動かすためのexampleも記載されていた
– https://github.com/masutaka/circleci-bundle-update-pr?tab=readme-ov-file#run-on-gith

元記事を表示

`bundle install`に失敗する(windows/Ubuntsu/docker)

# 概要
* 以下の開発環境で開発を進めており、ジェムの `rails-i18n` を導入しようとした
* Windows11
* Ubuntsu
* docker
* Rails7.2.1

# `bundle install` でエラーになる
“`bash:確認したエラー
rails@XXXXXXXXXXX:/myapp$ bundle install
Fetching gem metadata from https://rubygems.org/………
Resolving dependencies…
Fetching rails-i18n 7.0.9

Retrying download gem from https://rubygems.org/ due to error (2/4): Bundler::PermissionError There was an error while trying to write to `/usr/local/bundle/cache/rails

元記事を表示

【Railsテンプレートエンジン】ERB、Slim、Hamlの使い方と特徴の比較

# はじめに
こんにちは、未経験エンジニア3年目の嶋田です。
今回は、Railsでよく使われるテンプレートエンジン「**ERB**」「**Slim**」「**Haml**」の基本的な書き方と、それぞれの独自特徴について紹介します。
各エンジンには特徴があり、それぞれの書き方やスタイルに違いがあります。

## 目次
– [テンプレートエンジンの特徴](#テンプレートエンジンの特徴)
– [1. ERB](#1-erb)
– [2. Slim](#2-slim)
– [3. Haml](#3-haml)
– [実際に書いてみての感想](#実際に書いてみての感想)
– [各要素の比較](#各要素の比較)
– [1. 変数の表示](#1-変数の表示)
– [2. if文の記述](#2-if文の記述)
– [3. 三項演算子の使用](#3-三項演算子の使用)
– [4. 長いテキストの出力(Slimの|)](#4-長いテキストの出力slimの)
– [5. 画像の出力](#5-画像の出力)
– [6. リンクボタンの表示](#6-リンクボタンの表示)

元記事を表示

OTHERカテゴリの最新記事