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

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

Docker環境のRuboCopのインストール手順と具体的な使い方

Rubocopとは

RuboCopとはRuby用のLintツールです。
設定ファイルを編集することでコーディングスタイルのチェック項目をカスタマイズできたり、RuboCop用のgemを追加することで機能の拡張ができたりします。
コードに対して行われるさまざまなチェックをRuboCopではCopと呼びます。

環境

Docker 20.10.6
ruby 3.0.2
rails 6.1.4

Railsプロジェクトにrubocopを導入する手順

####Gemのインストール

`rubocop`をGemfileに追加します。また、Railsアプリケーションでrubocopを利用する際によく導入されている`rubocop-performance`、`rubocop-rails`、`rubocop-rspec`もあわせて追加します。

“`ruby:Gemfile
group :development do
gem ‘rubocop’, require: false
gem “rubocop-performance”, require: false
ge

元記事を表示

The `development` database is not configured for the `development` environment.の解決法

HerokuにpushしてからHeroku openした時に出てきたエラーです。

エラー

“`
The `development` database is not configured for the `development` environment.
“`

原因

database.ymlのインデントが間違えているから

解決

“`ruby:database.yml
# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem ‘mysql2’
#
# And be sure to use new-style password hashing:
# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &d

元記事を表示

一歩ずつ理解する特異メソッドと特異クラス

Effective Rubyの第2章 「クラス、オブジェクト、モジュール」の項目6「Rubyが継承階層をどのように組み立てるかを頭に入れよう」を読んでいて、Rubyの階層構造や特異メソッド、特異クラスについて理解があやふやなところがあったので調査しました。
自分自身、どこまで理解できているのかが曖昧だったので、一歩一歩丁寧に説明していきたいと思います。

https://www.shoeisha.co.jp/book/detail/9784798139821

## 対象読者

特異メソッド、特異クラス、クラスメソッドについて、それぞれの定義自体は知っていて、普段問題なく使えているけれど、以下のような問いかけに対して詳しく説明できないなという方。

– 特異メソッドってどんなメソッド?
– クラスメソッドは特異メソッドの一種とはどういうことか
– クラスメソッドはどのクラスに定義されているか
– 特異クラスの親クラスは?
– Object#extend で特異メソッドの定義をしたときの継承階層は?

## 特異メソッドってどんなメソッド?

まずは特異メソッドの理解を深めるために、以下

元記事を表示

Rails on ECS Fargateでタスクロールを使ってS3にアクセスする

# 背景

FargateコンテナからS3バケットにアクセスしたかったのだが、アクセスキーをコンテナに入れるのはアンチパターン的な話を聞いていたので、AWSオススメ的にECSのタスクロールを使ってアクセスできるように構成したかった。
しかしActiveStorageの本家サイトを見ても、アクセスキーを設定する方法しか紹介されておらず、いろいろ調べたのだがドンピシャの情報が見つからず、ドハマリしたので防備録を書く。

## 通常

`config/storage.yml`に以下のように書くようになっている。

“`config/storage.yml
amazon:
service: S3
access_key_id: “”
secret_access_key: “”
region: “”
bucket: “”
“`

`access_key_id` `secret_access_key`を省略すれば勝手にタスクロールを利用してつながってくれると思い、以下のように設定した。

