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

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

【Rails】Rails6 + docker メール設定エラー 「Errno::EADDRNOTAVAIL (Cannot assign requested address – connect(2) for “localhost” port 1025)」

## 概要
Rails6とdocker環境でメール設定をした際に発生したエラーの備忘録です。

### 環境
– ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux]
– Rails 6.1.6
“`docker-compose.yml
# 中略
mailcatcher:
image: schickling/mailcatcher
ports:
– 1080:1080
– 1025:1025
“`

## エラー発生時のメール設定
“`development.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: ‘localhost’, port: 1025 }
config.action_mailer.raise_delivery_errors = true
“`

### エラー内容
– Railsサーバ側

元記事を表示

クラス外からインスタンス変数を呼び出す際に簡単に使えるメソッド

Rubyのクラスメソッドに属性としてinitializeメソッドで定義したインスタンス変数の値を外部から呼び出す際に利用できるattr_readerメソッドの使い方について記述していきます。

例として各支店の店舗名と売上の入力している値を外部から呼び出し、売上の合計をクラスメソッドで呼び出し、出力する場合

メソッドで定義して呼び出す場合
“`
class Shop
@@total_sales = 0

def self.salesAll
@@total_sales
end

def initialize(shop_name,sales)
@shop_name = shop_name
@sales = sales
@@total_sales += @sales
end

def shopName
@shop_name
end

def sales
@sales
end
end

shop1 = Shop.new(“東京”, 500000)
shop2 = Shop.new(“大阪”, 400000

元記事を表示

クラスとインスタンスとオブジェクト

## 概要

概念的で抽象的な物が苦手なので、これを機にまとめようと思います
説明するのはRubyですけど、どの言語において共通して使える考え方だと思います

### オブジェクトとは
そもそもオブジェクトとはなんだろう
Rubyの世界は全てのものがオブジェクトになります
配列ハッシュ以外にもnilもオブジェクトに当たります
つまり全部オブジェクトです
ただ抽象的すぎて分からないですよね
なのでたこ焼きで考えましょう
たこ焼きは紅生姜や青さ、鰹節、マヨネーズ、油、たこ、たこ焼き粉などの材料から作られています
つまりこれら全部がオブジェクトになります

### クラスとは
次にクラスとはどのようなものでしょうか?
こちらはオブジェクトを作るための設計書になります
簡単に示すと型です
こちらもたこ焼きで表すと分かりやすいです
1個ずつたこ焼きを作っていたらお客さんが怒ってしまいますので、一気にたくさん作りたいと思ったたこ焼き屋さんの店長さんはたこ焼き器を作りました
こうすることで一気に焼けてお客様を待たせることなく提供できます
またたこ焼き器を作ったことで、具材にチョコを入れたデザートたこ

元記事を表示

Rubyのハッシュのキーについて

私はJavaScript歴4年のところから、最近になってRubyを書き始めたのですが、[こちらの記事](https://qiita.com/beeytnh/items/b2bef53b680cb3741a80)に関連して、JavaScriptでは `{}` の定義において以下のサンプルの両者の違いをあまり意識しなくてもそこまで問題にはならないのですが、Rubyでは全然意味が違うということを理解できていなかったので改めて調べてみました。

“`jsx
const sample1 = {
id: 1,
name: “name”
};
const sample2 = {
“id”: 2,
“name”: “name”
};
“`

まず、上記サンプルをRubyで定義すると以下のようになります。

“`ruby
sample1 = {
id: 1,
name: ‘name’
}
sample2 = {
‘id’: 1,
‘name’: ‘name’
}
“`

両者の違いとしてまずわかりやすいところだとプロパティの取り出し方が異なります。
sample1

元記事を表示

twitterAPIで自動ツイートをしたい

### APIキーを取得
[やり方](https://di-acc2.com/system/rpa/9688/)
callback url は `http://127.0.0.1:3000/oauth/callback`
### gem
公式の[developer platform](https://developer.twitter.com/en/docs/twitter-api/tools-and-libraries/v2)に[sample code](https://github.com/twitterdev/Twitter-API-v2-sample-code)があったのでそれに則っていく
“`
gem install typhoeus
“`
httpクライアントとして使用
“`
gem install oauth
“`
APIキーの認証に使う
“`
gem install dotenv
“`
今回自分はDockerを使用したので、環境変数を渡すのに便利な’dotenv’も使用しました

### コーディング
ファイルの作成
“`
touch tweet.rb
`

元記事を表示

テックキャンプ受講した感想

【カウンセリングについて】
最初は不安でカウンセリングを申し込んだのですが、担当の方が優しく対応してくださり質問にも納得するまでお答えしてくださったので安心して入学を決めることができました。
メルカリのようなアプリを作れるようになりますよと言ってくださり、前向きに考えることができました。
受講から2週間以内であれば返金制度もあると聞いたのでまずは試してみようという気持ちで始められました。

【料金について】
受講料がかかることがネックでしたが給付金が対応しているスクールなので躊躇なく入学を決めることができました。
高いクオリティーのカリキュラムで給付金の対応がされているのでかなりお得感がありました。
給付金の申請自体も初めてでしたが、全く難しくなくスムーズにできました。
給付金に関してはライフコーチが何度もZOOMでわかりやすく説明してくださったので遅れや漏れがなくきちんと適用することができました。

【カリキュラムについて】
パソコンの操作さえもあまりできない自分のような初心者でもわかりやすく学習することができました。
MacBookを買ったばかりで使い方もわからなかったのですがカリ

元記事を表示

gzip 圧縮したファイルを cat で繋ぐと、Ruby では読めないよ

「gzip 圧縮したファイルは cat で繋ぐことができる」という話を聞いていて、 gzip の凄さに感動していたのだけれど、 Ruby を使って読もうとしたら駄目だったので、残念だった。

`cat` で繋いだファイルと、 `gzcat+gzip` で繋いだファイルを用意する。

“`sh
$ echo ‘aaa’ | gzip > aaa.gz
$ echo ‘bbb’ | gzip > bbb.gz
$ cat aaa.gz bbb.gz > cat.gz
$ gzcat aaa.gz bbb.gz | gzip > gzcat.gz
“`

`gzcat` で読むと、結合されていることが判る。

“`sh
$ gzcat gzcat.gz
aaa
bbb
(rc->0)
$ gzcat cat.gz
aaa
bbb
“`

Ruby で読む

“`rb
[1] pry(main)> require ‘zlib’
=> false
[2] pry(main)> Zlib::GzipReader.open(‘gzcat.gz’).read
=> “aaa\nbbb\n”

元記事を表示

Resqueで処理中のジョブを中断する方法

## これはなに

Resqueで処理中のジョブを中断したいなと思って調べたのですが、キューに積まれているジョブを削除する方法しか出てこなくて困ったので記事にします。

## 方法

Resqueの親プロセスに対して`USR1`シグナルを送ることで、ジョブを走らせている子プロセスを終了させることができます。

“`
$ kill -s USR1 RESQUE_PID
“`

## 詳細

### Resqueのプロセス

Resqueはジョブごとにプロセスをforkし、forkされた子プロセスでジョブが実行されます。

> Unlike Sidekiq (a well-designed & well-maintained alternative!) it forks a new process for each job, which makes it resilient to memory leaks and eliminates thread-safety concerns.

(https://resque.github.io/ より引用)

> Forking
> On ce

元記事を表示

database “…” is being accessed by other userが出た時

rails db:resetの際に
database “…” is being accessed by other userが出た時の対処法を説明します。

PostgreSQLを再起動させたらrails db:resetは正常に実行される。
“`
macの場合
停止
brew services stop postgresql
起動
brew services start postgresql
その後
rails db:reset
“`

元記事を表示

【Rails】Sorceryで外部認証 〜Google編〜

# はじめに??
現在個人開発しているサービスにて
SorceryのExternalモジュールを利用して外部認証を実装する際に
google認証を実装している例がなかったため、備忘録も兼ねて記します。

※下記の記事にてLINE認証についても解説しています!
内容に一部重複している部分があるため、実装済みの部分に関しては都度読み飛ばしていただければと思います。

https://qiita.com/tarakish/items/a4c73104375878ad61c5

### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 sorcery `0.16.2`

### 想定読者?
– sorceryのexternalモジュールをベースとしてgoogle認証を実装したい人

### 前提?
– [Simple Password Authentication](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)でのメールアドレス認証機能は実

元記事を表示

【Rails】【SQL】子モデルの最新レコードを基準に親モデルをソートする方法

大阪でRailsを中心に学習している薬剤師エンジニア(初学者)こと、ヨマ([@yoma_2003](https://twitter.com/yoma_2003))です!
Railsで`子モデルの最新レコード`を基準に`親モデルをソート`する方法をまとめます。

※おことわり※
断定口調でまとめますが、初学者であるため間違い等あればご指摘頂けると嬉しいです。

# はじめに
Railsで次のような親子関連を持ったモデルがあったとします。

“`character.rb
class Character < Application Record has_many :topics end ``` ```topic.rb class Topic < ApplicationRecord belongs_to :character end ``` ### charactersテーブル | id | name | describe | |:--:|:----:|:----------:| | 1 | 田中 | 初学者 | | 2 | 鈴木 | Rails学習中 | |

元記事を表示

rails7でomniauthで認証しようとしたらエラーばっかりでうまくいかなかった

# 最終的にはちゃんとできました。
他の言語にうつつを抜かしている間にRubyは3出てるし、railsは7系出てるしでまさに青天の霹靂。
ホスティングする環境によって最近使ってるdotnetをあまり使いたくなかったので、久々にrails触った。

# やりたいこと
ユーザー認証まわりはCognitoにおまかせして、さっと作りたかった。

## 参考にさせていただきました
こちら
https://qiita.com/yhirano55/items/272125c3ce3d7873002e
ありがとうございます。

## ですが動かない

### 最初は「OmniAuth::AuthenticityError Forbidden」が出る
![スクリーンショット 2022-07-07 22.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120789/7ca80e2f-48e9-6e64-c133-6871387d0779.png)
これですね。
これは
`gem ‘omniauth-rails_c

元記事を表示

Rubyで平衡二分探索木を実装(AA木)

競プロで必要になったときのため & アルゴリズムの勉強のため。

平衡二分探索木(self-balancing binary search tree)を調べたらいくつか出てきたが、基礎的な考え方をしていて且つ場合分けが少ない(と感じた)**AA木**を選ぶことにした。[Wikipediaの記事](https://ja.wikipedia.org/wiki/AA木)にあった説明にほぼ沿って実装した。

※ ちなみに勉強前は、ふつうの二分探索木すらきちんと知らなかった。

## 実装

* 既に存在している値を挿入した際は、別のノードを作って記憶するようにした。
* コード末尾には簡単なテスト(デバッグおよび性能測定)を付けた。

“`ruby:aa_tree.rb
class AATree
class Node
attr_accessor :left, :right, :value, :level

def initialize(value)
@value = value
@level = 1
end

def inspect
[@left, @va

元記事を表示

An error occurred when sending a notification using ‘slack’ notifier.OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) 的なエラーの解決方法

# エラー内容
本番サーバーで以下のことを行ったら表題のエラーが出ました。
* Slackにエラー通知を実装(gem ‘exception_notification’)
* Cloudinaryに画像をアップロード

“`
An error occurred when sending a notification using ‘slack’ notifier.OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)
“`

# 解決方法
本番サーバーにログインし、以下実行。
“`
curl -fsSL curl.haxx.se/ca/cacert.pem -o “$(ruby -ropenssl -e ‘puts OpenSSL::X509::DEFAULT_CERT_FILE’)”
“`
解決しない場合はnginxやサーバーの再起動を行ってみてください。

###

元記事を表示

【Rails】dotenv-railsの導入

# はじめに
* 学習の覚え書として書いています
* 自己解釈ですので参考程度にご覧ください

# dotenv-rails とは
* 環境変数を管理できるgem
* 環境変数 → **公開したくない情報(値)**
(メールアドレスやパスワードなど)

つまりGitなどにアップする際、公開したくない情報(値)をdotenv-rails(gem)で管理することができます。

# dotenv-rails 使用手順
①dotenv-railsの導入
②環境変数を記述するファイルを作成(.env)
③環境変数の記述
④ソースコード内で環境変数を使用
⑤GitHubの公開設定(.gitignoreに.envを追加)

## ①dotenv-railsの導入
* gemfileに追記(一番下の行に **gem ‘dotenv-rails’** を追記)
* ターミナルで **$ bundle install** を実行

## ②環境変数を記述するファイル **.envファイル**を作成
* ターミナルで **$ touch .env** を実行
(.envは既定のファイル名なので誤字が無いよ

元記事を表示

rails sができない(Address already in use – bind(2) for “127.0.0.1” port 3000 )

いつも通りrails sをしたら上記のエラーが出たので解決方法を載せておきます

現在動いてるRubyのプロセスを確認
“`
$ ps -ax | grep ruby
“`

このように表示される
“`
49551 ?? 0:00.00 /Users/UserName/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rb-fsevent-0.11.1/bin/fsevent_watch –format=otnetstring –latency 0.1 /Users/UserName/Rails_product/you_conect/config/locales
49552 ?? 0:00.00 /Users/UserName/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rb-fsevent-0.11.1/bin/fsevent_watch –format=otnetstring –latency 0.1
“`
動いてるプロセスを終了する
“`
例: kill 49551
$

元記事を表示

Rails next if と break ifって何ですか?

#### はじめに
 自社製品のコードを見ていたら変なif文を見つけてしまいました。それは
– next if
– break if

というif文でした。条件のあるif文なのだろうくらいにしか捉えておらず、理解しました的な感じでしたり顔してましたら先輩から「この文の意味わかるよね」と言われたので取り繕っていたら詰められて白目になりましたので備忘録として残したいと思います。おかしな部分があれば教えていただければ幸いです。

#### 環境(今回検証した自分のPC)

Ruby 2.6.5
Rails 6.0.5

#### 前提
データを準備します。
booksテーブルを作り値を準備します。
– seeds.rbに次のように記述し、rails db:seedでDBにデータを登録します。
~~~ seeds.rb
Book.create!(
[
{
title: ‘hunter*hunter’,
price: 700
},
{
title: ‘SLAM DANK’,
price: 600
},

元記事を表示

[Ruby] include, prepend, extend の違い

個人的に忘れがちなものなので、自分用でメモしておきます。

間違いがありましたら、ぜひご指摘お願いします!

# 用途による分け方
|用途|キーワード|個人的な
使用頻度|
|-|-|-|
| あるモジュールのインスタンスメソッドが欲しい
かつ、**今のクラスやモジュールの定義を優先したい** | [Module#include](https://docs.ruby-lang.org/ja/latest/method/Module/i/include.html) |高|
| あるモジュールのインスタンスメソッドが欲しい
かつ、**今のクラスやモジュールのインスタンスメソッド定義より優先したい** | [Module#prepend](https://docs.ruby-lang.org/ja/latest/method/Module/i/prepend.html) |底|
| あるモジュールのインスタンスメソッドが欲しい
かつ、**特異メソッドとして欲しい** | [Object#extend](https://docs.ruby-lang.org/ja/lat

元記事を表示

Rails Youtubeの動画投稿・編集

# 概要

Youtubeにアップロードされた動画をRailsアプリで投稿したいという方に向けたものです。
Youtubeの動画を投稿した時にYoutubeのURLのなかで最後の11桁の値のみを取り出し、他の変数に取り入れるようにしている記事が多い。
それだと編集する時に、末尾11桁を入力しないとエラーが起こってしまうので、それが起きないような、その実装方法を記載します。

# 事前準備

実装にあたって、私の開発環境を載せておきます。

“`rb:環境
ruby 3.0.4
Rails 6.1.6
“`

以下のコマンドを入力して、アプリケーションを作成していきます。

“`rb:ターミナル
cd desktop
rails new youtube_sample
cd youtube_sample
“`

# YouTubeURLの種類

## 1. パソコンでのYouTube閲覧時のURL

![Sc

元記事を表示

【Ransack】セレクトボックスでソート機能

# はじめに??

Ransackを使い検索機能を実装している個人開発サービスにて
下記画像のようなソート機能を実装する際に少し面倒だったので、備忘録も兼ねて記します。

### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 [Ransack](https://github.com/activerecord-hackery/ransack)

### 想定読者?
– ransackでのソートをデフォルト表示からセレクトボックスでの選択に変えたい人

# ①セレクトボックスの選択肢にリンクを貼る?
まず、ただのセレクトボックスだと選択したところでリンク先に飛ばないので、
`

“`

元記事を表示

OTHERカテゴリの最新記事