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

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

[Ruby]moduleのメソッド定義についての学習記録

## まえがき
Web系エンジニア転職を目指して学習しております。
今回は「プロを目指す人のためのRuby入門」という書籍で学習している私の振り返り記録になります。
学習した内容全てではなく、一部分を取り上げて記録しております。
書籍の内容を記載しすぎるのは問題であると認識し、配慮しておりますが問題がある部分がありましたらご指摘頂けると幸いです。

## include?メソッド
呼び出したクラスオブジェクトに引数で渡したモジュールがincludeされているかをtrue or falseのBooleanで返す。include?メソット自体はStringクラスとArrayクラスにも同名のメソッドが定義されていますがあくまで今回のinclude?メソッドはClassクラスで定義しているinclude?メソッドと認識しています。この認識が正しいかは分からなかったので知っている方がいたらコメントで教えて頂きたいです。
“`ruby
module Profile
end

class User
include Profile
end

User.include?(Profile)
# tr

元記事を表示

Windows10でdocker toolbox を利用したRailsアプリ開発中

経緯

現在、独学でRails7でポートフォリオを作成している初学者です。Windowsでdocker toolboxを利用してアプリを開発しています。しかし、今回環境構築にあたりエラーが発生したものの、なんとかRails7(sprockets-rails, importmap-rails, cssbundling-rails)を利用したVue.js, tailwindcss が動作する環境を構築できたので、備忘録的に書き残します。

フロントエンド周辺について

rails7 ではrails tutorial でも採用されていたWebpackerが使えなくなったことや、トランスパイルが不要な選択肢が現れるなど、アセットパイプライン関連の変更点が多いように思った。私は経緯で述べたGemを利用したが、他の組合せはWindows周辺の知識不足により消去法で諦めた。組合せや全体像の理解ではこの記事が最も分かりやすかったです。

Rails

元記事を表示

メソッドまとめ 第一弾

メソッドまとめ

まずは数値クラスから見ていきましょう。

〜〜数値クラスのメソッド〜〜

数値.round 四捨五入
数値.floor 切り下げ
数値.ceil 切り上げ
数値.truncafe 切り捨て
数値.zero? 0かどうか確かめる
数値.odd? 奇数かどうか確かめる
数値.even? 偶数かどうか確かめる
文字列.to_i 数値に変わる
数字.to_s 文字列に変わる
(?がつくと真偽値を返します。)

“`
num = 7.77

num.round => 8
num.floor => 7
num.ceil => 8
num.trancafe => 7
0.zero? => true
“`

次は文字列クラスのメソッドです。

〜〜文字列の演算式〜〜

“`
“abc” + “xyz” => “abcxyz”
“abc” * 3 => “abcabcabc”
“abc” << "xyz" => “abcxyz” //+との違いは元の変数の中身も+をしたものになる
“aaa@aaa.com” =~ /@/ => 3 //=~は調べたい変数がどこにいるの

元記事を表示

[Rails]before_actionで先にincludesした時の罠

Railsでincludesメソッドを使用してデータの読み込み速度をあげようとした時にタイトルにある通り、罠に引っ掛かりました。

**※コードは一部抜粋して内容も変更しています。**
“`ruby
before_action :set_user

def destroy
return head :unprocessable_entity unless @user.unfollow(@follow)

render json: @user
end

private

def set_user
@user = User.includes(:following).find(params[:user_id])
@follow = User.find(params[:follow_id])
end
“`

このコードはフォロー機能を実装しているコードの一部で、destroyアクション内ではフォローを解除出来た場合はuserのデータを返しています。

開発環境で実際にフォローのボタンを押してみると200レスポンスが返り、データも返ってきています。

しかし、フ

元記事を表示

<パーミッション>Railsアプリでパーミッションエラー

今回はRailsアプリで発生したパーミッションに関するエラーの
対策を備忘録として残します。

# rails s 時に発生

“`
Errno::EACCES (Permission denied @ apply2files – /Users/ユーザーネーム/Documents/homepage/homepage_on_ruby_on_rails/homepage/tmp/cache/assets/sprockets/v4.0.0/Ku/KueVW_Fgne0MoM9sWUxwZLSJS_YpySO0N2iIaOhPsgg.cache):
“`

とエラーが表示されビューが返されませんでした。

どうやら権限がない?ということらしい。

確認します。
“`
$ ls -al /Users/ユーザーネーム/Documents/homepage/homepage_on_ruby_on_rails/homepage/tmp/cache/assets/sprockets/v4.0.0/ku
total 8
drwxr-xr-x 3 root

元記事を表示

railsでNoMethodError: undefined method `silence’と言われたエラーの対応方法

こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://mogmet.com)です。

本日はトラブルシュートな記事になります。

## 問題

railsで開発していたところ、pumaを使ったrailsのログ出力をdockerでそのまま出力したいと思って設定したら下記のエラーが出てしまいました。

“`
#>
“`

というエラーがでて画像が表示されなくなってしまいました。

## 解決法

調べたら下記に答えがあった。

https://github.com/rails/sprockets-rails/issues/376

早速config/environments/development.rbのファイルを修正した。

“`development.rb
config.logger = Logger.new(STDOUT)
“`

としていたところを

元記事を表示

RailsにReact Railsを導入する

手順をメモ書きしておきます。

# Gemfileに下記の記述を追加

“`Gemfile
gem ‘react-rails’
“`

# ReactRailsの初期化
“`ターミナル
rails g react:install
“`

# React コンポーネントの作成
react-rails には、React Component 定義を生成してくれる generator があるため、
それを使用して Component を作成します。

“`ターミナル
rails g react:component 任意のコンポーネント名
“`

コンポーネント作成時、任意のコンポーネント名の後に「Props」と「Propsの型」を指定することもできます。

“`
rails g react:component StoreInfo storeName:string
“`

コマンドを実行すると
app/javascript/components直下にコンポーネントが作成されます。

上記のコマンドで作成されたコンポーネント
“`StoreInfo.jsx
import Rea

元記事を表示

【Rails】actionmeilerのsubjectをi18nで日本語化する

# 初めに

`Rails`でメールの件名を `i18n` で設定する方法を忘備録として残しておきます。

## 環境

– Rails 6.1.4

– Ruby 2.7.4

# 日本語設定

`ja.yml`に日本語を追加することで`subject`を設定できます。
また、引数を与えて動的に変更することもできます。

## user_mailer.rb

“`ruby:user_mailer.rb
class UserMailer < ActionMailer::Base def welcome # mail(to: '宛先' ,suject: '件名') mail(to: '宛先') end def signin(user) mail(to:'宛先', subject: default_i18n_subject(user: user.name)) # 引数を与える場合はdefault_i18n_subjectを利用する end end ``` ## ja.yml ```yaml:ja.yml ja: user_mai

元記事を表示

open(url)で起きたエラー

# No such file or directory @ rb_sysopen – URL (Errno::ENOENT)
### 開発環境
使用しているpcのスペック:
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
macOS Monterey バージョン 12.3.1

使用しているrubyのversion:
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-darwin21]

“`ruby
require ‘open-uri’
require ‘nokogiri’

url = ‘http://www.yahoo.co.jp/’
charset = nil
html = URI.open(url) do |f|
charset = f.charset
f.read
end

doc = Nokogiri::HTML.parse(html, nil, charset)
p doc.title
“`
上記のようなyahooのページタイトルを表示さ

元記事を表示

【個人開発】母音法を広めたい!劇団四季も使っている『母音法』で発声練習ができるサービス『BOIトレ ~ 母音法で発声練習 ~』をリリースしました!

## まず母音法って?
日本語は母音の「あ・い・う・え・お」と子音でできています。
いわば母音は言葉の土台部分にあたるので、
この土台がしっかり発音できるようになると、ハッキリした声で発音できるようになります。

例)「おはようございます」→「おあおうおあいあう」
という感じで母音のみで発音するのが母音法です

## サービス紹介
劇団四季も使っている発声練習方法の「母音法」で発声練習ができるサービスです。
練習の管理もできるので毎日の記録をつけながら練習ができます

https://www.boitore.jp/

https://github.com/konjikicity/boitore

## なぜ作った?
僕は幼少期より非常に滑舌が悪く、馬鹿にされることが多くありました。

元記事を表示

【Python】配列の順序を保持しながら集合演算(和集合、差集合、積集合)を行いたい

# はじめに
私ごとですが、最近RubyのプログラムをPythonに書き換える機会がありました。
その時、配列に対して集合演算する必要があり、Pythonでこの方法を調べるとlistを一度setに変換して集合演算を行い、再度listに変換し直す記事が多数でした。
setは便利ですし、大半の場合はこの方法で十分だと思いますが、わたしの場合はもとのlistの順序を保持したかったので、setを使うことはできませんでした。

よって本記事には、Pythonでsetを使わずに配列の順序を保持しながら集合演算を行う方法を残したいと思います。

