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

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

Bullet Trainを始めよう?️

## Bullet Trainとは
[Bullet Train](https://github.com/bullet-train-co/bullet_train)とはRuby on Rails上で動くSaaSのフレームワークです([Jumpstart](https://jumpstartrails.com/)みたいなもの)。
つまり、Railsを拡張しているものなので、新規アプリを作った時点で以下の機能がもうすでについています。
1. Deviseを使ってのユーザー登録・認証
2. Sidekiq & Redisのバックエンド・ジョブの設定
3. Jbuilderを使ってのAPI自動生成
4. Webhookの自動生成

他にも機能がたくさんありますし、Pro版を買ったらStripeの決済処理の設定など、色んな便利なツールが使えます。
[公式サイト](https://bullettrain.co/)
Bullet Trainの作成者:[Andrew Culver氏](https://twitter.com/andrewculver)
[Discord](https://discord.

元記事を表示

管理者と顧客を分けてDeviseを導入

## 初めに
今回は管理者と顧客を分けてDeviseを導入していきたいと思います。
※実装前提としてDeviseを導入していること

## 管理者と顧客のモデル設定

管理者側がAdmin
“`
管理者用
$ rails g devise Admin
“`
今回顧客側がCustomer
“`
顧客用
$ rails g devise Customer
“`
これをそれぞれターミナルに打ち込みます。

## 次にcontrollerを管理者、顧客で作成
“`
管理者用
$ rails g devise:controllers admin
“`
“`
顧客用
$ rails g devise:controllers public
“`
これらをそれぞれ記述するとappのcontrollerの部分がadminとpublicそれぞれ作成され2つに分かれてくれます。

## viewページの方も作成

“`
管理者用
$ rails g devise:views admins
“`
“`
顧客用
$ rails g devise:views publics
“`
これ

元記事を表示

【RSpec】validate_uniqueness_ofでテストが落ちるときの対処

## 環境
Rails 6.1.3.1
ruby 2.7.1
mysql Ver 8.0.26

##

“`shoulda-matchers“`というGemを使ってテストを書くとき、下記のエラーでテストが通らない。

“`ruby
it { is_expected.to validate_uniqueness_of(:number) }
“`

“`
Expected Employee to validate that :number is unique, but this could not
be proved.
After taking the given Employee, whose :number is ‹0›, and saving it
as the existing record, then making a new Employee and setting its
:number to ‹0› as well, the matcher expected the new Employee to be
invalid, but it was valid in

元記事を表示

Rails7 ターボリンクスを無効にする

# 前提
トップページに遷移した時に、特定のデータから 14個抜き取りを行なって、表示するというコードを書いていたのですが、そのページに更新ボタンを設けたところ、トップページに遷移してから再度更新がかかってしまい、実質的に2度更新がかかっている状態で困っていました。

# 原因
ターボリンクスがAタグを監視して、自動更新を行なってしまっていると思ったため、ターボリンクスを無効にする方法を模索します。

# 問題点と解決
rails6ではapplication.jsにrequire(“turbolinks”).start()の記述があったため
これを無効にすれば、対応できたのですが、rails7にはそれがありませんでした。
代わりにimport “@hotwired/turbo-rails”という記述があり、これは怪しいなと思って調べていくと
詳しい内容は読み解けませんでしたが、Javascriptとの融合みたいなことが書いてあったので
怪しいと思ってコメントアウトしてみました。

“`Ruby:javascript/application.js
// import “@hotwire

元記事を表示

any?メソッド

# 下のコメントは勉強になります(感謝!)
# 実際にないインスタンスを抽出する
“`rb
irb(main):044:0> a = Model.where(“column LIKE ?”, “#{Date.today.year}-#{Date.today.month}%”)
Model Load (1.3ms) SELECT `models`.* FROM `models` WHERE (column LIKE ‘2022-11%’)
=> []
“`
### クラスは?
“`
irb(main):048:0> a.class
=> Model::ActiveRecord_Relation
“`
### 中身は空かどうか?
“`rb
irb(main):045:0> a.empty?
=> true
“`
# 訂正 配列の中身の有無を判断には“`empty?“`が最適(コメントより)
# any? (instance method Array#any?)

any? ->

元記事を表示

影響範囲の小さな小回りのきく管理画面ライブラリを作ってみた

[thoughtbot/administrate](https://github.com/thoughtbot/administrate) が有名ですが、これが厄介でした。管理画面の特にフォームのHTMLって結構デフォルトから変更しないと要件を満たせないやつがあるんですよね。**それでカスタマイズすると、いつの間にか本体の仕様が変わって見事にアップデートしにくくなりました。**

でも同時に、管理画面って共通化できる箇所がかなり多いというのも分かります。ライブラリを上手く利用できるならそうしたい。

この辺のもやもやをまとめるためにこれを作りました。

[cc-kawakami/micro-admin: A minimal Administration dashboard parts.](https://github.com/cc-kawakami/micro-admin)

中身は [trailblazer/cells](https://github.com/trailblazer/cells) です。なので、Rails に限らずいろんなところで使えます。

使い方は、まず `App

元記事を表示

小さなライブラリ群によるアプリでクリーンアーキテクチャをいい感じに理解する

クリーンアーキテクチャですが、[hanami/hanami: The web, with simplicity.](https://github.com/hanami/hanami) と出会ってから5周回くらいして、ようやく腹落ちしつつあるのでまとめてみます。

#### フレームワークを利用しつつ理解するのは難しい
フレームワークを利用した場合、例の図のUsecaseの外堀をグルッと埋める形になります。MVCならController、View、Modelです。Hanamiの場合はRepositoryが来ます。個人的にはこの内側から3層目が全て一体化していると、どうしてもそれらが中心であるように感じてしまうんですよね。

そこでアプリケーションのそれぞれの責務を別のライブラリを利用して実装することを試してみました。

これです。 [cc-kawakami/clean-architecture-minimal-app: A minimal Clean Architecture app](https://github.com/cc-kawakami/clean-architecture-m

元記事を表示

【個人開発】動物好き必見!動物とのふれあいに特化した検索サービス『FLUFF MAPS』を作りました!

![top3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253662/4ed74182-39f9-020b-a1bd-0959e9631f03.jpeg)

この度「動物とふれあうことができる施設を簡単に検索できるサービス【FLUFF MAPS】」をリリースしました!

__サービスURL__
https://www.fluff-maps.com

__GitHub__
https://github.com/kazuki1025okumura/fluff_navi

## はじめに
はじめまして![おくむら](https://twitter.com/kazuki_okumura)と申します。
私自身、動物が大好きでよく牧場や動物園にふれあいにいきます。

ネットでそういった施設を探していて、「条件を絞り込んで検索できたらな」だったり「ふれあうことができる動物が一覧で見れたらな」と感じていて、それなら自分で作ってしまおう!と思い製作しました。

## このアプリへの思い

元記事を表示

フレームグラフを読むのは簡単ではありません

フレームグラフを読むのは簡単ではありません。練習が必要です。ですが、ちょっとしたコツもあります。ここではそれを紹介します。

フレームグラフやウォーターフォールチャートを呼ばれる種類の可視化を見ないで1日を過ごすことは、ほとんどありません。大抵はSpeedscopeやChrome DevToolsで、そういった可視化を目にしています。

著書の多くやワークショップの中でフレームグラフの読み方を教えていると、そこでつまづく人を見かけます。フレームグラフを読んで理解するのは、ある程度はスキルの話です。スキルを身につけるには、絶え間ない練習が必要です。

ただ、フレームグラフを読むスキルはサブスキルに分解できます。その場合に最も重要だと私が考えるのは、「どのフレームが重要で意味があるのかを判断できる」スキルです。

プロセスは、Xミリ秒ごとに停止します。停止されると、プロセスの現在のスタックが記録されます。例えば、フレームAはフレームBを呼び、フレームBはフレームCを呼び出すといった具合です。念のために言っておくと、実行スタックとは、例外のバックトレースを見るときなどに表示されているもののこ

元記事を表示

正規表現とmatch,subメソッド

# はじめに
正規表現を用いた任意の文字列のチェック方法やその他できることをまとめる。

## matchとsubメソッドについて
### subメソッド
subメソッドは、文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
第1引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定します。また、操作したい文字列は/で囲みます。

【例】
irb(main):001:0> str = “りんごを食べる”
=> “りんごを食べる”

irb(main):002:0> str.sub(/りんご/,”みかん”)
=> “みかんを食べる”
「りんごを食べる」という文字列が「みかんを食べる」という文字列に置換されました。

### matchマッチ
matchメソッドは、引数に指定した文字列がメソッドを使用した文字列に含まれているか否かをチェックするためのメソッドです。含まれている場合は、指定した文字列がMatchDataというオブジェクトが戻り値で得られます。また、含まれていない場合は、戻り値としてnilが得られま

元記事を表示

バリデーションの記法と正規表現

# はじめに
バリデーションに用いる正規表現をまとめる。

## 正規表現
| パターン | 意味 |
| —- | —- |
| [a-z] | 角括弧で囲まれた文字のいずれか 1個にマッチ |
| \d | 数字にマッチ |
| {n, m} | 直前の文字が少なくともn回、多くてもm回出現するものにマッチ |
| {n} | 直前の文字がn回出現するものにマッチ |
| . | 改行以外のどの1文字にもマッチ |
| + | 直前の文字の1回以上の繰り返しにマッチ |
| \A | 直後の文字が先頭にある文字列にマッチ |
| \z | 直前の文字が末尾にある文字列にマッチ |
| [ぁ-んァ-ヶ一-龥々] | 角括弧に囲まれたかな、カナ、漢字のいずれかにマッチ(ヴ、ヵ、ヶ、々を含む) |
| ?= | 直後に設定した文字が続く文字列にマッチ |
| *? | 直前に設定した文字が0回以上続く文字列をチェックし、?の直後の文字が出た段階でその1文字を返す |
| \ | エスケープ文字と

元記事を表示

while文

# はじめに
while文を勘違いして覚えてしまったため、改めて覚え直すために記事に残す。

## while文

while 条件式 do
実行する処理
end

条件式を満たす(true)間は処理が続く

元記事を表示

[Ruby] if、elseを用いた処理

# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 指定された範囲の数値によって処理が異なるプログラムの実装
以下の要件を満たす、parrot_troubleメソッドを実装していきます。

最近、あなたはオウムを飼いはじめました。しかし、近隣から「夜にオウムの鳴き声がうるさい」と苦情がくるようになりました。あなたはこれをシステムで解決しようと考え、次のようなプログラムの要件を考えました。

・第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
・第二引数には時間を指定する(ただし、「分」は考えないものとする)
・20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
・上記以外の場合は「OK」と出力する

# 雛形
“`ruby
def parrot_trouble(talking,

元記事を表示

randメソッド

# はじめに
乱数の実装をする際に必要な知識を忘れないために記録に残す

## randメソッド
randメソッドで乱数を実装することができます。

# 使い方
rand(欲しい乱数の数)
randメソッドを使うと手軽に乱数を生成できます。randメソッドに引数として数を渡すと「0」から「渡した数 – 1」の間でランダムに数を返します。

rand(100) # => 0〜99の中から1つ整数をランダムに返す

rand(1..5) # => 1~5の中の整数を返す

元記事を表示

[Ruby]偶数値の取得するメソッドの作成

# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。
# even?メソッド
Rubyが元々用意しているメソッドで、対象の数値が偶数かどうか判断するメソッドになります。

“` even?.rb
10.even?
#=> true

5.even?
#=> false

“`
このように値が真の時、tureを返し、偽の時、falseを返します。
# 偶数値が取得できるメソッドの作成

“` even?.rb
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0
“`
このように出力できるメソッドを作成していきます。

“`even?.rb
def count_evens(nums)
count = 0
nums.each

元記事を表示

railsチュートリアル中にHerokuの無料期間が終わることが分かり、Herokuからrender.comに気合いで移行した話

## 概要
タイトル通り
5章やってたら突然無料終わります言われて泣いちゃった
## 対応内容
下記様を参考にデプロイ手前まで作業完了。
[Render.comでRailsアプリの本番環境を作成する方法をどこよりも優しく伝える!](https://qiita.com/ysk91_engineer/items/b7db950f4739fa896f57)
[Render.com公式](https://render.com/docs/deploy-rails)

設定をしていくうち、`config/master.key`が必要とわかる。
その際、現在の`Gemfile`のrailsのバージョンではダメなことが分かり。
以下の様に`Gemfile`を設定変更
“`ruby
source ‘https://rubygems.org’

ruby “2.6.8” #念のためrender.comがこのバージョンの為、変更

gem ‘rails’, ‘= 6.0.3.2’ #updateしたら怒られたので怒られた通りに変更
gem ‘bootstrap-sass’, ‘3.3.7’

元記事を表示

ajax通信を用いて非同期でコメント機能を実装する

ほとんど私が書くことはないのですが、こことここの記事を参考にさせていただいたら簡単に実装できたよ!
ということで備忘録。
ajax通信を用いて非同期でコメント機能を実装するには、こちらの方のページが私にはとてもわかりやすかったです。(コメント欄も参考にされてください)
https://qiita.com/miyazaki_yusuke/items/dd1c053851a042cae893

そして、コメント欄も含めて余さず実行したけどうまくいかないぞ・・・?と思った時に、「そうだ!jQueryの実装してない!」となり外部検索でgemがあることを知り導入。けどうまくいかない。のでさらに検索したところ、こちらの方の記事で救われました。
https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74

素晴らしい方がたくさんいてよかった・・・
先人の方の知恵は偉大です。

元記事を表示

Railsで下書き機能の作成を行った

今回はRailsで下書き機能の作成ついて紹介します。

### displayカラムの追加

今回は下書き記事かどうかを判断するために、displayカラムを追加します。
add columnコマンドなどを使ってみます。

“`ruby
#db/migrate/20220928135436_add_coumuns_to_posts.rb
class AddCoumunsToPosts < ActiveRecord::Migration[6.1] def change add_column :posts, :display, :string end end ``` そしてmigrateします。 ```ruby rails db:migrate ``` 次にコントローラーを記述します。 内容としては、1だったときは、0にし、elseだと逆に処理をします。 0が下書き、1が投稿です。 ```ruby #posts_controller.rb def draft @post = Post.find(params[:id]) if @post.d

元記事を表示

【Ruby on Rails】pry-rails導入方法

## pry-railsの導入方法

### Gemfileを編集
Gemfile最終行に以下を追記
“`ruby:Gemfile
gem ‘pry-rails’
“`

### ターミナル実行
“`terminal:ターミナル
bundle install
“`

#techcamp136期

元記事を表示

【Ruby on Rails】Deviseの導入方法

## Deviseの導入方法

### Gemfileを編集
Gemfile最終行に以下を追記
“`ruby:Gemfile
gem ‘devise’
“`

### ターミナル実行
“`terminal:ターミナル
bundle install
“`

### deviseの設定ファイルを作成
“`terminal:ターミナル
rails g devise:install
“`

### Userモデルを作成
“`terminal:ターミナル
rails g devise user
“`

### テーブルを作成
「db/migrate/20XXXXXXXXX_devise_create_users.rb」ファイルに必要なカラム情報を追記のうえ以下を実行。
“`terminal:ターミナル
rails db:migrate
“`

### ビューファイルを作成
“`terminal:ターミナル
rails g devise:views
“`

#techcamp136期

元記事を表示

OTHERカテゴリの最新記事