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

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

Ruby、Railsのコーディング規則まとめ

#はじめに
企業や組織が公表しているRuby、Railsのコーディング規約をまとめました。チーム開発のように既にコーディング規約が定まっているのではなく、個人で開発している方は自分の好みの規約を導入してみてはいかがでしょうか?

![rails.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764771/4659b6e3-d675-1bb5-9eb0-417521fda010.jpeg)

#企業

#Cookpad

https://github.com/cookpad/styleguide/blob/master/ruby.ja.md

#Shopify

https://ruby-style-guide.shopify.dev/

#Airbnb

https://github.com/airbnb/ruby

https://qiita.com/tomoharutt/items/51254ae5dafba645dc6d

#Rubyの組織など

#Rubyスタイルガイド

https://g

元記事を表示

サクッとRailsの開発環境をDockerで構築してみる

## 環境

– macOS Catalina 10.15.6
– Docker 20.10.10
– docker-compose 2.1.1

## DockerでRailsの開発環境を構築する

公式ドキュメントを参考にDockerでRailsの開発環境を構築する。
[Quickstart: Compose and Rails](https://docs.docker.com/samples/rails/)

### ファイルを作成する

以下のファイルを作成する。

“`bash
$ mkdir hello_app/
hello_app$ cd hello_app
hello_app$ touch Dockerfile
hello_app$ touch docker-compose.yml
hello_app$ touch Gemfile
hello_app$ touch Gemfile.lock
“`

“`docker:Dockerfile
# syntax=docker/dockerfile:1
FROM ruby:2.5
RUN apt-get update -q

元記事を表示

sassc のインストールがおそすぎる

前々から思ってたけど `bundle install` のとき `sassc` のインストールがおそすぎる

そのせい `Docker` のイメージを作る際に タイムアウトエラーみたいになるのが頻発。

腹が立ったので調べた

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`
`bundler 2.2.24`

https://qiita.com/croquette0212/items/d2f48f30c3ed7dcd0e3c

どうやら環境の問題ではなくこの `gem` が悪いらしい

上の記事を参考にさせていただいて

“`
gem ‘sassc’, ‘2.1.0’
“`

`sassc` のインストールと 2.1.0 というバージョンを明示してやると解決

元記事を表示

rSpec 複数のセレクターを所得して配列みたいに指定する

## 前提
`rSpec` を使ってテストを書いている

## 本題

複数の同じクラスがあってその特定の要素を使用したいとき

“`
find(“.class”)[0]
“`

みたいな書き方はできない

`find` メソッドは一意な要素しか所得しない

上みたいの書き方をしたかったら

“`
page.all(“.class”)[0]
“`

みたいにする

元記事を表示

kaminari のメソッドのレシーバーが配列のときどうするか

[![Image from Gyazo](https://i.gyazo.com/e846e13b8ee9d3c57c91b2345395b4bf.png)](https://gyazo.com/e846e13b8ee9d3c57c91b2345395b4bf)

上の画像では右側のユーザーが `current_user` なんだけど
自身のアカウントは検索画面で表示されないようにしたかった

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

## 前提
`user` の認証機能があるアプリ
`slim` を使って書いている
`kaminari` のページネーションで `user` の一覧を表示している
検索機能を実装している

## next メソッド

まず考えたのは `next` メソッド

“`:user_html.slim
– @users.each do |user|
– if user == current_user
= next
“`
こんなかんじで繰り返し処理のなかで `current_user`

元記事を表示

【初心者向け】Rubyインストール時の注意点

###環境
・Windows10(64bit)
・Ruby2.6~3.0
・Windowsファイアウォール:無効
###Rubyインストール時の注意点
インストーラとしては、以下のように「Ruby+Devkit (バージョン) (x64)」を使用することが多いと思います。
その場合、Ruby本体とMSYS2が連続してインストールされます。

https://prog-8.com/docs/ruby-env-win

インストーラをダウンロードできたら、実行する前にセキュリティソフトを一時停止した方が無難です。
Avastの場合、`C:\Ruby(バージョンの数値)-x64\msys64\usr\bin`の以下ファイルが脅威と判定されました。
・gpg.exe
・gpg-agent.exe
・gpg-connect-agent.exe

:::note warn
一連のインストール完了後は元に戻すことをお忘れなく。
:::

###MSYS2インストール時の注意点
MSYS2インストール関連でエラーが出た場合、放置せずMSYS2の再インストールを行いましょう。
表示されるエラーを1つずつ

元記事を表示

rSpec all メソッドより page.all メソッドのほうがいい気がする

`ajax` な動作をテストしようとしたとき

“`
all(“input”)[0].set(“title1”
click_on ‘レビューを投稿する’
“`

みたいなテストを書いた。

このテストがとおったりとおらなかったり

適当に `speep` メソッドを散りばめても同じだった

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

## 前提
`rSpec` が導入されている
レビューを投稿するというボタンをクリックすると `ajax` でデータが反映される

## 結論

以下みたいにしたらうまくいくようになった

“`
page.all(“input”)[0].set(“title1”)
click_on ‘レビューを投稿する’
“`

`all` に `page` をつけてやる

推測なんだけど、`all` だけだと範囲がひろすぎて `set` メソッドの処理が追いついてないのかも
それならメソッド内での処理の話だから `sleep` メソッドをいれても関係なかったのもわかる

元記事を表示

rspec 画像が投稿できることをテストする 

`rSpec` で画像が投稿できることをテストする

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

## 前提
`rSpec` が導入されていること
`test.jpg` がテスト用の画像

## 画像のテスト方法

① テスト用の画像を用意する
② テスト中にその画像をセットする
③ セットした画像のセレクターをテスト

https://study-diary.hatenadiary.jp/entry/2020/10/16/133144

こんへん参考にしながら

自分の場合は

[![Image from Gyazo](https://i.gyazo.com/3372aa5432a4ddd3ba34a052601e109a.png)](
://gyazo.com/3372aa5432a4ddd3ba34a052601e109a)

こんな画像でテスト

コードは

“`
attach_file ‘inputFile’, “#{Rails.root}/spec/factories/test.jpg”, make_visible: true

元記事を表示

ActiveStorageでアップロードしたファイルをsidekiqで遅延少なく処理する(sidekiqのコードリーディング)

## やりたいこと(背景)
フロントエンドからファイルをActiveStorageでアップロードし、そのファイルを利用した処理を行う必要がある。
該当のファイルへの処理は数秒かかるためweb apiはすぐに返し、該当の処理を非同期実行することにした。
該当処理のOK / NGの結果に応じてユーザーに再度アップロード要求する必要があり、ユーザーには解析中という表示で待たせている。(処理に時間がかかりすぎた時の対応は別途検討してますが今回は省略)
サーバー処理が終わったらActionCableを利用してフロントに判定結果を返す。

![ファイルアップロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280595/bfe20204-3c54-c8f5-0ee2-7b85a44b58a0.png)

![解析job.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280595/5e11f891-f19b-8de0-33d

元記事を表示

Ruby 「unterminated string meets end of file」とエラーが出たら?

Rubyで 「unterminated string meets end of file」 エラーが表示されたら
「””」 でできちんと囲めという意味を表します。

たとえば
“`
puts “hello
“`
のようにきちんと「””」で囲っていないとこのエラーが出るので気をつけましょう

元記事を表示

Nokogoriを使った基礎的なWebスクレイピングを学びました

Webスクレイピングについて基礎的な学習をしたので、アウトプットさせていただきます。

# Nokogiriとは
Nokogoriとはgemで提供されているWebスクレイピングライブラリのことで、gemを使ってライブラリをインストールすると使えるようになります。

“`
$ gem install nokogiri
“`
#### Webスクレイピングとは
Webサイトから情報を取得して、その情報に加工を加えて新たな情報を生み出すことです。
APIとの違いとして、APIはサービス側が開発者向けに一定の条件のもと、公式に機能の一部を使用できるようにしていますが、Webスクレイピングは公式のサービスとは言えず、無作為に使用していると利用規約に引っかかる可能性があり、その点の注意が必要になります。

#### Webスクレイピングの活用方法

例えば、価格.comから好きな家電の価格を取得して、一覧表をCSVで記録するといった具合に必要な情報を自動化して取得し、業務の効率化やAPIにはないデータの取得に役立つ等のメリットがあります。
逆にデメリットとしては、DOM構造が変わったりすると、

元記事を表示

【個人開発】不幸な体験を暴露してお金をもらうアプリを作ってみた

## はじめに

![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684591/68e8d2f2-12c2-fd10-00f7-8c137a2dbc94.png)

皆さんにお聞きします。
何か不幸な体験をして、それを友達や家族に話したとき、一度は「同情するなら金くれよ!!」と思ったことあるのではないでしょうか?

そんな不幸な体験をされた人たちが「少しでも報われたら」という思いで~~クソ~~アプリを作りました。

https://fuko-ziman.herokuapp.com

## アプリの使い方
自分が体験した不幸を投稿し、twitterでシェアします。
「みんなの不幸一覧」を押すと、投稿された記事を全て見ることができます。

[![Image from Gyazo](https://i.gyazo.com/b9cf5d724292be22edbff98bd445f94b.png)](https://gyazo.com/b9cf5d7242

元記事を表示

変数の命名規則について!

#変数の命名規則

前回の続きです!

変数には名前をつけることができます!

名前は自由に決められますが、一定のルールがあり、それを守らなくてはいけません!

“`php
命名規則 説明

1,変数の中身が何かわかる! どんな名前もつけられますが,aaaのような意味のない名前は避けましょう!

2,小文字で始める! 大文字からも開始できますが、とくに理由がない場合は避けましょう!

3,_(アンダーバー)で始めない! _からも開始できますが,とくに理由がない場合は避けましょう!(2文字目以降には使えます!)

4,数字で始めない! 1文字目に使うとエラーが生じます!(2文字目以降には使えます!)

5,日本語を使わない! 文字列以外では日本語は使えないため,変数名も日本語は使えません!

6,スペースを含めない! 名前にスペースが入るとエラーが生じます!

7,予約語

元記事を表示

連想配列(ハッシュ)の基本について

#連想配列(ハッシュ)
key(ラベル)とvalue(key)を使って、よりもわかりやすくした配列を
***ハッシュ***と言います。

普通の配列だと

“`rb
 japanese = 60
english = 40
science = 30
history = 70
math = 40

#平均点
puts (60 + 40 + 30 + 70 + 40)/5

# もしくは
puts (japanese + english + science + history + math)/5

“`
こんな感じになります。
しかしここで問題があります。

“`rb
scores = [60,40,30,70,40]
puts (scores[0] + scores[1] + scores[2] + scores[3] + scores[4])/5
“`
これだけ見て何のスコアかわかるでしょうか。

そこで“`ハッシュ“`が登場します。

“`rb
scores = {“japanese”=>60,”english”=> 40,”science”=> 30

元記事を表示

値に名前をつけて使う!

#同じ値を何度も使う!

値を使うたびに、同じ値であっても毎回記述していました!

しかし、毎回同じ値を書くのはめんどうですね!

例えば、円の面積の計算を行うプログラムを作成する場合、毎回円周率の値を書くのは非常に大変な作業です!

“`php:【例】同じ値を毎回記述する
# 半径3の円の面積
3 * 3 * 3.14159

# 半径10の円の面積
10 * 10 * 3.14159

# 半径11の円の面積
11 * 11 * 3.14159
“`

もし円周率を3.14159ではなく3.14へ変更することになったら、記述をすべて書き換える必要があります!

この問題を解決するのが『変数』という仕組みです!

#①.変数

変数とは、値を入れる箱のようなものです!

この箱には名前をつけることができ、どんな値が入っているのかを簡単に識別できるようになります!

この名前を変数名と言います!

変数を利用することで、値を再利用したい場合に、変数の名前を使うだけで呼び出すことができます!

変数の使い方について、順に説明します!

#②.変数の宣言と定義

変数を作ることを変数の

元記事を表示

Rubyのバージョンアップとrails new時のエラー対処方法

先日、Rubyのバージョンアップして、新しいバージョンでRailsアプリを作成しようとしたら、エラーが発生しました。
その時のRubyのバージョンアップ実施方法とエラーの原因、対処方法について備忘録としてまとめました。

###環境
MacOS 11.5.2
Ruby 2.6.6(バージョンアップ前) → 3.0.2(バージョンアップ後)
Rails 6.1.4

###バージョンの確認
バージョンをあげる前に、現在のrubyのバージョンを確認する。

“`
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19]
$ rbenv version
2.6.6 (set by /Users/username/.rbenv/version)
“`

###homebrewのバージョンアップとrbenvの導入
homebrewのアップデートとrbenvをインストールを実施します。
rbenvは、Rubyのバージョン管理ツールで、複数のrubyを管理、切り替えできます。

“`
# homebrewを最新

元記事を表示

Railsで多階層カテゴリーを実装してみた

# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/823563e9-302b-6a20-b712-0cb207d73472.gif)

# 実装
### 1.Gemを導入

“`ruby:Gemfile
# 追記
gem ‘ancestry’
“`

“`terminal:ターミナル
$ bundle
“`

### 2.カラムを追加

データ量が多くなる可能性があるので念の為`index`を張っておきます。

“`terminal:ターミナル
$ rails g migration AddAncestryToCategory ancestry:string:index
“`

“`terminal:ターミナル
$ rails db:migrate
“`

“`ruby:schema.rb
create_table “categories”, force: :cascade do |t|
t.string “na

元記事を表示

RSpec入門者向けのTIPSをまとめた

## この記事はなに
RSpecを始めたばかりの方向けにRSpecの基本部分や「あ、これはこうやって書けば良いのか」といったTIPSをまとめた記事です。随時記事は更新していきます。(※最終更新:2021/11/13)

## describe vs context
describeとcontextは技術的には同じです。describeではクラスやシステムの機能に関するアウトラインを記述し、contextでは特定の状態に関するアウトラインを記述します。

## let vs let!
letは呼ばれた時に初めてデータを読み込む、遅延読み込みを実現するメソッドです。it/exampleブロック内では読み込みされた結果がキャッシュされます。

“`ruby
RSpec.describe do
describe “letの挙動” do
let(:current_time) { Time.now }
it do
puts current_time # 2021-11-13 12:05:44 +0900
sleep(3)
puts cu

元記事を表示

データベースをロールバックできなくなった件

## 開発環境

言語:Ruby (2.7.2)
フレームワーク:Ruby on Rails (6.1.3.2)
フロントエンド:HTML&CSS/Bootstrap/JavaScript/jQuey
DB:PostgreSQL

## 背景
新規でマイグレーションファイルを作成し、データベースにテンプレート文を入れる方法がわかりました。
テスト的に作ったマイグレーションファイルが不要担ったため、ロールバックしたところできなくなったため共有します。

## 解決方法
ロールバック実施

“`ruby
$ rails db:rollback
“`

エラー発生!!

“`ruby
% rails db:rollback
== 20210917010552 ChangeColumnDefaultSolutionOfIncidents3: reverting ==========
rails aborted!
StandardError: An error has occurred, this and all later migrat

元記事を表示

テキストフィールドに予め値を入れておく方法

## 開発環境

言語:Ruby (2.7.2)
フレームワーク:Ruby on Rails (6.1.3.2)
フロントエンド:HTML&CSS/Bootstrap/JavaScript/jQuey
DB:PostgreSQL
テスト:Rspec
インフラ:EC2 RDS 
ソースコード管理:GitHub(issueで、タスク管理する)

## データベースに予め値を入れておく方法
テキストフィールドに初期値を入れておく方法はマイグレーションファイルに`default: “初期値”`を記載することでで可能なことがわかった。

“`ruby
class ChangeColumnDefaultSolutionOfIncidents < ActiveRecord::Migration[6.1] def change change_column :incidents, :solution, :text, null: false, default: "解決方法" end end ``` ### データベースに初期値を入れる方法 1. マイグレーションファイルを作成

元記事を表示

OTHERカテゴリの最新記事