Rails関連のことを調べてみた2021年10月31日

Rails関連のことを調べてみた2021年10月31日
目次

【コードリーディング】Rails 1.0 ActiveRecordのソースコードを読んでみた

#はじめに
Railsポートフォリオ作成でActiveRecordを使っており、作成当時は正直内部処理がどうなっているのか分かっていませんでし、気にもしていませんでした笑

そういった中、実務案件で直接SQLを書く機会があり、ActiveRecordって実際どういう風にSQLに置換して実行しているのか気になりはじめました。

そこで、ActiveRecordのソースコードでSQLに置き換えている仕組みの部分のコードを読んで理解した部分を書き留めたいと思います。

#今回読んだソースコード
今回はコードの流れをシンプルに見たかったので最新のソースコードではなくRails v1.0.0のソースコードを読みました。とは言ってもコードは約1800行もあり、読むのになかなか骨が折れました笑

その中でもController部分でよく使用するfindメソッドに絞って読んだものを記載します。
ソースコード元は[こちら](https://github.com/rails/rails/blob/v1.0.0/activerecord/lib/active_record/base.rb#L378)

#そ

元記事を表示

【RSpec】Railsチュートリアル第6版 第7章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– 第7章(本記事)

#Minitest

###ユーザー登録に対するテスト

“`rb:test/integration/users_signup_test.rb
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup info

元記事を表示

【RSpec】Railsチュートリアル第6版 第6章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– 第6章(本記事)
– [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)

#Minitest

###Userテスト

“`rb:test/models/user_test.rb
require ‘test_helper’

class UserTest < ActiveSupport::TestCase def setup @user = User.new(name: "Example User", email:

元記事を表示

【RSpec】Railsチュートリアル第6版 第5章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– 第5章(本記事)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)

#事前準備
Gemfileにfeature spec用のcapybaraを追加

“`rb:Gemfile
group :test do
gem ‘capybara’
end
“`

#Minitest

####StaticPagesコントローラーのテスト

“`rb:test/controllers/static_pages_controlle

元記事を表示

【RSpec】Railsチュートリアル第6版 第4章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– 第4章(本記事)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)

#Minitest

####StaticPagesコントローラーのテスト

“`rb:test/controllers/static_pages_controller_test.rb
require ‘test_helper’

class StaticPagesControllerTest < ActionDispatch::IntegrationTe

元記事を表示

Could not find ‘bundler’|rubyのバージョン違いで出たエラー

# 前提
ローカル環境として作成したrailsのディレクトリを
Dockerにマウントしbuildする際に遭遇したエラーの記録です。

# エラー内容
docker build コマンドを実行した時に以下のエラーが出ました。

“`error.sh

ERROR [5/7] RUN bundle install && rm -rf -/.gem 0.3s
[5/7] RUN bundle install && rm -rf -/.gem:
#9 0.283 /usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe’: Could not find ‘bundler’ (2.1.2) required by your /app/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on

元記事を表示

【Ruby on Rails】アソシエーション先のデータを `create_テーブル名` メソッドで作成する。

### 環境
– Ruby 2.6.3
– Ruby on Rails 6.0.1

#できること
`has_one` でアソシエーションしている場合、
アソシエーション先のデータを`create_テーブル名`メソッドで作成できる。

#前提
Authorモデルに対してBookモデルがhas_oneアソシエーションしています。
一人一冊、本を書いている状況です。

“`ruby
# author.rb
class Author < ActiveRecord::Base attr_accessor :name :age has_one :book end # book.rb class Book < ActiveRecord::Base attr_accessor :title belongs_to :author end ``` # 実例 ```ruby author = Author.create(name: 'John', age: 30) author.create_book(title: 'cooking book') ``` # 最後に 上記書いておい

元記事を表示

deviseについて

## はじめに
RubyのライブラリであるGemの「devise」のまとめです。
「device」ではなくて「devise」なので注意。

### deviseでできること
「devise」は簡単に認証機能を作成することができます。
認証機能は新規登録画面とかログイン画面とかのことで、
ユーザー登録が必要なサイトでは必須ですよね。

### 導入してみる

#### deviseのインストール
“`ruby:Gemfile
gem ‘devise’
“`
を追加して

“`
$ bundle install
“`
をターミナルに入力。

####初期設定
設定ファイルをインストールするために

“`
$ rails g devise:install
“`

これでdeviseを使用する準備は完了。

config/initializers/devise.rb
config/locales/devise.en.yml

の設定ファイルが作成されているはずです。

####テーブルの作成
今回はモデル名は「User」で作成します。
「devise」はユーザテーブルを自動的に作成

元記事を表示

【Ruby on Rails】migration index too long なエラーを解決

### 環境
– Ruby 2.6.3
– Ruby on Rails 6.0.1
– **PostgreSQL 10**

# 発生状況
今回のエラーが起きたマイグレーションファイル

“` ruby
class CreateFooBarExampleRegistrations < ActiveRecord::Migration[6.0] def change create_table :foo_bar_example_registrations do |t| t.references :parent_example_table_name, null: false, foreign_key: true t.timestamps end end end ``` **長いテーブル名&カラム名に外部キー制約を設定しようとしていました。** # エラー文 実行すると... ```ruby Index name 'index_foo_bar_example_registrations_on_parent_example_table_na

元記事を表示

DockerでMailcatcherを使ってRuby on Rails開発環境のメールを受信する

Mailcatcherの概要は公式サイトで色々記載されています:https://mailcatcher.me

letter_opener も Ruby on Rails 開発環境のメールがテストできるが、個人的には Mailcatcher の方が便利で使いやすいので、よく使います。

# docker-compose設定

“`yaml:docker-compose.yml
mailcatcher:
image: schickling/mailcatcher
container_name: mailcatcher
ports:
– ‘1080:1080’
– ‘1025:1025’
“`

Dockerを起動したら「localhost:1080」で管理画面にアクセスできます。

![スクリーンショット 0003-10-30 22.10.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/6e67d721-a5c9-7f9c-d759-e70853ffd5c

元記事を表示

Ruby on RailsアプリでAWS SESを使ってメールを送信する方法(設定から実装まで)

前はずっとSendGrid経由でメール送信機能を使っていましたが、せっかくAWSでアプリケーションをデプロイするのでAWSのサービスを使いたかったです。その為メール送信機能をSendGridからAWS SESに移動しました。

では、簡単に言うと Amazon Simple Email Service (SES) は、デベロッパーが任意のアプリケーションでメールを送信できるようにする、費用対効果の高い、柔軟でスケーラブルなメールサービスです。

# SES設定

## sandboxから移動

新規AWSアカウントではSESの制御があるます、確認済みのアドレスしか送信できなくて、1日最大200メールや1秒にあたり1メールなどの制限があります。
なので本番で使用できるにはリクエストをしなければなりません。

リクエスト方法はまずこのリンクにアクセス:http://aws.amazon.com/ses/fullaccessrequest

自分の場合は画像のように入力したら半日後で承認されました。

![スクリーンショット 0003-10-30 11.54.00.png](https://

元記事を表示

Rails7に標準装備される「import maps」の概要

## イントロダクション

現在のRailsは、プロジェクト作成時のオプションで「—api」と入力することで使える「APIモード」として、サーバーサイドのみで使われることが多い(実際に私の勤めてきた企業の多くはそうであった)が、Railsの作者であるDHHこと、デイヴィッド・ハイネマイヤー・ハンソン氏は、RailsがAPIのみの用途とされることを推奨はしていないようだ。

なぜなら、今回のRails7のアップデートによって、Railsが大きく進化した箇所は「JavaScript」に関することばかりなのだから。

もっとも、大きなプロジェクトをこなす上では、やはりフロントエンドとバックエンドは切り離されることが多いだろう。

だが、小規模開発において、フロントエンドを含めた全てがRails標準のアセットパイプラインのみで完結するのならば、それは個人開発者にとって嬉しいニュースなのではなかろうか。

実際に今私が開発している小規模なWebサービスの構築は、全てがRailsに依存している。
その中でどうしても苦しくなってくるのはJavaScript関連の実装だ。

そして、それが今回のRai

元記事を表示

【Ruby on Rails】Googleスプレッドシートの値を取得してデータベースに取り込む

![スクリーンショット 2021-10-30 20.40.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/275a826e-b919-77b9-1211-8d897b966081.png)

## やりたい事

API経由でGoogleスプレッドシートの値を取得し、DB(データベース)に取り込みたい。

## 仕様

– Docker
– Ruby 3
– Rails 6(APIモード)
– MySQL 5.7
– Google API(認証周りはサービスアカウントを使用)

## 実装

ぼちぼち実装を始めていきましょう。

### 環境構築

まず、Railsの環境構築から。

#### 作業ディレクトリ & 各種ファイルを作成

“`
$ mkdir google-spreadsheets-importer && cd google-spreadsheets-importer
$ touch Dockerfile docker-compose.yml e

元記事を表示

HerokuのDBをGUIで見たい!!(TabelPlus)

## やりたいこと
– `heroku`にデプロイしたアプリの`DBの情報`を`GUI`(TablePlus)で確認したい。

## 結果を知りたい方用
– `heroku`にアクセスする
– `DB`を見たいアプリを選択する
– `Settings`タブを表示
– `Config Vars`内の`Reveal Config Vars`ボタンを押下
– `DATABASE_URL`環境変数の内容をコピー
– `Table Plus`を開き`new` => `connection URL`ボタンを押下
– 自動でリンクが入っているので`import`を押下
– 接続に必要な情報が記載されているので`Connect`ボタンを押下し完了

## 現状
– `heroku`にデプロイしたアプリのDBを見たい
– `heroku pg:psql`でアクセスできる事は知っているが
– `local`と同様に`GUI`で見やすくした状態のを見たい
– しかし、完全に未知状態
– AWSにデプロイした時は`TablePlus`で確認できていたので多分できるだろう位の認識。

## 調べたこと
– `h

元記事を表示

趣味アプリのテレビ放映まで1週間で行った負荷対策まとめ

## 背景
– Heroku の Hobby Plan で運用していたサービスがテレビの取材を受け、[ひるおび](https://www.tbs.co.jp/hiru-obi/)で放送された
– 放送1週間前に「サイトが落ちないように何か対策できないか」と相談され、そこから調べたり準備したりしたことについて書く

## 事前調査
### テレビ放映時のアクセス数を見積もり
下記のブログを読み、1分間に450アクセス程度という見積もりで始めました。

– [テレビ放送に向けての負荷対策(AWS x Rails の場合)[前編]
](http://techblog.housmart.co.jp/2016/03/03/prepare_for_wbs/)
– [テレビ放送に向けての負荷対策(AWS x Rails の場合)[後編]
](http://techblog.housmart.co.jp/2016/03/10/prepare_for_wbs2/)

### 現在の構成のスペックについて
元々の構成は下記の通りでした。

– アプリケーションサーバー: Rails アプリケ

元記事を表示

【RSpec】Railsチュートリアル第6版 第3章

#はじめに
Railsチュートリアル第6版ではテストフレームワークとして**Minitest**が採用されているが、実際に現場で使われることの多い**RSpec**を用いて、第3章から第14章において作成するsample_appのテストを書いていく。
テストする内容自体は基本的にはチュートリアルの内容に沿って進めていく。
また、RSpecの書き方については、[『Everyday Rails – RSpecによるRailsテスト入門』](https://leanpub.com/everydayrailsrspec-jp)という書籍を参考にしている。

###目次
– 第3章(本記事)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– [第7章](ht

元記事を表示

【クレジットカード不要】無料の最強構成でWebアプリを作ってデプロイする【Vercel + Heroku + MongoDB Atlas】

2021年10月時点でクレジットカード不要で利用できるサービスの中で最適だと思う組み合わせで、Webアプリ開発の環境構築からデプロイまで行います。

# 利用するホスティングサービス

## Vercel

– ReactのフレームワークNext.jsで作ったアプリをデプロイできる。
– 日本のCDNを利用できるのでNetlifyに比べて応答が早いらしい。
– 無料のHobbyプランは個人利用で非営利目的のみ(広告はOKらしい)。

## Heroku

– 今回はRuby on Railsで作ったアプリをデプロイしてAPIとして利用する。
– アプリを稼働できるのは1つのアカウントにつき550時間/月。
– PostgreSQLのアドオンはレコード数10000行の制限がある。

## MongoDB Atlas

– 無料プランでは容量512MBまで利用できる。

# 開発環境

OS: Windows 10 20H2

WindowsではRuby on Railsの動作が安定しないので、WSL2という機能を使ってWindows上でLinuxを動かして開発します。

## 開発環境

元記事を表示

【Rails】validateはカスタムメソッド

よく使用する“`validates“`とめちゃくちゃ似てるカスタムメソッド
モデルの状態を確認し、無効な場合にerrorsコレクションにメッセージを追加するメソッドを作成できる

“`model.rb
class Invoice < ApplicationRecord validate :expiration_date_cannot_be_in_the_past private def expiration_date_cannot_be_in_the_past if expiration_date.present? && expiration_date < Date.today errors.add(:expiration_date, ": 過去の日付は使えません") end end ... end ``` ###RSpecでテストする際 expiration_date_cannot_be_in_the_pastメソッドがprivateだった場合、 モデルの単体テストではなく、リクエストテストで期待するエラーが返るかのテストを

元記事を表示

【RSpec】shoulda-matchersを使ってテストを1行で書く

##環境
Ruby 3.0.2
Rails 6.1.4.1
shoulda-matchers 5.0.0

shoulda-matchersを使えばバリデーションテストが1行で書けるので大変便利

##enumのテスト

“`model.rb
enum weather: { sunny: 0, cloudy: 1, rainy: 2 }
“`

– define_enum_for

“`spec.rb
describe ‘enum’ do
it { is_expected.to define_enum_for(:weather).with_values(
sunny: 0,
cloudy: 1,
rainy: 2
) }
end
“`

##バリデーションテスト

“`model.rb
validates :firstname, presence: true
validates :lastname, presence: true
validates :number, presence: true, uniqueness: t

元記事を表示

Rails7に標準装備されるライブラリのカタカナ読み一覧

## イントロダクション
開発現場とか、クライアント面談とかで何て発声したら良いか迷ったので、共有。
随時更新するかもしれません。

## 一覧

import maps(インポート マップス)

Hotwire(ホットワイヤー)

Stimulus(スティミュラス)

元記事を表示

OTHERカテゴリの最新記事