“`config/storage.yml
amazon:
service: S3

元記事を表示

Railsでポートフォリオ作成 設計編 ①

#開発工程
おおざっぱに開発の各工程の流れをこんな感じにします。

要件定義

設計(画面設計、DB設計)

実装

herokuにデプロイ

dockerとAWSを導入

AWSにデプロイ

実装完了

次に開発するアプリケーションの仕様を決めていきます。

#要件定義

【サイト名】
フーデリオンライン

【コンセプト】
フードデリバリー配達員の情報交換や交流を目的としたサービス

【サービスの開発に至るまでの背景】
私自身、2社フードデリバリーで働いていた経験があり、出来高制ということもあり、注文が来なくて稼げない時期がありました。
一般的な会社だったら上司に仕事のコツを教えてもらえたりすると思いますが、完全個人のこの仕事では基本的には自分でコツを見つけていくしかありません。
そんな中で、配達員同士がもっと気軽に情報交換ができるサービスがあったらいいなと考え、このサービスを開発することにしました。

【言語・フレームワーク】
・Ruby / RubyonRails 6

【開発環境】
ローカル

【機能一覧】
・ユーザー登録機能
・ユーザーログイン機能
・投稿機能

元記事を表示

トランスパイラで学ぶRuby

# はじめに
以前におバカな投稿をしたことがあります。
*[Ruby と Crystal で解く AtCoder ABC 129 D](https://qiita.com/superrino130/items/ad53e6a36cee2a3efe0c)*

今回は、ちょっとだけマジメです。
# Py2Ruby
`Ruby`で競技プログラミングをやっていて困るのが、Qiitaをはじめ投稿が少なく参考できないことです。

でももう安心。
素敵なサイトがあります。
*[Py2Ruby](https://www.py2ruby.com/)*
*[Py2Ruby: Convert Python Code to Ruby Instantly! — youtube](https://www.youtube.com/watch?v=DXiKAEBdDBg)*
# やってみた
参考にさせてもらっている @u2dayo さんの解答をお借ります。
*[【AtCoder解説】PythonでABC225のA,B,C,D問題を制する!](https://qiita.com/u2dayo/items/bf500b

元記事を表示

scaffold で出来るよくわからんコード

今まで見て見ぬふりしてきたけど
scaffold で出来るコントローラー内のよくわからないコードに
真剣に向き合ってみた

“`
status: :unprocessable_entity
“`

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/422

文法は正しいからエラーがださない。ただ失敗したという意味

“`
status: :created, location: @blog
“`

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/201

新しくデータベースに追加した(リソースを作成した)
内容は `location` にいれておく
という意味

“`
head :no_content
“`
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/204

処理は成功したけど特に返す情報はないという意味

“`
head
“`
これは HTTPリクエストではなく `render` と

元記事を表示

レイアウトテンプレートについて!

#①.結論!

アプリケーションのビューファイルの共通部分をまとめたものです!

レイアウトテンプレートに、headの情報やヘッダー、フッターなどのすべてのビューで共通となる部分を記述しておくことで、各テンプレートファイルは個別の見た目を記述するだけでよくなります!

Railsの場合、application.html.erbというファイルがレイアウトテンプレートとなります!

#②. yieldメソッド

“`php:例】app/views/layouts/application.html.erb



TestLesson
<%= csrf_meta_tags %>
<%= csp_meta_tag %>

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'applicatio

元記事を表示

where メソッドに配列を渡すとインスタンスを配列で返してくれる

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

## 本題

`where` メソッドは `each` とか使わなくても
配列を入れたら
中の要素をすべて処理してくれる

“`
@searching_task_id = Combination.where(label_id: params[:task][:label_name].to_i).pluck(:task_id)
“`
“`
@irb(#):002:0> @searching_task_id
=> [2333, 2334, 2335]
“`
上のように配列の入った変数を利用して
データベースから
レコードを引っ張るためには

“`
@tasks = Task.where(id: @searching_task_id)
“`
“`
@tasks
=> #

元記事を表示

コールバックの際に使う self について

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

## 前提
ユーザーの認証機能をつけているアプリ
ユーザーに boolean 型で admin というカラムをつけ、admin が true のユーザーを管理者としている

## 本題

管理権限を持ったユーザーがが0人にならないようにする
バリデーションの機能実装

“`
class User < ApplicationRecord before_destroy :admin_exist_check before_update :admin_update_exist has_many :tasks, dependent: :destroy # 中略 def admin_exist_check if User.where(admin: true).count <= 1 && self.admin == true (←ここ) throw(:abort) end end def admin_update_exist if User.whe

元記事を表示

Rspecインストールの手順

環境

MacOS Big Sur11.5.2
ruby 3.0.2
rails 6.1.4
docker 20.10.6

Gemのインストール

まずは Gemfile に`rspec-rails`と`rspec_junit_formatter`を追加します。
本番環境では RSpec を使わないので、開発とテスト環境にのみ gem をインストールさせます。

“`ruby:Gemfile
group :development, :test do

gem ‘rspec-rails’ # 追加
gem ‘rspec_junit_formatter’ # 追加

end
“`

そしてdocker-compose run web bundle installとdocker-compose buildをします。

Rspecの基本設定

以下のコマンドでRspecをインストールします。

“`
$ docker-compose run web rails g rspec:install
“`
Rspecの実行

この段階ではまだ何もテストは書

元記事を表示

Could not find a JavaScript runtimeの解決法

環境

MacOS BigSur 11.5.2
docker 20.10.6
ruby 3.0.2
rails 6.1.4

エラー

CircleCIでbuild中database setupにて引っかかりました

“`
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
“`
試したこと

①https://github.com/rails/execjs にアクセスし、`$ gem install execjs`を実行
②node.jsは元々入っていたがアンインストール、再度インストール
③Gemfileに`therubyracer`と`execjs`を追加、docker-compose run web bundle installまたはdocker-compose build

複数の記事を調べ以上3つを試すもエラーは消えず。

解決法

元記事を表示

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

