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

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

動的メソッドの解説

メタプログラミングRuby3章を読んでそれをまとめてみようとおもいます。

タイトルにある動的メソッドとは何なのでしょうか?

## 動的にメソッドを呼び出す
Rubyではメソッドを呼びだすときはドットを使って呼び出しています。
“`array.count“`のようにオブジェクトにたいしてメソッドを呼び出しています。
そのほかにsendメソッドを使う方法もあります。以下のような使い方をします
“`
class Example
def ex_method(arg)
arg * 3
end
end

obj = Example.new
obj.ex_method(30) #=> 90
obj.send(:ex_method, 30) #=> 90
“`
同じex_methodを呼び出してはいますが、コードを実行する際に呼び出すメソッドを決められるのがsendメソッドのポイントです。
このように、コードの実行時に呼び出すメソッドを決められることを**動的ディスパッチ**といいます。

このようにメソッドを動的に呼び出すことができることを紹介しましたが、メソッドを動的に

元記事を表示

駆け出しエンジニアのCI改善 (その1 seed.rbの作成)

## 自己紹介: 駆け出しエンジニア
はじめまして。
私はRailsで自社サービスの開発を行っている駆け出しエンジニアです。
2020年11月|エンジニアとしての学習を開始
—|—
**2021年5月**|**エンジニアへ転職**
**2022年3月**|**現在**(10ヶ月目)

現在、自動テスト作成の業務に取り組んでいます。
取り組んだことや気づいたことについて少しずつ記載して行きたいと思います。

### 実行環境: Ruby3.0 & Rails6.0
Ruby|3.0.3
—|—
**Rails**|**6.0.4.6**

## 目標: GithubActionsでテストを並列実行する

3つのステップに分けて進めて行きます。
1. テスト用DB作成の為にseed.rbを作成する **← 今回の記事**
1. GithubActionsで自動テストを作成する
1. 自動テスト実行時にテストカバレッジの測定をする
1. GithubActionsのテストを並列で実行したい (目標)

ということで、今回は1の **テスト用のDB作成の為にseed.rbを作成

元記事を表示

Rails6でBootstrapを使う

## はじめに
構築で少し迷ったので備忘録
Rails6にbootstrap 5系と4系それぞれの導入方法を記載します。

## 環境
M1 Mac
VScode
ruby 3.1.0
rails 6.0.4.7

## 注意点
bootstrapのversion違いで動かないケースがある
5系と4系ではsetupの仕方が若干違うので、installするversionに合わせて構築する必要がある。

エラーが出力されずbootstrapが動かない原因の多くは、bootstrapのversionと設定が噛み合っていないから

installしたのは5系だが、4系を前提とした設定をしているなど

## bootstrap version 5系
5系は`jquery`が必要なくなりました

## terminalで下記を実行
“`shell
# 2022.03/10 時点では5系のbootstrapがinstallされる
# versionの指定は記事下部を参照
$ yarn add bootstrap@next
$ yarn add @popperjs/core
“`

