Ruby関連のことを調べてみた2022年08月22日

Ruby関連のことを調べてみた2022年08月22日
目次

【もうやらかさない】開発DBのデータを全部消しちゃったお話(改善策もあるよ)

## はじめに
どうも、もきおです。未経験から自社開発企業に入社して半年以上経ちましたがつい一週間前くらいに盛大にやらかしたのでその際のお話をしていきたいと思います。

Slackでの会話
先輩「あれ?開発DBのデータ消えた・・・?」
メンバー「僕もDB見れなくなりました、、」
先輩「全部消えてるよね、、」

この時ハンパない冷や汗を書いてたと思います。心当たりがめちゃくちゃあったからです。
そう、開発DBのおそらく何千万というデータというデータを消してしまったのは紛れもなく自分でした。

## なぜデータを消してしまったのか?
毎回テストを走らせるためにテスト用DBを作成しているのですが、テスト途中で止まってしまいそのまま進まないという事象が起きていました。
“`ruby:
rails db:create Rails_ENV=test
rails db:migrate Rails_ENV=test
“`
そのためmigrateが上手くできていないと感じ、一旦テストDBをリセットしようとしたら“test“を指定せず以下のコマンドを打ってしまい開発DBのデータを全てリセットしてし

元記事を表示

The resource ファイル名 was preloaded using link preload but not used within a few seconds from the window’s load event.

## はじめに
RubyonRailsでアプリを開発していた時にjsを用いて写真プレビュー機能の作成時に起こったエラーです。
今回は2つの解決法を使って解説しましたので自分に合った解決法が見つかれば幸いです。

### 使用する環境
– MacOS(M1)
– Rails 6.1.4
– Ruby 2.6.3
– yarn 1.22.17
– Homebrew 3.5.0

### エラー文
「The resource ファイル名 was preloaded using link preload but not used within a few seconds from the window’s load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.」

## 解決法1:特定のページでのフルリロードを実行する

Before
“`application.html.erb
<%= javascript_pack_tag "application"

元記事を表示

Rubyのクラスについて

## コード
“`
class Student
def initialize(name)
@name = name
end

def avg(math, english)
return @name,(math + english)/2
end

attr_accessor :name
end

a001 = Student.new(“sato”)
p a001.name, a001.avg(30,70)
“`
## 実行結果
“`
“sato”
[“sato”, 50]
“`
## コード解説
### `a001 = Student.new(“sato”)`
– `クラス名.new(引数)`により、引数を使ってにinitializeメソッドが実行され、インスタンスが生成される
– インスタンスとはそのクラスに由来するオブジェクト

### `@name = name`
– `@変数`はインスタンス変数と呼び、クラス内のどこでも参照できる
– 何度も使うような変数を定義する

### `a001.avg(30,70)`
– `インスタンス.クラス内で定義し

元記事を表示

undefined method `permit’ for “1”:String に手こずった。

# はじめに
本記事はプログラミング初心者が、railsの学習を進めながら、躓いた部分、解決した箇所、またそれらの解決方法を備忘録も兼ねてまとめているものです。
最初はprogate。そのあと、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」を参考に進めていきました。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。

# 環境
Ruby 3.1.2
Rails 7.0.3.1

“`ruby:new.html.slim
– if @user.errors.present?
ul#error_explanation
– @user.errors.full_messages.each do |message|
li = message
dl
= form_with model: @user, url: ‘/users’, local: true do |f|
.form-group
f.label 名前

元記事を表示

完全未経験が2ヶ月半で一からWebアプリを作ったお話

# はじめに
ポートフォリオとして作成したWebアプリの紹介記事です。
アプリを作成する際に自分が何を考えて作成したのか、その過程をご紹介します。
苦労したことや楽しかったことなどもまとめましたので、是非最後まで読んでいただければと思います!

# 簡単に自己紹介
* 商社の営業マンとして働く29歳
* ポートフォリオ作成前は、Progateで基礎学習、Railsチュートリアルを一通りした程度

# アプリの概要と開発背景
### アプリ概要
* 自分の欲しいものを管理して支出予測するアプリです。
* サービス名は『Wantest』にしました。
* 欲しいものを登録して一覧化し、その合計金額を表示させます。

