Ruby関連のことを調べてみた2021年05月14日

Ruby関連のことを調べてみた2021年05月14日

[初心者向け]SystemSpecの基本的な使い方とサポートモジュールについて

# はじめに
初めまして、takumi(@takumi73)と申します。
今回、RspecのSystemSpecについて学習したので、簡単ではありますが、基本的な使い方についてまとめていこうと思います。
内容に誤りがありましたら、ご指摘頂けると嬉しいです。

# SystemSpecでできること
従来の統合テストはFeatureSpecであり、それをより便利かつスピーディーに開発できるようにしたものがSystemSpecになる。
利点としては以下が挙げられる
・ブラウザ上で実行することがデフォルトで可能になった統合(E2E)テスト
・エラー発生時スクリーンショットで画面を確認できる

# 環境
capyrbaraとfactory_botを使用しています。
ruby 2.6.3
Rails 6.1.3.2
factory_bot 6.1.0
factory_bot_rails 6.1.0
capybara 3.35.3
# SystemSpecの基本的な使い方
※事前準備に関してはわかりやすい記事がたくさんあるので今回は省略させて戴きます。
[【Rails】はじめてのSystem

元記事を表示

Herokuを使用したデプロイの方法

### Heroku CLIをインストール
—-
下記のコマンドを実行するとherokuというコマンドが使用できるようになり、ターミナルからHerokuへアクセス可能になります。

“`
% brew tap heroku/brew && brew install heroku
“`
インストールが完了したら下記のコマンドを実行してバージョンを確認します。

“`
% heroku –version

heroku/7.40.0 darwin-x64 node-v12.16.2
“`
上記のようにバージョンが出力されれば成功です。(バージョンの値は実際と異なる場合があります。)

### Herokuにログイン

下記のコマンドを実行し、メールアドレスとパスワードを入力します。

“`
% heroku login –interactive
“`

### Heroku上にアプリケーションを作成

下記のコマンドを実行。

“`
% heroku create アプリ名
“`
下記のコマンドを実行し、正しく設定できたことを確認

“`
% gi

元記事を表示

while true do の使い方

whileの使い方

ex1.条件によって繰り返し処理を行う場合
“`ruby
while 条件式 do
処理するアクション
end
“`
ex2.プログラムを終了させず同じ処理を繰り返すループ処理を行う場合
“`ruby
while 条件式 do
処理するアクション
end
“`

問題.1
以下の仕様を満たすアプリケーションを作成してください。
仕様
プログラムの実行を行うと、
①「[0]:体重を表示する、[1]:終了する」という選択肢が表示され、数字を入力することができる
② 0を入力すると「80kg」と表示され、上記条件①が繰り返し実行される。
③ 1を入力するとアプリケーションが終了する

“`ruby
while true do
puts “[0]:体重を表示する”
puts “[1]:終了する”
input = gets.to_i
if input == 0
puts “80kg”
elsif input == 1
exit
end
end

“`

元記事を表示

草野球の出欠確認Webアプリを作ろう! part.6

これから作っていく簡単なWebアプリの作成メモ(自分の備忘)です。
自分用なのであまり凝りすぎないように書いていきたい。

[<<前回の記事](https://qiita.com/tomodachi_uec/items/2dab415fe63f91b116bf) ※前回導入していたRspecですが、なぜかchromedriverが動作しなくて原因も不明だったので、いったんTDDは凍結とします(そのままずっと凍結の可能性も...)。 ##今回やったこと ###スケジュールの編集 schedulesコントローラーのeditとupdateのアクションを整える。 ```rb:app/controllers/schedules_controller.rb def edit @schedules = Schedule.find(params[:id]) end def update @schedules = Schedule.find(params[:id]) if @schedules.update(schedules_params) redirect_to sc

元記事を表示

知らない人に勝手に出品した商品を編集させない!

##はじめに##

現在フリマアプリを作成中です。

商品の出品者ではない人が編集できるURLを直接打ち込み、編集できるという問題を解決していきます。

想像してみて下さい。
自分が30,000円で出品した商品が勝手に1,000円に編集されて売れてしまった場合…

そんな事にならないように利用して下さるユーザーが安心して使えるように記述していきましょう!

##現在のコントローラの状況##
itemテーブルには出品された商品情報が入っています。
(名前・値段・商品説明・商品状態など)
編集できる*edit*アクションと更新ができる*pdate*アクションを見ていきます。

“`.rb
def edit
@item = Item.find(params[:id])
end

def update
if @item.update(item_params)
redirect_to item_path
else
render :edit
end
“`

editアクションでは編集したいレコードを@itemに代入し、

元記事を表示

総合振込の全銀フォーマットファイルを作成する方法(Ruby)

総合振込で使用する「全銀フォーマット(全銀協規定形式)」のファイルを作成する方法を雑にまとめてました。
全銀フォーマットはどの銀行も似通っているかと思いますが、実装する際は必ず該当銀行の資料を読み込む事をお勧めします。

※ 下記は [GMOあおぞらネット銀行](https://gmo-aozora.com/support/guide/tranfer-upload.pdf) のフォーマットになります。だいぶ愚直に書いた例です。

“`ruby
File.open(“payout-example.txt”, “w”, encoding: “Shift_JIS”) { |f|
# 1. ヘッダー・レコード
h_01 = 1 # データ区分(固定値)
h_02 = 21 # 種別コード(固定値)
h_03 = 0 # コード区分(固定値)
h_04 = 9999999999 # 振込依

元記事を表示

【Ruby on Rails】郵便番号にバリデーションをかけたい!【正規表現】

## はじめに
Ruby on Railsの学習中です。携帯番号は下記の参考文献と出会えたので解決しましたが、正規表現で郵便番号にいい感じのバリデーションをかけたいと思ったのですが、なかなかベストな文献が見当たりませんでした。そこでこちらの文献を参考に郵便番号正規表現を作成しました。

#### 参考文献
https://qiita.com/shungo_m/items/14e64e1adbcdbc87ff7f

#### テストするならココ
https://rubular.com/
## 今回の理想
– 郵便番号は以下ならOKとします。
– 000-0000(数字7桁と間にハイフンが含まれる)
– 0000000(数字7ケタのみ)

## テスト環境
– Rails 5.2.5
– ruby 2.6.3

## ①正規表現を作る
#### 郵便番号の正規表現

“`
\A\d{3}[-]?\d{4}\z
“`
これで\Aから始まり\zに終わる

元記事を表示

Ruby 学習メモ

#シンボル
ハッシュ(連想配列)で使われることが多い

“`ruby
exam = {‘subject’=>’japanese’, ‘score’=>70}
“`

これを

“`ruby
exam = {:subject=>’japanese’, :score=>70}
“`

“`ruby
exam = {subject: ‘japanese’, score: 70}
“`

と記述することができる。

また取り出す時や更新するときは

“`ruby
puts exam[:subject]
“`

とする。

#キーワード引数
メソッド作成の引数指定のこと。

“`ruby
def person_info(name:, age:, hometown:)
puts “私の名前は#{name}で年齢は#{age}で出身は#{hometown}です”
end

person_info(name: “太郎”, age: 23, hometown: “東京”)
“`

#attr_accessor
クラスのインスタンス変数を読み書きできるようにする

“`ru

元記事を表示

【Rails6】新・JavaScriptによる「入力フォームの内容のリアルタイムチェック機能」の実装例

以前、[【Rails6】JavaScriptによる「入力フォームの内容のリアルタイムチェック機能」の実装例](https://qiita.com/yamaday0u/items/21fbc89aa22527a9a875)という記事で、入力フォームのリアルタイムチェック機能の実装方法を紹介しましたが、この実装方法には以下の問題がありました。

– エラーメッセージのタグを`hidden`で隠しているので、フォームの中に不自然な空白がある
– 複数のタイプのエラーメッセージを表示しようとすると空白がさらに大きくなってしまう

今回はこれを改善し、しかもパワーアップしました。
前回と同様にjQueryのようなライブラリは使用せず、そのままのJavaScriptで実装したことが今回もポイントです。

## 実行環境
Rails 6.0.3.6

## 動作確認
今回のリアルタイムチェック機能の仕様は以下の通りです。

– 入力された値によって以下のエラーメッセージが表示される
– 半角数字以外の場合→「価格は半角数字で入力してください」
– 300〜9,999,999の範囲外の

元記事を表示

学習ノート:システムテスト再入門

## この記事の内容
プロダクトの作成中、設定がいまいちだったためにシステムテストに徐々に不具合が出てくるようになった。リファクタリングをするとともに、システムテストについて今一度しっかり勉強して、ノートにまとめてみた。

対象読者は、今までコピペでテスト周りの設定をしていたけれど、それをしっかり理解しながら自分でやってみたい人。

## システムテストを構成する要素
この記事はいくつかのパートに分かれていますが、前半のこの部分は、主に[こちらの記事](https://techracho.bpsinc.jp/hachi8833/2020_08_06/95282)の内容をまとめたもの。

– [2020年のRailsでブラウザテストを「正しく」行う方法(翻訳)](https://techracho.bpsinc.jp/hachi8833/2020_08_06/95282)

システムテストには、以下の三つの要素が必要とのこと。

– `テストランナー` … RSpec, Minitest など
– `テストサーバー` … WEBrick, Puma など
– `ブラウザー` ..

元記事を表示

Capistrano自動デプロイ時に (SSHKit::Runner::ExecuteError)エラーの解決法

# はじめに

Capistrano自動デプロイ時に
(SSHKit::Runner::ExecuteError)エラーが出たのでその解決法を書いておきます。

# エラー内容
“`{lst:Terminal}
# プロジェクトのディレクトリ
$ bundle exec cap production deploy

SSHKit::Runner::ExecuteError: Exception while executing as ec2-user@ElasticIP: Authentication failed for user ec2-user@ElasticIP

Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user ec2-user@ElasticIP

Tasks: TOP => rbenv:validate
(See full trace by running task with –trace)

“`

# 原因

インスタンスを再起動したことで、
sshディレクトリに

元記事を表示

Errno::ENOSPCが表示された時

rails sでサーバーを立ち上げようとすると、Errno::ENOSPCの表示が。
![スクリーンショット 2021-05-12 22.34.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340120/c700c684-0af0-f9bf-a17d-0d9359747da2.png)

###エラー内容
まずこのエラーの内容を確認すると、「No space left on device」の文字が確認でき、これは容量不足を示しています。
こいつが起きると何も操作ができなくなってしまい、だいぶやっかいです。
この容量不足には、ディスクの容量不足とinodeの容量不足の2パターンがあります。

##解決に向けて 
※出力結果は例となります。

まずは以下コマンドにて、現在の使用容量を確認します。

“`:ターミナル
$ df

>ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 492676 0 492676 0% /de

元記事を表示

Vite Ruby で 爆速で Rails + Vue3 + TypeScript 環境を作成する!

## Introduction

みなさん、Vitejs というのはご存知でしょうか?
https://vitejs.dev/

手間のかかるフロントエンド環境の構築をまとめてやってくれる優れものです。
お好みのフレームワークと開発言語(js or ts)を選択すれば爆速で構築してくれます。

こちらの Ruby統合環境 (Vite Ruby) を作成されている方がいるようでしたので
早速試していこうと思います♪
(個人的には Rails + Vue3 環境が素早く構築できると 嬉C)

初期リリースは2021年1月のようですね。 ?
Commits on Jan 19, 2021
https://github.com/ElMassimo/vite_ruby/releases/tag/v1.0.0

## Getting Started

早速、試そうとドキュメントを漁ります。
https://vite-ruby.netlify.app/guide/

これ見た限り、既存のRailsプロジェクトにインストールするスタイルみたいですね
とりあえず、通常の Rails + Vue 構成で

元記事を表示

Rails in Docker × Rspec with Capybara × selenium_driver

## 概要

これらの記事を参考にCapybaraのテスト実行環境を `:rack_test → :selunium`へ変更致しました。(とても参考になりました。ありがとうございました!)

https://qiita.com/at-946/items/e96eaf3f91a39d180eb3

https://qiita.com/aotaro1994/items/8bfbd92c25e1fb90e588

この記事では変更点だけを羅列しますが、注意点としましては、`gem ‘rspec-rails’, ‘>= 4.0.2’`こいつだけバージョンの指定が必要である、という事です。

これは2個目の記事に参考にさせていただきました!

## 動作環境とバージョンについて

“`ruby
ruby 2.6.6
Rails 6.1.3
rspec-rails 5.0.1
selenium-webdriver 3.142.7
capybara 3.35.3
“`

## 結論

“`ruby:Gemfile
+ gem ‘rspec-rails’, ‘>= 4.0.2’
+ gem

元記事を表示

フォームからパラメータとしてコントローラーに値を送る方法

### プルダウンで選択したユーザーの情報をparamsで扱えるようにパラメーターを送ります。

“`

“`

select要素のname属性に”room[user_ids][]”を指定し、option要素のvalue属性にuser.idを指定しました。このように記述することでparamsは以下のようになります。

“`ruby
{“room” => {“user_ids” => [“選択したユーザーのid”]}}
“`

room[user_ids]という記述は値としてハッシュをさらに入れ子にすることを示しています。
room[use

元記事を表示

Railsで全ユーザーにメールを送信する

# はじめに
メールの送信機能を初めて実装したので、躓いたところや実装方法をメモとして残しておきます。
質問回答アプリで新規質問が投稿された際に、全員に対して質問があった旨をメールで通知する。

# Action Mailer
Action Mailerを使うと、アプリケーションのメイラークラスやビューでメールを送信することができる。メイラーの動作はコントローラときわめて似通っている。メイラーはActionMailer::Baseを継承し、app/mailersに配置され、app/viewsにあるビューと結び付けられる。
### Mailer作成手順
1. メイラーを作成

“`
rails g mailer QuestionMailer
“`
“`rb:app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base default from: "from@example.com" layout 'mailer' end ``` # 開発環境でメール送信を確認する方法 ## m

元記事を表示

Ruby技術者認定試験Silverに合格したので概要と勉強法などを載せておく

この度Ruby技術者認定試験Silver (正式名称:Ruby Association Certified Ruby Programmer Silver version 2.1)に合格したので勉強法を載せておきます。
この記事はSilverに特化して書いています。

# この記事の対象者

– Rubyを扱っている方
– Silverを取得するために勉強中の方
– I love Ruby:heart_eyes:な方

# はじめに

所要日数:約2ヶ月

使用した書籍:[[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書](https://gihyo.jp/book/2017/978-4-7741-9194-2)
上記書籍における正誤表は[こちら](https://gihyo.jp/book/2017/978-4-7741-9194-2/support#supportApology)を参照してください。

# 試験概要

試験概要の詳細や試験申し込み方法、Gold等については[公式HP](https://www.ruby.or.jp/ja/c

元記事を表示

attr_accessorで定義したセッターをクラス内で使う際の落とし穴

[TLDRはこちら。](#まとめ)

# attr_accessorとは

`attr_accessor` はインスタンス変数に対するゲッター・セッターを同時に定義するための便利メソッド。
例えば、以下のコードでは `@earth_shape` というインスタンス変数に対する `#earth_shape` (ゲッター) 、`#earth_shape=` (セッター) を同時に定義してくれる。

“`rb
class TopSecret
attr_accessor :earth_shape

def initialize
@earth_shape = ‘flat’
end
end

secret = TopSecret.new
# ゲッターを使って、インスタンス変数の値を得る
puts secret.earth_shape # ‘flat’ を出力
# セッターを使って、インスタンス変数の値を変える
secret.earth_shape = ‘round’
puts secret.earth_shape # ‘round’ を出力
“`

定義されるのは通常のメソ

元記事を表示

引数の種類

引数には種類があって、区別できていなかったので基本的なことを整理する。

#引数
定義における値の受け渡しの基本

“`ruby
def メソッド名(仮引数) # メソッドの定義
式…
end

メソッド名(実引数) # メソッドの呼び出し
“`
##仮引数
メソッド定義において、メソッド呼び出しで与えられた実引数を受け取る変数。
スコープはローカル変数と同じで再代入できる。
仮引数に代入を行っても呼び出し側には影響を与えない。

仮引数にデフォルト式が与えられた場合は、実引数の省略時にデフォルト値となる。

“`ruby
def foo(par = ‘hoge’) #デフォルト式(=)、値(’hoge’)
puts par
end

foo #実引数を省略した時
#=> “hoge” 
foo(bar) #実引数を明示した時
#=> “bar”
“`

##実引数
メソッド呼び出しにおいてメソッドに与えられる値。
実引数には式を与える
全ての式が評価されてからメソッドが呼び出される。

#キーワード引数
キーワードによって特定さ

元記事を表示

FeedjiraでRSSの独自タグ拡張

## FeedjiraでRSSの独自タグ拡張

feedjira gemを利用した独自タグ拡張の方法について説明します。

Feedjiraには `add_common_feed_entry_element` というメソッドがあります。
https://www.rubydoc.info/github/feedjira/feedjira/master/Feedjira/Feed#add_common_feed_entry_element-class_method

ドキュメントがなくコードを読んでも
https://github.com/feedjira/feedjira/blob/master/lib/feedjira/feed.rb#L18

だいぶ深追いしないと把握できないのでとりあえずどういう動きをするのかを説明します。

### シンプルな構造の場合(ネストしていない)

以下のような `my:tag` という独自タグが含まれるRSSがあったとします

“`

元記事を表示

OTHERカテゴリの最新記事