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

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

Firestoreでcollectionのfield名をcamelCaseとsnake_caseで交互に置換したい

# 問題

– Javascriptは通常camelCaseで書く
– Rubyは通常snake_caseで書く

そうするとFirestoreのcollectionのfieldはcamelCaseだけど、rubyにデータがある時はsnake_caseにしたい。

# 解決

Railsとしてここに置く

“`rb:config/initializers/firestore.rb
module FirestoreOliveBranch
module Outgoing
def create(data)
d = data.deep_transform_keys { |key| key.to_s.camelcase(:lower) }
super d
end

def set(data, merge: nil)
d = data.deep_transform_keys { |key| key.to_s.camelcase(:lower) }
super d, merge: merge
end
end

元記事を表示

プロジェクトへテストコードを導入する(環境構築編)

## まえおき
前回は[「計画編」](https://qiita.com/rerere_eng/items/fdf57b817589383db661 “”)という事でテスト導入にあたっての目的やテスト範囲の確認などを行った。
今回は「環境構築編」としてRSpecや各種gemのインストールについてまとめていく。


### 使用環境とGemについて


## 使用環境
– GCE
– OS:CentOS7
– 言語:Ruby(2.2.2)
– フレームワーク:Rails(4.2.5)


## 導入するGem
– rspec-rails(4.0.1)
Railsでrspecを実行するために必要

– factory_bot_rails(4.11.1)
テスト用のインスタンスを簡単に、効率よく作成できる

– capybara(2.18.0)
ブラウザをシミュレートしてテストするのに必要

– seleniumu-webdriver(3.141.0)
Webブラウザをプログラムから自動的に操作するためのツール、chromeなどを指定できる


## Gemのインスト

元記事を表示

N+1問題の重要性

N+1問題とは、アプリケーション開発でデータベースへのアクセス回数が多くなってしまう時に注意すべき問題である。
ユーザーが何かを投稿や検索した際にその都度データベースへアクセスしていては、パフォーマンスが下がってしまう。
そのような問題点を解決する際に活用されるのが、includesメソッドである。このメソッドを活用することで、引数に指定されたものが一度のアクセスで取得できるのでぜひ活用して、パフォーマンス維持を図りたいと思う。

元記事を表示

【Rails/minitest】パーシャルを出し分けるビューヘルパーの自動テストを書いてみる

# はじめに
こんにちは、この記事を書いている現在が夕方なので、お腹が減ってきてしまったk__mです。
この現場では、Railsのプログラムでビューヘルパーの自動テストが書かれていませんでした。
そこで今回、パーシャルを出し分けるヘルパーメソッドの自動テストを書こうとするものの、あまり参考になる記事も見つけられず、少し詰まってしまいました。。。
結局少しずるい方法で乗り越えてしまったのですが、備忘録代わりに記事を書いていきます。
# 自動テストの概要
今回自動テストを導入したかったのは、パーシャルの出し分けをする役割のビューヘルパーです。
具体的にはこんな感じです。

ApplicationControllerで定義されているインスタンス変数haraheriでパーシャルを出し分けるようにしています。
“`ruby:app/helpers/application_helper.rb
module ApplicationHelper
def render_partial
if @is_haraheri
render(partial: ‘shared/haraher

元記事を表示

Before Rails Tutorial ポケモン図鑑をつくろう

本投稿は講義資料であり、Rubyの基礎は理解しているが、rails tutorialで躓く読者を対象としています。
***
[1章:環境構築](https://qiita.com/earth660/items/a51874eba618e2aa5ce6)
[2章:Scaffold を用いた高速なアプリケーション構築 及び MVCの理解](https://qiita.com/earth660/items/c791f1e46875e8a9994e)

前章では、Scaffoldを用いて高速でアプリケーションを構築しました。
自動化された部分も多く、現段階では、大まかな理解をしていると思います。

今回は、route, Model, View, Controller をそれぞれ自分で作っていきます。
とはいっても、継承まで含めてすべて書くには理解することが膨大で大変ですので、
前回も使用した`generate` を今回も使用していきます。

まずは、Railsの新しいアプリケーションを作成します。
[2章:環境構築](https://qiita.com/earth660/items/c791f

元記事を表示

Rubyの基本的な知識(備忘録)

プログラム言語「Ruby」とは?
①入力する文字数が少ない。
②初心者でもわかりやすく、理解しやすい言語である。
③日本人により開発された言語であるため、日本語の情報が豊富に存在する。
④Ruby On Railsと言われる補助言語(フレームワーク)のようなものがあり、いろんな機能を素早く実装できる。
⑤スタートアップ等の企業で採用されることが多い。(とのこと。)

【主観】
個人的に他の言語「Python、Java」等の言語を調べたが確かに、Rubyの方が記述量は少なく理解しやすかった。

今後も学んだことを発信していきたいと思います。

元記事を表示

Railsに簡単な検索フォームを作ってみた(Ransack)

自分の作成している掲示板サイトに簡単な検索フォームを作りたいと考え、Ransackというgemを使い、記事を参考にしながら作成しました。

参考記事

Railsアプリに簡単に検索フォームを実装する方法とは?

環境とver
ruby ‘2.7.5’
rails ‘6.1.4’
Docker

github
https://github.com/takoyan33/railsdock4

まず最初に
“`Ruby:Gemfile
gem ‘ransack’
#ransackを追加
“`

“`Ruby:ターミナル
bundle install
#dockerの場合、docker-compose run web bundle install
“`
これでransackを入れることができました。
次にコントローラーに記述します。
自分の場合、kaminariのgemを入れているのと、降順に表示したいので、
色々後ろについています。
普通に追加する場合は、.page(params[:page]).per(8).all.order(id: “DESC”)の後ろは消して大丈夫

元記事を表示

何か作れるようになるまで

# あらすじ
ひょんなことからフロントエンドコーダーとしてインターンで採用され、WEBサイトをコーディングしてきたが、今一度立ち返って自分の能力を評価すると「HTMLとCSSしかちゃんとかけてないじゃん」となった。
将来は立派なエンジニアになりたい私はこの1年間で立派なポートフォリオを作って大学を卒業しようと心に決めた。。

# 技術選定
とりあえずRubyとReactを選びました。理由は特にないです。
なんでもいいからとりあえずプログラミングをできるようになりたいという理由だけなので、特に深く考えずに「プログラミング言語 おすすめ」で検索して無難そうなものを選んだ感じです。

# 今後の予定
各言語でキャッチアップを始めています
– Ruby
– まずはRubyだけで色々なものを作ってみる
– 目的としては、「基礎文法の理解」と「のちのフレームワークの理解を早めるために言語の仕様はしっかり理解しておく」
– Paizaとか使おうかな
– React
– チュートリアル
– 脳死で作れるようになる→PropsやStateの理解を完璧にする

元記事を表示

空白か先頭か(あるいは空白か文末)という正規表現

正規表現で少し詰まったので、記事としてアウトプットしておく。

Ruby 2.7.6で検証しています。

## やりたいこと

(空白か先頭)特定の文字列(空白か文末)という正規表現を書きたい。改行は入らないので考慮を今回はせず1行の文字列で考えます。
この正規表現を特定の文字列strに対して、`reg(str)`としましょう。

具体的には

“`ruby
> ‘ 大阪市’.match?(`reg(‘大阪市’)`)
=> true

> ‘ 大阪市’.match?(`reg(‘大阪’)`)
=> false

> ‘ 大阪 市’.match?(`reg(‘大阪’)`)
=> true
“`

のようなイメージ。純粋にinclude?関数を使うと、後者はtrueになってしまうので別途正規表現を作る必要が出てきました。

## こんな正規表現を書いた

“`ruby
> ‘ 大阪市’.match?(/[\s|\A]#{‘大阪市’}[\s|\z]/)
=> false
> ‘ 大阪市’.match?(/[\s|\A]#{‘大阪’}[\s|\z]/)
=> false
“`

通常の

元記事を表示

【Rails】Model名とControllerのModule名が重複してNoMethodErrorが発生した時の対応

備忘を兼ねて

## Moduleとモデル名が重複するとNoMethodErrorになる

ファイル構成

“`
app
├── controllers
│ └──user
│ └── hoges_controller.rb
└── models
└── users.rb
“`

“`rb:hoges_controller.rb
module User
class HogesController < User::ApplicationController def index User.where(id: ids) end ## その他メソッド省略 end end ``` ```:エラー内容 NoMethodError in User::HogesController#index undefined method `where' for User::Module ``` ## エラーの原因 モデル名とコントローラー側で定義したモデュール名が重複しており、`User

元記事を表示

railsで新規プロジェクトを作成する手順

備忘録。
railsで新規プロジェクトを作成する。

### ツール
– SourceTree

### 環境

“`
ruby -v
#=> ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]

rials -v
#=> Rails 6.0.2.1
“`

### rails new

“`
rails _6.0.2.1_ new appname –database=postgresql –skip-bundle
“`

– `\_6.0.2.1_`
railsのバージョンの指定

– `appname`
アプリケーションの名前を記述する

– `–database=postgresql`
データベースの指定

– `–skip-bundle`
Gemfileを読み込まないようにする

:::note
「なぜGemfileを読み込まないようにするのか?」
Gemfileには、railsのバージョンに関する記述がある。その記述は、railsの最新版をインストールするように指定している。
この環境だと、

元記事を表示

Rubyでスマートに+09:00を出したかった

皆さんはアプリケーション開発中に、タイムゾーンを意識することはどれくらいあるでしょうか?

普段の開発だと、一度設定してしまえば中々意識しにくいものですが、たまたま今回こちらに関して触る機会があったので記事にすることにしました。

## 今回やりたかったこと
UTCからの時差を`+09:00`のような、`±xx:yy`(xxが時間、yyが分)の形式で取得することです。
というのも、Elasticsearchに時差を考慮した日程の絞り込み検索を行いたい、と考えていました。
Elasticsearchでcreated_atが2022年4月のドキュメントを探したい、という場合以下のような絞り込みを行います(下記はクエリの一部を抜粋)。

“`json
{“filter”:{“range”:{“created_at”:{“gte”:”2022-04-01″,”lt”:”2022-05-01″}}}
“`

しかし、これではタイムゾーンが何も配慮していないため、時間の絞り込みはUTC基準で行われ、日本時間だと9時間ずれてしまいます。
この場合、そもそもcreated_atを9時間ずらして入

元記事を表示

【Rails】レコードを配列の順番に並び替える

# 初めに

## 環境

Rails 7.0.2
Ruby 3.1.1

## やりたいこと

配列の順番にレコードを並び替える。

# 本文

通常 where に配列を渡して、レコードを取得すると id 順に並び替えられて取得されます。
ですが`in_order_of`を使用することで配列の順番に並び替えられます。

“`ruby
arr = [11,2,4,6,8,1]

users = User.where(id: arr)
# puts users.ids -> [1,2,4,6,8,11]

users = User.where(id: arr).in_order_of(:id ,arr)
# puts users.ids -> [11,2,4,6,8,1]
“`

ちなみに `Rails 7.0.0`になってから追加されたメソッドでデータベースが `Mysql` や `postgresql` でも関係なく動きます。

# 参考

[in_order_of – Rails ドキュメント](https://railsdoc.com/page/in_order_of)

元記事を表示

Herokuへのデプロイがfatal: the remote end hung up unexpectedlyで失敗した件

いつも通りRailsアプリをHerokuにデプロイしようとすると、以下のようなエラーが出た。

“`
>> git push heroku master
Enumerating objects: 67, done.
Counting objects: 100% (67/67), done.
Delta compression using up to 16 threads
Compressing objects: 100% (50/50), done.
Writing objects: 100% (54/54), 23.86 MiB | 311.00 KiB/s, done.
Total 54 (delta 17), reused 22 (delta 4), pack-reused 0
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504
send-pack: unexpected disconnect while reading sideband packet
fatal: the remo

元記事を表示

【備忘録・Ruby】to_○メソッドまとめ

## 初めに
こんにちは、だいごです。
今回はRubyのto_○メソッドをまとめていきます。
よかったらご覧ください。

## to_○メソッドまとめ
今回まとめていくto_○メソッドは以下に記すものになります。
– to_sメソッド
– to_iメソッド
– to_aメソッド
– to_fメソッド
– to_hメソッド
– to_symメソッド

今回はまとめないメソッドはこちらになります。
– to_cメソッド(=複素数に変換)
– to_rメソッド(=有理数に変換)

### to_sメソッド(s:string)
文字列以外のオブジェクトを文字列に変換するメソッド。

“`ruby
オブジェクト.to_s

# 使用例
10.to_s
=> “10”
nil.to_s
=> “”
hoge.to_s
=> “hoge”
“`

### to_iメソッド(i:integer)
文字列を整数に返すメソッド。
また、小数を整数に変換することもできる。
もし、文字列に整数と認識できないものがあれば、その場合は0を返す。

“`ruby
文字列.to_i

# 使用例
“10”

元記事を表示

【rails】chartkick導入ガイド

# はじめに
個人開発の過程でkickchartを利用する機会があったのですが、日本語の記事でわかりやすいものがあまり見つからなかったので公式ドキュメントを日本語化&個人的に役に立った内容を記載しておきます!kickchartを利用する際の参考にしてください!!

# 導入

まずはkickchartの導入からです。rails のバージョンによって導入方法が違うので注意してください!
どのバージョンであってもまずはgemファイルに以下の記述を書き加えてください!!

“`ruby:gemfile.rb
gem “chartkick”
“`

## rails7の場合

configのimport.rbに以下の記述を追加してください。

“`ruby:config/importmap.rb
pin “chartkick”, to: “chartkick.js”
pin “Chart.bundle”, to: “Chart.bundle.js”
“`

また、app/javascript/application.jsに以下の記述を追加してください。
“`ruby:app/j

元記事を表示

【Ruby】あるメソッド内で別のメソッドを呼び出す時に意識すること

こんにちは。
早く駆け出したい @iloveomelette です。

突然ですが、みなさんはあるメソッド内から別のメソッドを呼び出したい時のインスタンスメソッドとクラスメソッドの使い分けはできますでしょうか。
恥ずかしい話ではありますが、私はあやふやでよく`NoMethodError`を出していました。

今回、勉強したことをここにアウトプットしていきますので、
私と同じく使い分けが曖昧な方はサラッとでも良いので、参考にしてくださると幸いです。

尚、ご指摘箇所がございましたら
ご教授いただけますと幸いです。

## 問題

いきなりですが、問題です。
以下の`Actress`クラスにある`yoshioka`メソッドはブロック内にある`arimura`メソッドを呼び出すことはできるでしょうか。

“`ruby
class Actress
def self.yoshioka
arimura
end

def arimura
puts ‘Hello World!!’
end
end

Actress.yoshioka
“`

正解は…

“`zs

元記事を表示

インフラエンジニアがRubyでAPI作ってみた②

## 前置き

前回の記事に引き続き、今回もRubyでAPIを作成していきます。
Docker Desktop,SequelAce, Rubyがインストールされている方は同じように作ることができます。

https://qiita.com/KentaroYoshizumi/items/f8c6d002972b61e10001

参考記事:

https://qiita.com/mokio/items/7d36a7aa79a4bf5066e9

今回は前回よりも少しだけ難易度をあげて、
①ローカルにMySQLコンテナを作る。(アクセスできることを確認する)

②ローカルでAPIを作る。(DBに値を登録する。)

③コンテナ内のDBを参照してみる。

といった流れで進めようと思います。

## ①ローカルにMySQLコンテナを作ってアクセスしてみる。

まずは今回作成する一連のファイルを配置するためにディレクトリを切っていきます。

“`
$ mkdir API_sample
“`
作成したディレクトリに移動します。

“`
$ cd API_sample
“`

このディレク

元記事を表示

Rubyではメソッド名と同じ名前のローカル変数を宣言しないようにしよう

## はじめに
問題です。次のプログラムを保存して実行したとき、ターミナルにはどのような結果が表示されるでしょうか?

“`ruby
# fromからtoまでの連続した整数を配列として返す
def numbers(from: 0, to: 10)
(from..to).to_a
end

def main
p numbers

numbers = numbers(from: 3, to: 7)

p numbers
p self.numbers
p numbers()
end

main
“`

はい、答えはこうです。

“`
$ ruby sample.rb
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`

予想は当たりましたか?

## 簡単に解説

`main`メソッドの振る舞いにコメントを付けていきます。Ruby初心者の方もこれでなんとなく理解でき

元記事を表示

Ruby 変数のスコープ レキシカルスコープ

## はじめに
RubyとJavaScriptの違いに手間取ったので備忘録

**JavaScriptのコード**
“`js
let sample = “tee”

const hello = () => {
if(sample === “tee”) {
return “teeです”
} else {
return “該当しません”
}
}

console.log(hello()) //出力結果 “teeです”
“`

**Rubyのコード**
“`rb
sample = “tee”

def hello
if sample == “tee”
return “teeです”
else
return “該当しません”
end
end

puts(hello())

# 出力結果
# undefined local variable or method `sample’
“`

`JavaScript`では関数の外側(レキシカルスコープ)の変数を参照可能です。
`Ruby`ではできない。これちょっとひっかりました・・・
初めて

元記事を表示

OTHERカテゴリの最新記事