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

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

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のどっちが速いのか実験してみた

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

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

## 実行環境

– MacBook Pro 13-inch, M1, 2020
– Memory 16GB
– macOS Ventural 13.1
– PostgreSQL 14.5 (Homebrew)
– Ruby 3.2.0
– pg gem 1.4.5

## テーブル定義

SERIALを使うテーブルです。

“`sql
CREATE TABLE IF NOT EXISTS public.seq_table
(
id integer NOT NULL DEFAULT nex

元記事を表示

【初心者向け】Rubyのinitializeメソッド(初期化)とは?

今回は、`initialize` メソッドについてについて解説します。

## initializeメソッドとは?

`initialize` は特殊なメソッドで、インスタンスを初期化したい処理が発生する場合に使います。

そのため、必要がない場合は記載する必要はありません。

では、何が嬉しくなるかということを説明します。

## initializeを定義した場合

まず、下記のサンプルコードを見てください。

“`ruby
class Animals
def initialize(name)
@name =name
end

def hello
“#{@name}が鳴きました”
end
end

animals = Animals.new(‘象’).hello
p animals

#”象が鳴きました”
“`

上記コードで `Animalsクラス` を作成する際に、象を引き渡し `.hello` でインスタンスメソッドを実行します。

そうすると「象が鳴きました」と出力されます。

インスタンス、クラスの概念が分かりきっていない方は

まぁこ

元記事を表示

[Rails]既存カラムのデフォルト値を変更する方法

# 前提
ユーザー(User)テーブルに管理者フラグ(admin_flag)があるとします。
今回はデフォルトをtrueからfalseに変更してみたいと思います。
*今回がboolean型を操作しますが数値/文字列でも同様に変更可能です。

“`
Table name: users

admin_flag :boolean default(TRUE)
“`

# 手順
## マイグレーションファイルを作成
デフォルト値変更のためのmigrationファイルを作成します。
今回はデフォルト値を変更するので
“`Change[カラム名]DefaltTo[テーブル名]“`
というマイグレーションファイル名にしています。

具体的には
“`rails g migration ChangeAdminFlagDefaultToUsers“`
でファイルを作成しました。

## マイグレーションファイルの中身を記述
実際に書くのは1行追加だけになります。
“`ruby
def change
# change_column_default :テーブル名, :カラム名, from:

元記事を表示

[Rails] タグ機能/タグ一覧ページの実装

# はじめに
タグ機能をgemを使わず、実装するための忘備録です。
設計は、中間テーブルを使うToxi法、といわれる形式で作成します。

# 実行環境
– Rails 7.0.4.1
– Ruby 3.0.4
– Devise 4.8.1

# 実装
### 1. アソシエーション
![タグ機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118527/ffe07c55-d7d6-7846-7247-1ba43c8615c7.png)
articlesテーブルとtagsテーブルを多対多でつなげます。
こうすることで、tagの編集をしたいときに、それぞれのarticleを編集する必要がなくなります。

注意する点は、articlesテーブルとtagsテーブルは親子関係にはなっていないことです。
そのため、modelに dependent: :destroyとつけても articleの削除と同時に、tagは削除されません。
>構造を考えれば、当たり前なのですが、articleを削除してもtagが消えず

元記事を表示

テストにおけるリーダブルとDRYの両立(あるいは妥協案)

## Tl;DR
– テストにおいて、可読性は最重要
– 一方でDRYに書かないと保守性が悪い場合もある
– 折衷案として、コメントやインデントを活用するといいかも・・!

## 前提
– 本記事では、言語/テストフレームワークとしてRuby/RSpecを使用します
– あくまで筆者の主観/経験に基づく一意見であることに留意ください

## テストにおいて、可読性は最重要
テストにおいて、可読性は最も重要だと考えます。例えば以下のような関数をテストしたい場合、

“`ruby
# 半角数字7桁の文字列かどうかを判定する
def self.valid_postcode?(postcode)
return false unless postcode.is_a?(String)

/^\d{7}$/.match?(postcode)
end
“`

以下のようなテストコードはDRYですが、一見した時に意図が読み取りづらいです。

“`ruby
describe ‘.valid_postcode?’do
[
[‘1234567’, true],

元記事を表示

Rubyで同じ要素をカウントするメソッド

# 概要
rubyで同じ要素をカウントするプログラムを考えていたときに、リファレンスにあったメソッドについてです。

# tally
はじめは、以下のようなプログラムを考えていました。

“`
fruits = [“apple”, “grape”, “orange”, “banana”, “orange”, “apple”]