“`she

元記事を表示

rails consoleでメソッドの一覧や定義場所を確認する

# はじめに
Railsでコードを書いているときにメソッドの有無や定義場所を調べたい!となることがあったので、方法をまとめておきます。

# メソッドの一覧を確認する
メソッドの一覧は`methods`メソッドで確認できます。
使用可能なメソッドがシンボルの配列として返ってきます。

“`irb
[1] pry(main)> user = UserController.new()
=> #
[2] pry(main)> user.methods
=> [:index,
:show,
:create,
:update,
# ~省略~
“`

# メソッドの定義場所を確認する
`method`メソッドと`Metho#source_location`メソッドで確認できます。
0番目の要素に定義ファイルの絶対パスが、1番目に行数が入った配列が返ってきます。

“`irb
[3] pry(main)> user.method(:index).source_location
=> [“/home/user/workspa

元記事を表示

Rails gem postgresqlをインストールできない時の対処法。

## はじめに
Railsを使用して開発した、アプリケーションをherokuにデプロイする際、本番環境用のデータベースとして、PostgreSQLを設定する必要があったのですが、その時に少しハマったので、解決策をここに記録しておきます。

## PostgreSQLの導入
heroku上のデプロイする際、RailsのデフォルトデータベースのSQliteは使用することができないので、本番環境用のデータベースとして、PostgreSQLを導入します。

まず、開発環境では、sqliteを使用し、本番環境では、PostgreSQLを使用する設定をGemfileに記述します。
~~~ruby:Gemfile
# Use sqlite3 as the database for Active Record
gem ‘sqlite3’, ‘~> 1.4’, group: :development
gem ‘pg’, ‘~> 1.3’, ‘>= 1.3.3’, group: :production
~~~

次に、gemfileに記述した内容ターミナルでをインストールします。
~~~teminal:t

元記事を表示

Rubyでargvを使う方法

## argvとは
“argv“とは、argument vectorの略で「引数の配列」を意味する。
コマンドライン(ターミナル)からスクリプトを実行する時に、スクリプトに引数を渡すために利用する。

“argv“は、コマンドライン引数を取得するための仕組みとしてRubyだけではなくて、使い方はそれぞれの言語で違うが、C言語やPython、その他様々な言語にも存在する。

## argvの使い方
“ruby“では、“ARGV“という配列オブジェクトから、Rubyスクリプト実行時に渡された引数が参照できる。
スクリプト実行時に以下のように引数を渡すことで使用できる。
“`
$ ruby スクリプトファイル名 1番目の引数 2番目の引数 3番目の引数…
“`
この場合は、“ARGV[0]“には1番目の引数が、“ARGV[2]“には3番目の引数が設定されている。

## 実際の使用例
以下のようなファイルがあったとする。

“`hoge.rb
p “Hello, #{ARGV[0]}”
“`
この「hoge.rb」に引数を渡して実行してみる。
“`.ター

元記事を表示

bundle execとbinstubを理解する

# はじめに

[Everyday Rails](https://leanpub.com/everydayrailsrspec-jp)でRSpecの学習をしていたところ、以下のようなコマンドと説明が出てきました。

“`shell
bundle exec rspec
“`

> Rails アプリケーションは Bundler の使用が必須であるため、RSpec を実行する際は bundle exec rspec のように毎回 bundle exec を付ける必要があります。
> binstub を作成すると bin/rspec のように少しタイプ量を減らすことができます。

– Railsはbundlerを使うため、`bunle exec`が必要。
– binstubによってショートカットを作成できる。

ということはわかったのですが、もう少し詳しく知りたくなったので調べてみました。

## ざっくり結論

– `bundle exec`は、現在のプロジェクトのコンテキストでコマンドを実行するために必要。
– プロジェクトのコンテキスト = `gemfile.lock`に基

元記事を表示

【Ruby】基礎メソッド

## length/size
“Ruby“で“length“は「文字列の長さ」と「配列の長さ(配列の要素の数)」を 調べるためのメソッド。

**「文字列の長さ」を調べる際のlenght/size**

“`rb
str = ‘あいうえお’
str.length
=> 5
“`

**「配列の長さ」を調べる際のlenght/size**

“`rb
data = [1,2,3,4,5,6,7,8,9]
data.size
=> 9
“`

## rand
ランダムで数値を生成してくれる。
引数に“100“を渡すと、“0~99“までのランダムな整数値を返す。
rand(1..99)と範囲を指定することも可能。この場合、“1~99“までのランダムな整数値を返す。
“`rb
puts rand(100)
=> 56

puts rand(1..99)
=> 78
“`

## even?/odd?
偶数・奇数の判定をしてくれる。
“evev“が偶数、“odd“が奇数。それぞれの判定があっていた場合、“true“が返却れる。
“`rb
puts 1

元記事を表示

Ruby脳のためのRustの配列的なやつの主なメソッド

| Ruby | Rust |

元記事を表示

ええ!?Getting Started with Rails(7)で詰まるなんてあっていいんですか!?

# -1: これは何?
公式チュートリアル[Getting Started with Rails v7.0.2.3](https://guides.rubyonrails.org/getting_started.html)を進める上で詰まったこと備忘録(進行形).
# 0: 環境について
* WSL2
* VSCode
* Docker
* Ruby 3.1.1p18(2022-02-18 revision 53f5fc4236)
* Rails 7.0.2.2
DockerイメージはDocker公式のクイックスタート[Quickstart: Compose and Rails](https://docs.docker.com/samples/rails/)とZennの記事[Ruby 3.1 と Rails 7 のプロジェクトを Docker内で作成してみる](https://zenn.dev/nakazawaken1/articles/0f5515cde2ddf3)を参考に構築した.

# 1: Failed to save ‘index.html.erb’うんたらかんたら
## 詳

元記事を表示

Rspecよく分からーんとお悩みのそこのあなたへ

## はじめに

チームで開発している時にメンバーから
「Rspecよく分からーん」
という悩みの声があがりました。
確かに僕が初めてRspecに触れた時にも同じような感想を抱いた覚えたありました。
Rspecが何故分かりにくいのか説明し、じゃあどうしたら分かるようになるか?を解説していきます!

## 環境

今回の例をテストできる環境を用意しましたので手元で実際に試しながらやると理解が捗ると思います。
[GitHubはこちら](https://github.com/yamamoto-hiroya/rspec_practice.git)
[DockerHubはこちら](https://hub.docker.com/r/hiroyayamamoto/rspec_practice)

### 実行手順

githubのREADMEに記載の通りです。

“`bash
git clone https://github.com/yamamoto-hiroya/rspec_practice.git
cd rspec_practice/
docker-compose up -d
docker e

元記事を表示

error Command “webpack” not found.

## Railsチュートリアル
### 経緯
Railsチュートリアルを進めている中で、herokuへのPushができなくなりました。
ログを確認してみると以下のErrorが発生していました。

### Error内容※一部抜粋
“`
.
.
.
Compiling…
Compilation failed:
error Command “webpack” not found.
“`
### 結論
以下のコマンドを実行すると解決します。
`$ rails webpacker:install`
`$ bundle install –without production`
`$ bundle update`
`$ git add -A`
`$ git commit -m “Install webpacker”`
`$ git push origin master`
`$ git push heroku master`
### エラーの理由
webpakerがインストールされていないことが原因だったようです。
この他にもブランチ名がheroku側と一致していない場合もあるみたいなので、

元記事を表示

Precompiling assets failed. Herokuデプロイエラー解決法

## エラー内容

いつも通り“`git push heroku main“`でデプロイしようとしたら、“`Precompiling assets failed.“`なるエラーが発生?

## 開発環境
Rails6系
Ruby3系
Herokuデプロイ済

## 結論
“`manifest.js“`の“`//= link_tree“`で指定していたディレクトリが空だったので、そこにファイルを入れたらエラー解消しました!!!

## 解決に至るまで

その1
“`Precompiling assets failed.“`エラーが発生

その2
“`terminal:terminal
% heroku logs –tail
“`
でエラー詳細を確認→「Herokuのダッシュボードのログを見よ!」とのログとリンクを発見

その3

元記事を表示

Array と Parameters の `select!` について

# `Array#select!` と `Parameters#select!` の返り値が違う

– `Array` の方は,ブロックの返り値の全部が `true` を返した場合に `nil`を返している
– 変化が無いので `self` を返さないとのこと
– `ActionController::Parameters` の方は,最後に `self` を強制的に返すようになっている

普通はひっかからないと思うけど,これに依存したコードを書くのは良くなさそうなので,一応記す.
→ `select!` を使わないだろう.の意

## Refs

– https://docs.ruby-lang.org/ja/latest/class/Array.html#I_FILTER–21

“`ruby
a = %w{ a b c d e f }
a.select! {|v| v =~ /[a-z]/ } # => nil
a # => [“a”, “b”, “c”, “d”, “e”, “f”]
“`

– https://apidock.com/rails/v6.1.3.

元記事を表示

[Rails]すでにあるテーブルのカラムにバリデーションを設定したい

モデル設計時にテーブルのカラムにNotNULL制約を付け加えるのを忘れてしまった。。。
そんな時にテーブルのカラムに後からバリデーションを付与する方法を紹介します!

### 環境
・macOS
・Rails 5.2.6.3
・ruby 2.5.1

## 既にあるテーブルのカラムにバリデーションを追加する手順

1、新規マイグレーションファイルを作成
2、マイグレーションファイルに追加したいバリデーションを記入
3、rails db:migrateを実行

それでは実践に入っていきます。

### 実践
私はusersテーブルのnameカラム・emailカラム・passwordカラムにNOTNULL制約を付け加えるのを忘れたので付け加えていきます。上記の3つの手順に従って、

##### 1、新規マイグレーションファイルを作成する
“`ruby
rails g migration change_user_validation
“`
これでマイグレーションファイルの作成が完了。

##### 2、マイグレーションファイルに追加したいバリデーションを記入する

“`ruby
cla

元記事を表示

Ruby 問題 if,else ポイント付与サービス

# はじめに
1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
今回は if,elseを使って簡単なポイント付与サービスを実装します。
※Ruby2.6.5の環境を使用し学習しています。

# 問題
トレーディングカードショップで商品を購入するとポイントが付与されます。
以下条件によってポイント付与率が変わります。
– 購入金額が9999円以下の場合、1%のポイント
– 購入金額が10000円以上の場合、2%のポイント
このように付与されるポイントを出力するメソッドを作ります。

また、購入者が誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに.floorメソッドを使って切り捨てます。
“`Ruby:例
calculate_points(500, false) → 5ポイント付与されました。
“`

# 実装例
まずは購入金額が9999円以下の場合、1%のポイント、購入金額が10000円以上

元記事を表示

本日のRuby基礎練習問題(22/3/10)

# 本日のRuby基礎練習問題(22/3/10)

**問題**
ECサイトのポイント付与サービスを考えます。
購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント
このように付与されるポイントを出力するメソッドを作りましょう。

ただし誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てましょう。

呼び出し方:
calculate_points(amount, is_birthday)

出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイントは100点です
calculate_points(3000, true) → ポイントは750点です

# 私の回答
“`qiita.erb
def calculate_points(amount, is_birthday)
if amount <= 999 p

元記事を表示

psych::badalias: unknown alias: defaultで Railsコマンドが使えないを解決

## はじめに
Rails6の環境を構築している際に発生したエラーに対処していきます。

## 環境
M1 Mac
VS code
Ruby 3.1.0
bundler 2.3.3

## エラーメッセージ
`psych::badalias: unknown alias: default`

## 発生した理由
psychというYAML解釈用のGemの4系と3系で解釈が変わっているのが原因です。
こういったversionの違いで起きるエラーは大変ですね。

## 解決方法
3系を使うように指示を出します。

`gemfileに下記を追加`
“`rb
gem ‘psych’, ‘~> 3.1’
“`

保存して`bundle install`を実行
出来なければ `bundle update`を実行

## 追記項目
@scivola さんから情報をいただきました。
ありがとうございます。
こちらは `rails 6.1.4` 以降で解決されているようです。
6系を使う際はそれ以上の`version`を使うと良いで!!

## おわりに
個人的な話ですが、Ruby on Rails

元記事を表示

Rails mimemagic問題でRails new . できないを解決

## はじめに
Rails 6系の環境を用意している際に`mimemagic`問題に遭遇した

## 環境
M1 Mac
VS code
Ruby 3.1.0
bundler 2.3.3

## エラーコード
“`rb
Ensure you have either installed the shared-mime-info package for your distribution, or
obtain a version of freedesktop.org.xml and set FREEDESKTOP_MIME_TYPES_PATH to the location
of that file.

This gem might be installed as a dependency of some bigger package, such as rails,
activestorage,
axlsx or cucumber. While most of these packages use the functionality of this gem, some gems
h

元記事を表示

フロントエンドとサーバーサイドをワンコマンドで起動させる方法

どうも**2年目**に突入した**ひよっこエンジニア**のへっぽこです。
もちろんQiitaはもっぱら見る専。アウトプット?なにそれ美味しいの?って感じで生きてきました。

ところが今年から会社の命令で月1本記事を上げないといけなくなりました。
~~ホント迷惑な話だ。~~
ということで、渋々僕の浅はかな知識をアウトプットします。

ちなみに余談ですが、普段は個人でブログ運営してます(プログラミング全く関係なし)。
ポケモンの記事とか**超炎上**してるんで、気になる人は見てってね。

https://heppoko-neet.com/

## フロントエンドとサーバーサイドをワンコマンドで起動させる方法

今回はRailsとReactを例とします。
コマンド部分を変えれば他の言語でも同時で起動できると思いますのでお試しください。

まずhomeディレクトリーへいきます。
“`
cd
“`

次に
“`
touch rails_react_run.sh
“`
でスクリプトファイルを作成します。

viコマンドでスクリプトファイルを編集します。
“`
vi rails_react

元記事を表示

OTHERカテゴリの最新記事