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

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

【Ruby】Googleスプレッドシートのデータをリストとして取得する方法

# 前提条件
– Ruby 3.1.0
– 環境構築~GoogleAPI連携が完了していること(詳細は参考サイト参照)

# やりたいこと
Googleスプレッドシートのデータをリストとして取得したい。

# 方法
### 1. データ取得するメソッドを作成する
“` ruby:Spreadsheet.rb
require ‘googleauth’
require ‘google/apis/sheets_v4’

module ABC
class Spreadsheet
SCOPE = [
‘https://www.googleapis.com/auth/drive’,
‘https://www.googleapis.com/auth/spreadsheets’
]

def initialize
・・・
@service = Google::Apis::SheetsV4::SheetsService.new
end

# スプレッドシートIDとセルの範囲を引数にデータを取得する
de

元記事を表示

ぼっち演算子とnil?、blank?を組み合わせるとnilのときに結果が逆になる罠

考えてみればそのとおりだけども、ちょっとハマったのでメモがてら。

ぼっち演算子については[safe navigation operator (ぼっち演算子)](https://docs.ruby-lang.org/ja/latest/doc/news=2f2_3_0.html)を参照。

rubyのぼっち演算子が便利なのでよく使うのですが、
条件分岐させるときに注意が必要です。

“`ruby
# hogeはnameというインスタンス変数を持つオブジェクトとします
hoge.name.blank? ? ‘空です’ : ‘空じゃないです’
“`

みたいな判定のときに

“`ruby
hoge.name = ‘値あり’
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空じゃないです’

hoge.name = ”
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空です’

hoge.name = nil
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空じゃな

元記事を表示

【Rails】郵便番号による住所検索機能を作る ※ gem 無し

## 概要

巷でよく見かける「郵便番号を入力すると該当の住所が番地以前まで自動で入力される」といった機能を Rails で作ってみました。

こういった記事はすでに世の中に溢れていますが、JQurey やら gem やらを使ったものが多く、個人的にはもっとシンプルな実装にしたかったため今回備忘録として残します。

## 下準備

※ Rails の環境構築はすでに済んでいるものとして話を進めます。

– Address モデルの作成
– Prefecture モデルの作成

住所に関する各種情報を持たせるための Address モデル、都道府県用のマスターデータとして Prefecture モデルを作成します。

| Address |
| —- |
| postal_code: 郵便番号 |
| prefecture_id: 都道府県ID |
| city: 市区町村 |
| house_number: 番地 |
| building: 建物名・部屋番号 |

“`
$ rails g model Address postal_code:integer

元記事を表示

Ruby on Rails マイグレーションファイルの修正方法

本日はRuby on Rilsのマイグレーションファイルの修正方法の紹介を致します。

○マイグレーションファイルとは
データベースの設計図の事。このファイルに記載した内容がデータベースに反映されます。

訂正の順序
①まず初めに修正したマイグレーションファイルが既に実行済みか確認をします。
ターミナルに rails db:migrate:stautusを入力してマイグレーションファイルがUPになっているか確認

②確認出来たらrails db:rollbackで元に戻します。これで修正可能になります。

③修正したらrails db:migrateを入力すると修正完了となります。

以上で大まかな流れの説明でした!ありがとうございました!

元記事を表示

Deviseの日本語化

メモとして書いておく。

## Gemの追加
“`
gem ‘devise-i18n’
gem ‘devise-i18n-views’
“`
`$bundle install`

## 日本語対応のymlファイルを作成
`$rails g devise:views:locale ja`

## i18nの翻訳を日本語にする
config/application.rbファイルの
class Applicationの中に
`config.i18n.default_locale = :ja`を追加する。

## config/locals/devise.ja.ymlに以下を追加する
この記事を参照
https://qiita.com/you8/items/921e0dd1210eb0d158df
“` config/locals/devise.ja.yml
ja:
activerecord:
errors:
models:
user:
attributes:
email:
t

元記事を表示

Render.com(無料枠) データベースの使い分け

# 新しくデータベースを作成したい場合

Render.com(無料枠)は1つまでしかデータベースを起動できないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881997/8c7f4fea-e273-da54-2910-7c58f470e06d.png)

新たに作成する際は、起動中のデータベースを停止してから行う必要があります。
Suspend Database ボタンで停止できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881997/677ca2a5-6944-ff2e-bf69-09421b1ecb53.png)