# 重複をなくす
p fruits_uniq = fruits.uniq

# [“apple”, “grape”, “orange”, “banana”]

# 種類ごとにカウントする
fruit_list = {}
fruits_uniq.each do |s|
fruit_list[s] = fruits.count(s)
end
p fruit_list

# {“apple”=>2, “grape”=>1, “orange”=>2, “banana”=>1}
“`

これを1行でできるメソッドがtallyメソッドになります。

“`
fruits.tally

# {“apple”=>2, “grape”=>1, “orange”=

元記事を表示

EC2へのdeploy時にmini_racerでエラー

Rubyのバージョンアップ対応でめちゃくちゃはまった・・・
今更ながらRuby2.5.1からひとまず2.7.7(bundler 2.4.6)へ(この後3.2.0にアップデート予定)

開発環境では順調に進むものの、capistranoを使ったdeployがまったくうまくいかない・・・
インフラ系に弱いのでまじで泣きそうだったー

とくにmini_racerとかlibv8-nodeとか、ちょっと調べるといろんな人がはまっているところに同じようにはまりました

“`
01 current directory:
01 /var/www/{appli}/shared/bundle/ruby/2.7.0/gems/mini_racer-0.6.3/ext/mini_racer_extension
01 make “DESTDIR=”
01 compiling mini_racer_extension.cc
01 linking shared-object mini_racer_extension.so
01 g++: エラ

元記事を表示

kaminariでbootstrap4を適応したファイルが作成されない時の対処方法

## 状況

– ruby: 2.4.5
– rails: 5.0.0.1
– kaminari-core-1.2.2

以下のコマンド実行するとエラー文が出る
“`bash
rails g kaminari:views bootstrap4

/usr/local/bundle/gems/kaminari-core-1.2.2/lib/generators/kaminari/views_generator.rb:117:in `get_files_in_master’: private method `open’ called for URI:Module (NoMethodError)
“`

### views_generator.rb 一部抜粋

“`rb:views_generator.rb
module GitHubApiHelper
require ‘open-uri’

