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

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

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

【カウンセリングについて】
最初は不安でカウンセリングを申し込んだのですが、担当の方が優しく対応してくださり質問にも納得するまでお答えしてくださったので安心して入学を決めることができました。
メルカリのようなアプリを作れるようになりますよと言ってくださり、前向きに考えることができました。
受講から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でのソートをデフォルト表示からセレクトボックスでの選択に変えたい人

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

“`

元記事を表示

will_save_change_to_attribute?(attr_name)でプチ・リファクタリングした例

# やりたいこと
userテーブルのemailが変更されるかどうかを判定したい、みたいなこと、あると思います。

# 実装!

これでもいけますが、、

“`ruby
!new_record? && email == email_in_database
“`

この方がスマートですよね、と。

“`ruby
will_save_change_to_attribute?(:email)
“`

何が嬉しいかというと、コードがシンプルになったのと、`&&`が無くなったのでRubocop様も喜んでくれました(Metrics/PerceivedComplexity)。

# 参考

new_record
https://railsdoc.com/page/model_new_record_q

attribute_in_database(attr_name)
https://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Dirty.html#method-i-attribute_in_database

will_s

元記事を表示

メソッド、インスタンスメソッド、クラスメソッドの違い

# 初めに
プログラミングの勉強を始めて3ヶ月ほど経ちますがよく似た言葉や似たニュアンスの多い言葉がよく登場するケースによく遭遇します。例えばjavascriptで言うと関数とメソッドなど。このようなケースに遭遇した際正確な違いを特定するために2〜3時間かかる時もあります。なので初学者の方に私が今回調査した内容を共有することで「無駄な時間」を少しでも減らし、皆さんの学習の手助けに少しでもなれたらと思いこの記事を作成しています。

# 目次

1,メソッド、インスタンスメソッド、クラスメソッドとは??
2,3つの違いまとめ

# 1.メソッドとは?
パソコンに元々あるショートカットみたいなもの。
ショートカットとは?⇨1つのボタンでたくさんの処理をしてくれる機能
例えば、『おはよう』という文章を作りこの文章を削除しようとした際
パソコンのデリートキーを「4回」連続で押す必要がある。
ただショートカットだとcommand + D を1回押せば1文全て一瞬で削除できる。

“`.rb
def season # ⇦メソッドを作成。その中に下の季

元記事を表示

100日後くらいに個人開発するぞ!day052

## 今日はインスタンスメソッドを学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/1927ee16-998b-e958-856c-3062b5e1877a.png)

## 今日の学び
### クラスの中で定義したメソッドの使い方
* クラスの中でメソッドを定義でき、「インスタンス.メソッド名」で呼び出せる
* 例
* `class Menu`
* ` attr_accessor :name`
* ` attr_accessor :price`
* ` def show`
* ` puts “私はメニューです”`
* ` end`
* `end`
* `menu1 = Menu.new`
* `puts menu1.show`
* インスタンスメソッドも引数を受け取ったり戻り値を返すことができる

元記事を表示

【Ruby】バリデーションのかけ方 Part1

## バリデーションの基本的な掛け方
### バリデーションとは?
入力されたデータ、プログラミング言語やマークアップ言語の記述が、適切に記述されているかどうかを検証することである。
多くの場合は、プログラミング言語においてフォームなどに入力された文字列が入力規則に対して妥当に記述されているかどうかを検証する仕組みを指す。記述が妥当でない場合はエラーとして値を返すように設定される。

### 基本的なバリデーションの掛け方
“`
validates :カラム名, ヘルパー
“`
Railsにはバリデーションのヘルパーが多数用意されている。
このヘルパーを使うとどういう検証を行うかを定義することができる。
主なヘルパーを紹介していきますね。

### バリデーションのヘルパー
#### presence
一番多く使うヘルパー。
定義すると「空でないか」を検証してくれ、空でない場合はエラーで弾かれる。
多くの場合は必須で入力するじゃないかな?
“`
validates :カラム名, presence: true
“`
入力するカラム名が空でないかを検証する。
例えば以下のように入力

元記事を表示

クラス変数を使ったインスタンスカウンターの書き方(自分用)

https://www.javadrive.jp/ruby/class/index8.html

元記事を表示

OTHERカテゴリの最新記事