### 開発背景
* アプリの制作理由
みなさんは欲しいものを買うか迷ったり、欲しいものを買ってみて後悔した経験はありませんか?
私自身、本を買っても読まなかったり、ゲームを買っても結局やらなかったりと、買って後悔した経験が多々あります笑。
このアプリはそんな経験を少しでも減らせればという思いで開発に至りました。

* 誰のどんな課題を解決するか
**欲しいものを買うか迷っている

元記事を表示

Userモデル、usersテーブル作成とバリデーション【10日目】

# 概要
– Userモデルを作成
– usersテーブルを作成
– TDDでバリデーション

# 1. モデルとマイグレーションファイルの作成
– `rails g model user`でモデルを作成
– 自動的にマイグレーションファイルが生成される
# 2.マイグレーションファイルの編集
– マイグレーションファイルの中身を編集
# 2. テーブル作成
– `rails db:create`でusersテーブルを作成
# 3. モデルの編集
– rspecでテストを書いてfailedを確認
– モデルにvalidation書く
– テストが通るか確認

# その他
– bcryptをgemでインストール
– has_secure_passwordでパスワードをハッシュ化
– パスワードのカラム名はpassword_digestへ
– 一意性(uniqueness)のバリデーションはDBレベルでも行う

# 参考
– [Ruby on Rails チュートリアル](https://railstutorial.jp/chapters/modeling_users?version=6.

元記事を表示

自作言語のコンパイラにオレオレアセンブリではなくx86_64アセンブリを生成させる(関数呼び出し+足し算だけ)

自作言語とそのコンパイラを作って(一応 x86風のつもりの)オレオレVM向けにオレオレアセンブリ・オレオレ機械語を出力するということをこれまでやってきたのですが、今回はこれを改造して本物の x86_64 アセンブリを出力させてみます。

x86_64 アセンブリを触るのは今回が初めてで、ちゃんとやろうとすると大変そうなのでハードルを下げます。あんまりがんばらなくて済むようにしたい。

– 関数呼び出しと足し算だけ
– 正常系1パターンだけ動けばOK
– 「x86_64アセンブリとツールまわりを軽く触ってみた」の実績解除ができればOK
– 細かいところまで理解してなくてもOK
– 細かいところに深入りしない。深入りしないぞ!
– なんとなく雰囲気が分かればOK

今回のスコープはここまで。

# これを改造します

https://github.com/sonota88/vm2gol-v2

<自作言語処理系(Ruby版)の説明用テンプレ>
自分がコンパイラ実装に入門するために作った素朴なトイ言語とその処理系です。簡単に概要を書くと下記のような感じ。

– 小規模: コン

元記事を表示

議事録

# 研修が終わって
一ヶ月半ほどの研修を終えて早々、プロダクトの機能の追加を頼まれた僕は意気揚々とコーディングに取り掛かろうとしたが、まず最初に立ちはだかった問題が多かった。

## 足りなかった知識
・linux
・TCP/IP(ネットワーク)
・git

### linux
まず最初に環境構築をする上でコマンドラインで色々設定する上で指示をされるのだが、ssh接続のコマンドの細かいオプションやIPアドレスを調べるコマンドを知らずにため息を疲れる場面が多々あった。また権限に関してもとても重要であるのにも関わらずうまく指示通りのコマンドを打てなかった。

### TCP/IP
基本的に指示をされる上で多くのカタカナが出てくるがほとんど理解できなかった。おそらくTCP/IPの知識が必要である。どのIPアドレスがどういうものなのかという理解がなかった。

### git
gitに関しては共同開発をする上での最低限の知識コマンドを必要である。

## rails
基本的なモデル、データベース操作の練習が足りない。どのようにコードを書いたらどのようなデータが取り出せるのかは、コードをひたすら

元記事を表示

Rails7をちょっと試す(turbo_frame_tag でページの表示を速くする編)

## はじめに

Rails 7.0.0 には、 [Turbo](https://github.com/hotwired/turbo-rails) が組み込まれています。
今回はその中で、 `turbo_frame_tag` を試してみたいと思います。
`turbo_frame_tag` を使ってページの表示速度を改善してみます。

以下のバージョンで確認しました。

– Ruby 3.0.2
– Rails 7.0.3.1

## 前準備をする

今回は前準備に少し手間がかかります。

## Rails プロジェクトを作る

新しくRailsプロジェクトを作ります。このとき `
(データベースオプションを指定しているのに深い意味はありません。)

“`shell
mkdir rails_sandbox
cd rails_sandbox
rails new . –database=postgresql
“`

## model を2つ作る

`User` と `Book` の2つの model を作ります。

“`shell
bin/rails g model User nam

元記事を表示

Gitコマンドでrbenv version ruby-2.7.4′ is not installedtというエラーが出る

# はじめに

この記事は2022年4月にまとめていた「細かいつまずいたことをメモしておく(4月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Gitコマンドを叩くと以下のエラーが出るようになってしまった

“`
rbenv version ruby-2.7.4′ is not installed
“`

またブランチを変更してもでてしまう

# 解決方法

これはovercommitをインストールしたことに起因していた
overcommitは.gitのホックに直接設定を書き込むためにブランチを変更してもその設定は引き継がれている
そのためブランチを変更して`overcommitがはいっていない状態`にしても動いてしまうのでエラーが発生する

overcommitを追加したブランチを早くマージする必要がありました

元記事を表示

Railsのコントローラ

### コントローラの作成コマンド
今回はBooksコントローラを作成します
“`ruby
rails g controller books
Running via Spring preloader in process 51297
create app/controllers/books_controller.rb
invoke erb
create app/views/books
invoke test_unit
create test/controllers/books_controller_test.rb
invoke helper
create app/helpers/books_helper.rb
invoke test_unit
invoke assets
invoke scss
create app/assets/stylesheets/books.scss
“`

このように表示させる

元記事を表示

【RSpec】Railsのモデルスペックでバリデーションのテストは書くべきか否か?

## はじめに:単純なバリデーションならテストコードは不要(という私見)
Railsでモデルスペックを書くとき、バリデーションのテストを書く人をよく見かけます。
たとえば以下のようなイメージです。

“`ruby
class User < ApplicationRecord validates :name, presence: true end ``` ```ruby RSpec.describe User, type: :model do # こういうテストは書く?書かない?? describe 'validation' do example 'nameは必須' do user = User.new(name: '') expect(user).to be_invalid user.name = 'Alice' expect(user).to be_valid end end end ``` 決して、バリデーションのテストを書くことが悪いことだとは言いませんが、個人的には単純なバリデーションで

元記事を表示

N+1問題のイメージ画像

![スクリーンショット 2022-08-21 10.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/8af891e4-c146-6488-7379-531b670a4e49.png)

N+1問題の説明です。1:Nというのは1ユーザーに対してN個の投稿データが存在することをさします。

![スクリーンショット 2022-08-21 10.25.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/61c96efb-1d08-f07d-a868-f12d3e294db7.png)

![スクリーンショット 2022-08-21 10.25.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/b70935c0-1141-c2ad-b83e-2a99edf9eb48.png)

![スクリ

元記事を表示

【Rails】devise_invitableで招待メールからパスワード登録したユーザのリダイレクト先を変更する

## deviseとdevise_invitable
deviseとはRailsで作成したアプリケーションへ簡単に認証機能を実装することができるgem(ライブラリ)の一つで、devise_invitableはdeviseに招待機能を追加するgemになります。

### やりたいこと
devise_invitableで招待メールを送信

パスワード設定用の招待メールが送られてくる

パスワード設定

希望の画面にリダイレクトする (今回はこれをやりたい

### 問題点
パスワードを設定すると自動でログインしてくれるのですが、
設定後にroot_pathに遷移してしてしまう。

### ハマったところ
deviseには元来`after_sign_up_path_for`(登録後のリダイレクト先を変更できるメソッド)や
`after_sign_in_path_for`(ログイン後のリダイレクト先を変更できるメソッド)が存在しており、
招待メールからパスワードを設定したのちに自動でログイン状態になっているので同様のやり方でいけると思っていました。

* `after_sign_up_p

元記事を表示

【Railsチュートリアル】benchmark-ips gemで処理の実行速度を計測してみる

Railsチュートリアルの第4章に以下のような問いがあります。

>Rubyのbenchmark-ips gemを使い、ハッシュのキーを「数字」「 文字列」「シンボル」にした際のそれぞれの実行時間を測定してみましょう。
>Railsチュートリアル第4章より

4章までの復習兼ねて解いていきます。

まずbenchmark-ips gemをインストールします。
“`ruby:Gemfileへ追記
group :development, :test do
(省略)
gem ‘benchmark-ips’
end
“`
本番環境ではいらないと思うので、開発・テストのみのインストールとしました。
“`ruby:コマンド実行
$ bundle install
“`
上記コマンドだと、インストール済みのものはインストールされず追記したbenchmark-ips gemのみインストールされます。
“`ruby:実行結果

Using ansi 1.5.0 #インストール済みのgemはUsingとなっている
Fetching benchmark-i

元記事を表示

rbenvでRubyのバージョン切り替えをする方法

## 概要
以下の記事を参考に勉強を進めており、Rubyのバージョンを指定する必要があったため、rbenvでバージョン切り替えてみました。

https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/dc751838fa3715f814dd

## 方法
rbenvのインストール
“`
brew install rbenv ruby-build
“`

rbenvのインストール確認
“`
rbenv -v
“`

ruby 2.6.6のインストール
“`
rbenv install 2.6.6
“`

ruby 2.6.6のローカル使用指定
“`
rbenv local 2.6.6
“`

bash_profileを開く
“`
vi ~/.bash_profile
“`

以下を追加
“`
eval “$(rbenv init -)”
“`

設定を反映
“`
source ~/.bash_profile
“`

rubyのバージョン確認
“`
ruby -v
ruby 2.6.6p14

元記事を表示

【Rails】devise 管理者が他のユーザーの新規登録ができるようにする

# 【Rails】devise 管理者が他のユーザーの新規登録ができるようにする

### devise

deviseを使用してユーザー登録機能を実装した際に、管理者としてログインをし他のユーザーの新規登録ができるようにしたいとします。
しかし、そのままの状態で新規登録をしようとするとroot_pathにリダイレクトされてしまい新規作成画面に遷移できません。

## rails g devise:controllers users

本来deviseのコントローラーはGem内に記述されているため編集することはできません。
しかしdeviseのユーザー登録機能はregistrations_controller.rbで定義されているため、このファイルをどうにかしなくてはいけません。
そこで、このcontrollerをオーバーライドしてカスタマイズをしていきます。

まずはオーバーライドするためのファイルを作成します。
“`
$ rails g controller users/registrations
“`
これで編集するファイルapp/controllers/users/regi

元記事を表示

文字列演算子 << の意味

たまに出てくるこれ    `<<` どういう意味なのか? `<<` 演算子といい、 配列で自身の末尾に破壊的に値を追加してくれます。 下の文で確認します。 ```rb class Food @@foods = [ ] def self.input puts "料理名を入力してください" name = gets.chomp puts "カロリーを入力してください" calory = gets.to_i food = Food.new(name, calory) @@foods << food end end ``` `@@foods`に`food`の値を追加しています。 わかりやすくいうと、`@@foods`に`food`の`name`と`calory`の値を追加しているということです。

元記事を表示

【Ruby】putsの戻り値はnil

rails consoleで以下のメソッドを試したところ混乱したので、備忘録として書き留めます。

“`
$ rails c

?> def palindrome_tester(s)
?> if s == s.reverse
?> puts “palindrome”
?> else
?> puts “not palindrome”
?> end
?> end
=> :palindrome_tester

>> palindrome_tester(“racecar”)
palindrome
=> nil

>> palindrome_tester(“asdfg”)
not palindrome
=> nil
“`

上記の”=> nil”の部分が毎回出力されるのが不明だったのですが、putsは文字列を出力した後、nilを返しているだけでした。

元記事を表示

本番/開発/テスト環境の違いがわからなかったのでとてもざっくり整理した。

はじめに

RSpecが403エラー(存在はしてるけど、アクセスできないよ!)を返して、テストが実行できない事態に襲われたことがありました。

原因はDockerfileで”RAILS_ENV”に開発環境を設定していたことにより、RSpecが開発環境で実行されるように記述されていたことでした。
~~~./Dockerfile
RAILS_ENV: development
~~~

~~~.spec/rails_helper.rb
ENV[‘RAILS_ENV’] ||= ‘test’

#修正後
ENV[‘RAILS_ENV’] = ‘test’
~~~

エラーを解消することができてよかったのですが、よく目にする3つ環境(本番/開発/テスト環境)の違いがいまいちわかっておらず、解決後もピンときてなかったので、調べてみました。

備忘録として残そうと思います。

開発環境 (config/environments/development.rb)

appディレクトリ以降のファイルに変更があった時に、自動で読み込んでくれる。
例えば、controllerの記述を変更したり、vi

元記事を表示

OTHERカテゴリの最新記事