# 目指す動作(Rubyの集合演算)
配列同士で集合演算を行い、配列を返します。
## 和集合「|
“`ruby
[2, 1, 1, 7, 5, 5] | [3, 3, 5, 7, 9]
# => [2, 1, 7, 5, 3, 9]
“`
重複している要素は取り除かれます。
左辺を基準に順番が保持されています。
## 差集合「-
“`ruby
[2, 1, 1, 7, 5, 5] – [3, 3

元記事を表示

自社サービス「病院なび」へ AWS Opensearch を導入したい

はじめまして。「[病院なび](https://byoinnavi.jp/)」の開発チームメンバー甘利です。
国内最大級の病院検索サービス「病院なび」の改善にRailsエンジニアとして日々挑み続けております。現在 AWS Opensearch の導入を業務いて行なっています。少しずつ共有して行けたらと思っています。(※ この記事に具体的な手順等は含まれていません)

# 概要
 自社サービスの 「病院なび」 に AWS Opensearch を導入するにあたり ”使いやすい仕組み” を目指して色々考えていきたいと思っています。「病院なび」 は主に Ruby on Railsで開発されていますので、便利な Gem で楽な実装ができると考えていました。ところが、AWS Elasticsearch から AWS Opensearch に変更になってしまい、巷にあるGemがそのまま使えなくなってしまい、楽ができなくなってしまいました orz。
 現状、Opensearch を Rails から利用する際の選択肢として”公式コミュニティが公開している Ruby 用クライアントの利用”が比較的楽で

元記事を表示

Ruby メソッドについて

今回はメソッドについて学んでいきます。

Rubyでいうメソッドとは一体なんなのでしょうか?

前回、オブジェクト、クラス、インスタンスについて学習しました。
ざっくりと復習していきましょう。

Rubyの世界では全てがオブジェクトであり、オブジェクトとは「もの」のことです。
言葉で表現できるものは全て「もの」になります。
例えば、猫、人間、時間などなど、、

またクラスとインスタンスは何かというと、
例えば、僕たちは人間クラスに属しており、人間クラスのインスタンスオブジェクトです。
ハンバーグは食べ物クラスに属しており、食べ物クラスのインスタンスオブジェクトです。

Rubyの世界で言うのならば、
“あああ”はStringクラスに属しおり、Stringクラスのインスタンスオブジェクトです。
123 はIntegerクラスに属しおり、Integerクラスのインスタンスオブジェクトです。

では今回のメソッドとは一体なんなのでしょうか?
メソッドとはオブジェクトがなんらかの仕事や振る舞いをすることです。
例えば、「人間の僕はqiitaの記事を書く能力を持っている。」
と言うのはこの「q

元記事を表示

ネスト、collectionとmemberの違いについて(ルーテイング設定)

ルーテイング設定のネスト、collectionとmemberの違いについて学んでいきましょう。
“`
resources :stores do
resources :products
member do
get ‘drink’
end
collection do
get ‘ice’
end
end
“`
まずはネストから学んでいきましょう。
記載方法としては上の1~2行目です。
このようにresourcesの中にresourcesを記載することで
親子関係を作ることができます。
routingがこのようになります。
“`
#ネストしたルーテイング
/stores/:store_id/products/:id
“`
storeの中にproductが入り込んでいるイメージです。

次は一気にmemberとcollectionを見ていきましょう。
一番最初のコードの2行目以外にご注目ください。
このmemberとcollectionを使うと下のようにルーテイングが変化します。
ルーテイングが変わることによって、基本のアクション以外のルーテイングを

元記事を表示

絶対はずさないお店を検索できるwebアプリケーションをリリースするまで③

javascript 文字列を数値に変換するメソッド

~~~
parseFloat メソッド名
javascript 文字列を数値に変換するメソッドになる。
~~~

~~~
グーグルマップ表示
let timer = setInterval(() => {
if (window.mapLoaded) {
clearInterval(timer);
console.log(parseFloat(this.cooks[0].lat))
const map = new window.google.maps.Map(this.$refs.map, {
                center: { lat: parseFloat( this.cooks[0].lat),
                lng: parseFloat(this.cooks[0].lng) },
~~~

~~~
parseFloatの使い方(緯度経度)
center: { lat: parseFloat( this.cooks[0]

元記事を表示

RSpecでCapybaraを導入する

# 概要

RSpecにCapybaraを導入したらつまづいたので解決方法を共有します
1人でも多くの人の役にたてればと思います。

# はじめに

### 使用する環境
– MacOS(M1)
– Rails 6.1.5
– Ruby 3.1.0
– yarn 1.22.17
– Homebrew 3.4.8

## 状況
ログインのテストを作成しようとしたときに、 visit root_pathを記述してページ移動をしようとした時に、テストを実行しようとしたらエラーが出てしまって詰まった

### 1つ目のエラー
![スクリーンショット 2022-05-08 16.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124434/6324eaee-a695-3864-fd88-19c2198b5452.png)

### 考察
文法的には間違えてない為デバックをしたところ、visitがそもそも定義されてないことを発見した。
調べてみるとvisitはCapybaraに定義されてる為うまく読み

元記事を表示

Ruby オブジェクト指向

Ruby Ruby on Rails の世界ではオブジェクトで溢れています。
では、オブジェクトとは一体なんなのでしょうか?
辞書で調べるといろいろな意味が出てきますが、
簡単にいうと「もの」のことです。
私たちの身の回りにもいろいろなものが溢れています。
例えば、椅子 水筒 ベッドなどなど、
それぞれの「もの」が仕事をしてくれて私たちの生活を豊かにしてくれています。

Rubyの世界も同じで、たくさんの「オブジェクト」で溢れています。
「オブジェクトを自ら作り、使うことで、コンピューターにしてもらいたい仕事をしてもらう」これがRubyです。

それぞれのオブジェクトは自分のクラスを持っています。
例えば

昨日の記事の例で言うのならば
「佐藤先生 ・・・ 先生クラスに属している」
このようなイメージです。

では実際にコードを書いてクラスを調べていきましょう。
“`
“あああ”.class
=> String /文字列
2.class
=> Integer /整数
“`

“あああ”はString(文字列)クラスに属しています。
2はInteger(整数)クラスに属しています。

元記事を表示

rails ネスト機能について

今回はrailsのルーテイングの時に役に立つnestについてまとめて見ました。
ネストを使うとルーテイングの見やすさが一気に上がるので、ぜひこの記事を参考にして見てください。

早速ですが、ネストを理解する前に、掲示板とコメントの関係を思い出してください。

掲示板とコメントの関係ですが、これは、必ずと言っていいほど、掲示板の中にコメントが書かれていますよね。
このQiitaも全く同じ機能で、掲示板を僕が一つ記事を書き、そこに読者様からのコメントがありますよね。
こういう風に一対多(掲示板が1、コメントが多)の関係になっているものはネストでルーテイングを表現してあげましょう。
そちらの方が視覚的にも見やすいです。

具体的には以下をご覧ください。
Boardモデル
“`
class Board < ApplicationRecord has_many :comments end ``` Commentモデル ``` class Comment < ApplicationRecord belongs_to :board end ``` ネストの表現方法は下のよう

元記事を表示

[railsチュートリアルで理解必須]railsアプリケーションの仕組み

# はじめに
今回はrailsの仕組みやどのように動いているかをアウトプットしていきます!
もし誤りがございましたらコメントでご指摘ください!

# 前提
Usersリソースをscaffoldで生成している。

# Model-View-Controller (MVC)
**railsアプリケーションの仕組みを理解する上でとても重要なのがMVCモデルです**
**この理解を曖昧にして勉強を続けているといつか必ず詰みます(実体験)**
MVCモデルとは、ソフトウェアをModel・View・Controllerの3要素に分割し、プログラムを整理しやすくする考え方です。
railsはこのMVCというアーキテクチャパターンを採用している。
> Railsアプリと通信する際、ブラウザは一般的にWebサーバーにリクエスト (request) を送信し、これはリクエストを処理する役割を担っているRailsのコントローラ (controller) に渡されます。コントローラは、場合によってはすぐにビュー (view) を生成してHTMLをブラウザに送り返します。動的なサイトでは、一般にコントローラは

元記事を表示

Ruby on Railsのrefileでwrong number of arguments (given 3, expected 2; required keyword: object)が発生したときの対処

Rails初心者大学生です。

こちらを元に、編集画面にrefileで画像アップロードをしようとした所、上記のエラーが吐かれたので奮闘しました。
再び同様の事態が起きても対処できるようにメモ。

## 環境
Ruby: 3.1.2
Rails: 7.0.2.4

## 原因
https://teratail.com/questions/313718
上記の回答によると、どうやらrefile自体が長らく保守されていないため、現在のバージョンに対応していないらしいです。

## 試したこと
バージョンダウンを試みました。rbenvを利用してインストールし、Gemfileの内容を変更。
Ruby: 2.7.6
Rails: 6.1.3.2

こちらで、「bundle install」を実行すると、
“`
Bundler could not find compatible versions for gem “activesupport”:
In snapshot (Gemfile.lock):

元記事を表示

OTHERカテゴリの最新記事