def get_files_in_master
master_tree_sha = URI.open(‘https://api.github.com/rep

元記事を表示

Renderからメールが来たため翻訳してみた

# Renderからメールが来た
英文だったため、Googleの翻訳機能を利用してどんな内容だったか書き留めておこうと思います。

“`
Hi there,
Your free plan database, xxxx_production, has been suspended. Your database will be inaccessible unless you upgrade to a paid plan.
If you don’t wish to upgrade to a paid plan, your database and all backups will be deleted in 14 days, please make sure to backup your data prior to this.
You can read more about free plan databases in our docs.
If you have questions, feel free to reply to this email and we’ll get back

元記事を表示

Ruby インスタンスを生成してプログラムを作成

# インスタンスの生成を行ってプログラムをつくる

ターミナルで、以下のように出力されるようプログラムを作っていきます。

“`ruby
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
# ターミナル
“`

“`ruby
class Fruit

def self.fresh
puts “採れたて新鮮な果実です”
end

def initialize(name, price)
@name = name
@price = price
end

def introduce
puts “#{@name}は#{@price}円です”
end
end

apple = Fruit.new(“リンゴ”, 120)
orange = Fruit.new(“オレンジ”, 200)
strawberry = Fruit.new(“イチゴ”, 60)

Fruit.fresh
apple.introduce
orange.introduce
strawberry.i

元記事を表示

簡単!WSL2でRails6(Ruby3系)の環境を構築してVSCodeからrails newするまでのTips♪

# はじめに
こんにちは~~
本当は昨年の [DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor) :christmas_tree: の最終日に当日ギリギリで滑り込む予定でしたが、諸事情 ~~怠惰~~ があって2ヶ月経ってしまった @Keichan_15 が執筆する25日目最終日…そんな記事です(笑)今までの記事よりもボリューミーで濃い内容に仕上げました。温かい目で見てね:v:

最近受講生さん対応をしていると、Cloud9の調子が悪いんですよね~~ってお話をよく聞きます。どうやら東京リージョンのリソースが枯渇してるっぽい…?
障害情報は過去分を漁っているのですが、ちと見当たらず…。軒並み東京リージョンで環境構築した方は頭を悩ませていることでしょう。

https://health.aws.amazon.com/health/status

そんなこんなの状態で `rails new` してCloud9で開発を始めると「重すぎてCloud9動かせま

元記事を表示

RSpec::Expectations::ExpectationNotMetError:

# はじめに

rspecでのテスト中に`RSpec::Expectations::ExpectationNotMetError: `のエラーが
発生しました。
めちゃくちゃ凡ミスでした。二度としないように備忘録に残しておきます!!!

※`Rspec`、`FactoryBot`は導入済みの状態で始まります。

# エラー紹介
~~~
bundle exec rspec spec/models/item_spec.rb
~~~
実行時に

~~~ruby
RSpec::Expectations::ExpectationNotMetError: expected # to be valid, but got

元記事を表示

Active Storageを使った画像アップロード

# はじめに

Rails勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# Railsガイド

https://railsguides.jp/active_storage_overview.html#active-storage%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

# Railsでの画像アップロード

代表的な方法として下記2つのパターンがあるが、1について記載する。
Rails5.1までは`carrierwave`という`Gem`のインストールが一般的であったが、
Rails5.2以降は`Active storage`という便利機能が追加されたため、新たな`Gem`のインストールは不要となった。

1. `Active Storage`と`image_processing`を使用する
2. `carrierwave`と`mini_magic`を使用する

# Active Storageとは

元記事を表示

Ruby timesメソッドを使った繰り返し処理を行うプログラムを書く

# 繰り返し処理を行うプログラムの作成

– ユーザーに数字を入力してもらい、その数の回数だけHello world!と表示させるコードを記述します。

“`ruby
def output(num)
num.times do
puts “Hello world!”
end
end

puts “何回表示させますか?”
num = gets.to_i
output(num)
“`

## 解説

– メソッド外の部分
“`ruby
puts “何回表示させますか?”
num = gets.to_i
output(num)
“`
上記コードは、ファイルを実行したときにターミナルで出力される内容を書いています。
ユーザーに数字を入力させることで、「Hello world!」が何回表示されるのかを実行するためです。
getsメソッドで入力した値は、全て***文字列***で返します。
そのため、***.to_i***を付けて数値に変換させます。

– output(num)
ユーザーが入力した数値を、メソッド内で呼び出したいため、numという引数を使います。

– out

元記事を表示

Ruby on Rails初心者の学習記録 Part5:復習

# はじめに
Ruby on Rails初心者の学習記録Part5です。
今までRubyの基礎文法から始まり、RailsにおけるMVCやCRUDについて学んできました。
今回は、[“Getting Started with Rails”](https://guides.rubyonrails.org/getting_started.html) の [“8 Adding a Second Model”](https://guides.rubyonrails.org/getting_started.html#adding-a-second-model) を教材にコメント機能の実装を通して、今まで学んできたことを復習します。

# 1. モデルの作成
[Part2](https://qiita.com/Yasushi-Mo/items/5dfe81d39b5a153fe43c#2-%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)で記事データを扱うために作成した`Article`モデルのようにコメントデータを扱う`Comment`モ

元記事を表示

【初心者の備忘録】rbenvとRuby3.2のインストールについて

備忘録として記載しています。

Rubyは(というかプログラミングはほぼ)初心者で、四苦八苦しながらインストールしています。

聞き慣れない「rbenv」とは何かまとめます。

# rbenvとは

[こちら](https://valed.press/programming-learning/how-to-install-ruby-with-rbenv/#:~:text=rbenv%E3%81%A8%E3%81%AFruby%E3%81%AE,%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)によると、複数のrubyのバージョンを管理するものだそうです。読みは「アールビーエンブ」で良さそうです。
別に複数のバージョンを管理したいわけでないですが、一般的なもののようなので、こちらを使います。

# rbenvにてインストールできるRubyのバージョン確認

恒例クリスマスにリリースされたRuby3.2をr

元記事を表示

Rails7の環境構築 (Docker, Bootstrap)

普段はC言語を触っていますが、
ちょっと別の案件でRailsやらDockerやらを触る必要があったので備忘録的に書いてみます。

### 参考にした記事
* [Docker + Rails7 + bootstrap5](https://qiita.com/mkt1234/items/b852eeeb213e46702236)
* [Ruby on Rails 7 with Bootstrap on Docker Compose 開発環境を簡単に構築する方法](https://qiita.com/normalsalt/items/8bf6c5010c9e9f127582)

## 開発環境構築
### ディレクトリを作成
“`
mkdir rails
cd rails
“`

### 各種設定ファイルを作成
以下のファイルを作成する。
##### Dockerfile
いろいろ試してみたが、上手くいかなかったので[こちら](https://qiita.com/mkt1234/items/b852eeeb213e46702236)のDockerfileを参考にさせていただいた。

元記事を表示

OTHERカテゴリの最新記事