これで新たにデータベースを作成できます。
※複数データベースを作成しても、起動できるのは1つのみです。

# 体験談

Rails チュートリアルで作成した「Sample_app」を元に、
Twitterのような「tweet_app」を作

元記事を表示

【Vuex4 + Vue3 + Rails7】JWTとVuexを使ってトークンベースのログイン機能を実装する

# 環境
ruby 3.1.0
Rails 7.0.4
vue@3.2.41
Vuex@4.1.0

# 初めに

個人開発でSPAのログイン機能を実装した時のメモです。
理解不足な面も多いので、指摘いただけると嬉しいです。

ログイン状態は、Railsであればセッションで管理することができます。
セッションによる認証はサーバー側で行うため、
JSなどフロント側ではあまり気にしなくて良かったのですが、
**Vue.jsのようなSPAの場合はフロント側でも制御が必要になります。**

そのログイン状態の管理を**トークンベースの認証**で実装しようと思います。

**以下仕様**
・ログインはパスワードとメールアドレスで実行する
・ログイン後のページは「ログイン状態」でないと遷移できない
・ログイン画面は、「ログイン状態」では遷移できない
・ログイン後、リロードしてもログイン状態が保持される
・ログアウトすると、ログイン画面に遷移する

# トークンベースの認証とは
セッションを使ったログイン(認証)との違いをざっくり整理したいと思います。

## セッションを使ったログイン
セッ

元記事を表示

seed_fuのseedメソッドの引数を活用すれば、似たデータが重複して新規作成されることもないし、idをわざわざ書く必要もないぞと気づいた

## 困ったこと
Railsのseed_fu、こういう風にidなどprimary keyを書くのを巷でよく見かけます。

“`ruby:db/fixtures/users.rb
User.seed do |s|
s.id = 1 # ←
s.name = “鈴木一朗”
s.email = “ichiro@example.com”
end

User.seed do |s|
s.id = 2 # ←
s.name = “鈴木二郎”
s.email = “jiro@example.com”
end
“`

idなんて自動採番されるんだから、書く必要なくない?…ほら、削除してもデータ作れるじゃん!と無邪気にどや顔していたのですが、青二才でした。

確かにデータは作れます。しかしながら、seed_fuがいいのは、2回目以降流す時に、変更点だけを追加、または更新してくれるところ。primary keyを指定してあげないと、seed_fuは既存データか新規データかを判別できず、新しいデータをcreateしてしまいます。上記の例で言うと、鈴木一朗、鈴木二朗がダブってで

元記事を表示

indexメソッド

# indexメソッド
文字列や配列の中に、指定した文字列が含まれていたとき、その文字列が何番目から配置されているのかを整数の値で返します。

## 例
“`ruby
str.index(検索したい文字列, [検索を開始する位置])
“`

indexメソッドの公式リファレンスはこちら。
https://docs.ruby-lang.org/ja/latest/method/String/i/index.html

# indexメソッドを使ってプログラムを作成します

任意の文字列に”code”が、左から何文字目に出てくるかを返し、その数を出力するメソッドを作りましょう。

呼び出し・出力例は以下のような形で行います。
count_code(“codexxcode”) → 1(ターミナルの返し)
count_code(“aaacodebbb”) → 4(ターミナルの返し)
count_code(“cozexxcode”) → 7(ターミナルの返し)

“`ruby
def count_code(str)
puts (str.index(“code”) + 1)

元記事を表示

Ruby scanメソッド

# scanメソッド
対象の要素から引数で指定した文字列を数え、配列として返します。

“`ruby
def count_hi(str)
puts str.scan(“hi”)
end
# 呼び出し例
count_hi(‘abc hi ho’)
“`

“`ruby
hi
# ターミナル出力
“`

scanの公式リファレンスです。
https://docs.ruby-lang.org/ja/latest/method/String/i/scan.html

# scanメソッドを使ってプログラムを作成します

以下条件です。
– 条件1:対象となる文字列の中から、”is”という特定の文字列の数を取得すること
– 条件2:上記で取得した数を出力すること

“`ruby
def count_hi(str)
puts str.scan(“is”).length
end
# 呼び出し例(引数には対象となる文字列を指定します)
count_hi(“This is a pen.”)
“`

“`
2
# ターミナル出力
“`

## 解説
今回は”is”という文字

元記事を表示

Ruby if, elseを使ったプログラム

# if, elseを使ってプログラムを書きます。
あなたは警官です。aとb二人の容疑者の取り調べをしています。このとき、次のルールで証言の真偽判定を行います。
※問題文で登場したaとb二人の容疑者は、今回実装するpolice_troubleメソッドの引数として取り扱っていきます。

条件は以下の通りです。
– 条件1:第一引数aと第二引数bどちらの証言も真(true)であれば、Trueを出力すること
– 条件2:第一引数aと第二引数bどちらの証言も偽(false)であれば、Trueを出力すること
– 条件3:第一引数aと第二引数bで証言の真偽が一致しない場合であれば、Falseを出力すること

“`ruby
def police_trouble(a, b)
if (a && b) || (!a && !b)
puts “True”
else
puts “False”
end
end
“`

# 解説
この問題は、論理演算子を用いて作成していきます。
下記参考までに。
“`ruby
# aもbもtrueの場合にtrue
a && b