#はじめに
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章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)
– [第8章](https://qiita.com/supyolo888/items/508caaa40edf307093ed)
– 第9章(本記事)

#Minitest

###2番目のウィンドウでユーザーをログアウトするテスト

“`rb:tes

元記事を表示

where メソッドで複数のカラムから同時に検索する方法

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

## 本題
複数のカラムの情報まとめてあいまい検索したかったら

“`
Task.where(“content LIKE ? or title LIKE ?”, “%#{params[:task][:search]}%”, “%#{params[:task][:search]}%”)
“`

こんな感じで2つのカラムと2つの条件式をいれることで
まとめて検索できる。

SQL のプレースホルダーが ActiveRecord の where メソッドでも使える

それぞれの?の数と引数の数が一致しないとだめみたいなので、
条件が同じなら上みたいにする

参考にした記事

https://rowingfan.hatenablog.jp/entry/2018/04/28/010000

元記事を表示

rspec date_field の値のテストが出来ない

rspec のテストのとき date_field のフォームうまくテストできなかった

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5
rspec-rails (5.0.2)

## 本題

“`:rspecのスクリプト
fill_in “task[deadline]”, with: “2019-11-11”
expect(page).to have_content “2019-11-11”
“`

日付の入力欄に `date_field` を使っている箇所があるんだけど
そこのテストが上のコードでは上手くが出来ない

細かく見てみると

“`
“2019-11-11”
“`
と入力している部分がエラー時には

“`
201911-11-
“`
と入力されてしまっている

調べたら

https://teratail.com/questions/301872

上の記事で同じような質問があった

再度

“`
fill_in “task[deadline]”, with: “002019-11-11”
“`
と書き直す

確認の項目も

元記事を表示

ロールバックが出来ないパターン

カラムの型を変更した

その後ロールバックしたらなぜかできなかったので

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

## 本題
“`
t.string :name, null: false
“`

上のようなカラムの型を変えようと思い

“`:マイグレーションファイルを作成
def change
change_column :tasks, :name, :text, (←変更点) null: false
end
“`
上記のようにマイグレーションファイルを作成
そして `rails db:migrate`

その後 `rollback` してみるとエラーが発生

“`
== 20210601072158 ChangeStyleNameColumn: reverting ============================
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

元記事を表示

kaminari まとめ

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

https://github.com/kaminari/kaminari

## 使い方
・`gem ‘kaminari’ ` で `bundle install`

・`page(params[:page]).per(10)` が使える
 `インスタンス = クラス.page(params[:page]).per(10)` とすると
 10件のデータがインスタンスに入る
 `params[:page]`については後述

・一覧表示の下に `<%= paginate @tasks %>` を入力して準備完了
 一覧表示の下に `First Previous 1 2 3 Next Last` というリンクが出現する

・それぞれがリンクになっている
 例えば2のリンクを押すとURLに `?page=2` というクエリパラメーターが送られる

・`params[:page]` はURLのクエリパラメーターの数字を引っ張るので
 リンクを押す度に `page(params[:page]).per(10)` の

元記事を表示

link_to メソッドで destroy アクションをルーティングする

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

## 方法

通常だと link_to メソッドは GET メソッドでルーティングしてまうので

“`

<%= link_to "削除", "/blogs/#{blog.id}", method: "DELETE" %>

“`
こんな感じで第3引数にメソッドを指定すればオッケー

また、 resources でルーティングした際に 
rails routes でルーティングを確認すると

“`

Prefix Verb URI Pattern Controller#Action
blogs GET /blogs(.:format)

元記事を表示

Basic 認証まとめ

Basic 認証の設定方法と自分なりの注意点を
## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5
MacOS

## 設定方法

大きく2種類のメソッドがありそう

#### 1, authenticate_or_request_with_http_basic メソッド

“`

class HogeController < ApplicationController before_action :basic_authenticate def basic_authenticate authenticate_or_request_with_http_basic do |name, password| name == ENV['BASIC_AUTH_NAME'] && password == ENV['BASIC_AUTH_PASSWORD'] end end end ``` #### 2. http_basic_authenticate_with メソッド ``` class Applicati

元記事を表示

MiniMagick での画像のリサイズとサムネイル 

アップロード時に画像のリサイズとサムネイルの作成をする

参考にした記事は以下

https://twinbird-htn.hatenablog.com/entry/2018/05/25/231550

## 開発環境
ruby 2.6.5
Ruby on Rails 5.2.5

## 前提
minimagic がインストールされている
carrierwave を導入している

## リサイズ

“`:uploadrs/image_uploader.rb
# include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
“`
コメントにされている上記の

“`
include CarrierWave::MiniMagick
“`
をコメント解除
その後

“`:uploadrs/image_uploader.rb
process resize_to_fit: [200, 200]
“`

このワンラ

元記事を表示

OTHERカテゴリの最新記事