# a

元記事を表示

rendering_optionsが見つからない時の対処方法:Rails 7 + Devise + Turbo

:::note warn
**注意(2023/02/09追記)**
[こちらのDeviseのpull request](https://github.com/heartcombo/devise/pull/5548)はTurboに対応し、マージされてDevise 4.9.0がリリースされたらこの記事のパッチは不要になります。
:::

## Rails 7 + Devise + Turboを使うには
Rails 7のアプリでDeviseとTurboを使った時のパッチをいくつかのところで見かけました:

[【2023年版】Turboを有効化したままRails 7.0でDeviseを使う方法](https://qiita.com/jnchito/items/48db78c465493837c41f)
[Devise Auth Setup in Rails 7](https://betterprogramming.pub/devise-auth-setup-in-rails-7-44240aaed4be)
[How to use Devise with Hotwire & Turbo.js D

元記事を表示

初投稿!自己紹介

初めまして!YOSHIKIと申します!
現在オンラインスクールでプログラミングを学んでます。
主にRubyを学んでおります。

勉強する中で発信力の大事さを知り、自分が学んだ事を言語化して投稿して
自分自身の成長に繋げる目的でQiitaを利用させて頂いてます!

またいろいろな方々の投稿も確認しながら知識を得ていけたらなと思っております!

これから宜しくお願いします!!

元記事を表示

ransackのチェックボックスをtrue/falseで返したい

# はじめに
ransackのチェックボックスを使用した時にはまったのでメモを残します

# 前提
以下のadminテーブルに退職者カラムがあります。

“`
class Admin < ApplicationRecord endsuspended :boolean default(FALSE), not null end ``` ・endsuspended:true(退職している) ・endsuspended:false(退職していない) View で下記のようにチェックボックスを実装しようとしています。 チェック有り・・・全員表示 チェック無し・・・退職していない人だけ表示 ※初期表示は、チェック無しの退職していない人だけ表示させたい ``` = search_form_for @search, url: admin_admins_path do |f| = f.check_box :suspended_eq, checked: @suspended, class: "check-box" ``` # はまったところ Rancackでチェックボックスをチェックし

元記事を表示

Rubyのバージョンを管理する方法

# 初めに
今回は、自分が仕事をしてるときに必要だったRubyのバージョン管理方法を紹介してこうと思います
### 本文
まず、バージョン管理ツールの`rbnev`をインストールします
“`terminal: rbenvのインストール
brew install rbenv
“`
次に、特定のRubyバージョンをインストールするときに必要となる`libyaml`をインストールします
“`terminal: libyamlのインストール
brew install libyaml
“`
全て終わったら下記のコマンドで適用されてるバージョンを確認しましょう
“`terminal: rubyのバージョン確認
ruby -v
“`
必要なバージョンではなかった場合は下記のコマンドでインストールすることができます
“`terminal: rubyの欲しいバージョンをインストール
rbenv install 3.2.0
“`
最後にインストールしてきたバージョンを適用させましょう
“`terminal: rubyのバージョン適用
rbenv global 3.2.0
“`

###

元記事を表示

テーブルを統合する

# はじめに
テーブルの統合することがあったので、手順を忘れないように記載します。

# 要件
approachesテーブルをinformationsテーブルへ統合する

# 目次

1. [カラム追加する](#カラム追加)
1. [データをコピーする](#データコピー)
1. [テーブルを削除する](#テーブル削除)



# カラム追加
approachesテーブルにしか存在しないのは以下です。
・mail_address
・facebook
・line

#### マイグレーションファイル作成
マイグレーションファイルを作成して、統合元テーブルにしか存在しないカラムを統合先テーブルに追加する

“`
rails g migration add_columns_to_informations
“`
#### マイグレーションファイル編集

“`
class AddColumnsToInformations < ActiveRecord::Migration[5.2

元記事を表示

Ruby slice!メソッド

# slice!メソッド
配列や文字列から指定した要素を削除し、削除したあとの要素を返します。
「 ! 」の付くメソッドは***破壊的メソッド***と言います。

## 破壊的メソッド
元の配列や文字列そのものを変化させてしまうメソッドのことを破壊的メソッドと言います。
ちなみに、調べてみると「 ! 」が付かない破壊的メソッドもあります。
勉強する必要がありますね!

## slice!メソッドの例

“`ruby
string = “おはようございます!”
string.slice!(2)
puts string
#=> “おはうございます!”
# 2番目の要素の「 よ 」が取り除かれて、返ってきた
“`

# slice!メソッドを使って任意の文字列を部分的に削除するプログラムの作成

条件は以下の通りです。
– 対象となる文字列からn番目の文字を削除すること
– 削除された文字以外の文字列を出力すること

“`ruby
def string(str, n)
str.slice!(n – 1)
puts str
end
# 以下は呼び出し例
string

元記事を表示

irb起動時に表示されるプロンプト(irb(main):0001:0>みたいなやつ)を非表示にする方法

## 環境

ruby version : 3.1.1p18

## 結論から

`irb –noprompt`で起動する

参考:[library irb](https://docs.ruby-lang.org/ja/latest/library/irb.html)

## 調べた経緯

irbを普通に起動すると、`irb(main):0001:0>`のようなプロンプトが表示されます。
ローカルでちょっとrubyを動かしてコードをコピペしたい時、以下のようにプロンプトも一緒についてきてしまって見づらいので非表示にできないかなーと思って調べました。

“`ruby:irb
irb(main):005:1* class Hoge
irb(main):006:2* def fuga
irb(main):007:2* ‘fuga’
irb(main):008:1* end
irb(main):009:0> end
=> :fuga
irb(main):010:0> hoge = Hoge.new
=> #
irb(m

元記事を表示

【備忘録】Ruby 2.7で RubyXLを使っているとFrozenError can’t modify frozen String: “” というエラーが出る

Ruby2.7のバージョンを2.7系に上げたときにRubyXLを使っているファイル内で“`FrozenError can’t modify frozen String: “”“`というエラーが出るようになりました。

#### 結論

rubyXLを3.4.11以上のバージョンに上げることで解消された。

#### 原因
調べてみるとrubyのバージョンを2.7にあげた時に、gemのバージョンが追いついておらず同じエラーが起きたという記事がありました。
Ruby2.7からnil.to_sがfrozen stringを返すようになったことが原因のようです。

以下のcommitで修正されたようなので、バージョン3.4.11以降であれば動くと思います。

https://github.com/weshatheleopard/rubyXL/commit/f0ed6a28dd4f5a1b39e64123be6dbfcdee439145

元記事を表示

PostgreSQLのプライマリーキーはSERIALとUUIDのどっちが速いのか実験してみた

:::note warn
**注意**
この記事の実験は実際の運用を正確に反映していない恐れがあります(コメント欄の @hmatsu47 さんの投稿を参照)。
実務のアプリケーションでは異なる結果になる可能性もあるので、本記事の内容はあまり鵜呑みにせず参考程度に留めておいてください。

※「実務に近い環境で実験してみた」という投稿もお待ちしています!
:::

## はじめに
データベース(この記事ではPostgreSQLを対象とします)の主キーは1,2,3のような連番の整数値を主キーにするSERIALと、”00009236-b73c-4338-8ebd-e1f6c4f4fdd8″のようなランダムな文字列を主キーにするUUIDがあります。

それぞれメリットとデメリットがありますが、パフォーマンスについてはどうでしょうか?なんとなくSERIALの方がシンプルなぶん、速そうなイメージがありますが、実際はどうなのか調べてみました。

## 実行環境

– MacBook Pro 13-inch, M1, 2020
– Memory 16GB
– macOS Ventura

元記事を表示

OTHERカテゴリの最新記事