Ruby関連のことを調べてみた

Ruby関連のことを調べてみた
目次

【Ruby】配列のうしろに配列の要素を追加する

配列のうしろに配列を追加する方法です。

“`ruby
array1 = []
array1.push(1)
array1.push(2)

for i in array1 do
puts i
end
“`

実行した結果
![tst.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710584/4634b553-9e8f-9ce4-75b2-49d7d863255e.jpeg)

元記事を表示

【Ruby】「ブロック」と「プロック」

# はじめに

Ruby学習者へ

:::note warn
「**プ**ロック」と「**ブ**ロック」は別物です
:::
私は見間違えました。

# ブロック / Block

ブロックとは **「コードの塊」** です。
**「メソッドに渡す」** ために使用します。

:::note
`{ … }`を使うケース
“`rb
[1, 2, 3].each { |num| puts num }
“`
:::

:::note
`do … end`を使うケース
“`rb
[1, 2, 3].each do |num|
puts num
end
“`
:::

# プロック / Proc

プロックとは **「ブロックをオブジェクト化したもの」** です。

:::note
“`rb
my_proc = Proc.new { |num| puts num }
# または
my_proc = proc { |num| puts num }
“`
:::

# 詳細

この記事は **「ブロック」と「プロック」を見間違えないように!** という記事です。

それぞれの詳

元記事を表示

【Ruby】`==` / `===` / `equal?` / `eql?` はけっこう別物

# はじめに

`==` / `===` / `equal?` / `eql?` は別物のようです。

# `==`:値が等しいかを返す

“`rb
p “foo” == “foo” #=> true
p 4 == 4 #=> true
p 4 == 4.0 #=> true
“`
# `===`:値を含むかを返す

厳密には誤った用法かもしれませんが、大枠は「含む」イメージで正しいと思います。

Rubyリファレンスマニュアル

:::note
以下のように説明されています。
>case 式で使用されるメソッドです。

>このメソッドは case 式での振る舞いを考慮して、各クラスの性質に合わせて再定義すべきです。

>デフォルトでは内部で Object#== を呼び出します。

[Object#===
](https://docs.ruby-lang.org/ja/latest/method/Object/i/=3d=3d=3d.html)

>Range#=== は主に case 式での比較に用いられます。

[Rang

元記事を表示

Rubyでデザインパターン (8) AbstractFactoryパターン

## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

## AbstractFactoryパターンとは
AbstractFactoryパターンとは、 インターフェースによって関連するまたは依存しあうオブジェクトのファミリーを、具体的なクラスを指定せずに生成するためのパターンです。

詳しくはこちらをご覧ください。

https://qiita.com/kaikusakari/items/8943247246cb243b8fd6

## Rubyでのコード例

以下は、RubyでAbstractFactoryパターンを実装する例です。
インターフェースを`module`を使って実装しています。

“`rb
module AbstractProductA
def useful_function_a
raise NotImplementedError
end
end

class ConcreteProductA1
include AbstractProductA

元記事を表示

【Ruby】ちゃんと動かないcase/when

## はじめに:突然ですが、問題です
こんなメソッドがあります。

“`ruby
def role_name(role)
case role
when ‘Admin’
‘Administrator’
when
‘Member’
else
‘Guest’
end
end
“`

このとき、以下のコードの実行結果はどうなるでしょうか?

“`ruby
puts role_name(‘Admin’)
puts role_name(‘Member’)
puts role_name(‘Guest’)
“`

正解はCMのあとで!!

<CM>

Rubyを知れば、Railsはもっと楽しくなる。
「プロを目指す人のためのRuby入門 改訂2版」好評発売中!🍒

https://ruby-book.jnito.com/

<CMおわり>

では正解です。先ほどのコードを実行するとこうなります。
(おや、”Member”が出力されませんね :thinking: )

“`
Administrator

Guest
“`

あなたは正解しましたか!

元記事を表示

allow(Kernel).to receive(:sleep)でsleepメソッドをmockできない場合の対処法

# 解決したいこと

RSpecでテストを実行するとき、実装に含まれている`sleep`メソッドで待機時間が発生し、テストの実行時間が増大してしまうので対処したい。

## 具体例

`Sample#test`についてテストする例。

“`lib/sample.rb
class Sample
def test
sleep 10
end
end
“`

sleepメソッドはKerenlクラスのメソッドなので、Kernelクラスでmockしようとしてみる。

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/sleep.html

“`spec/lib/sample_spec.rb
require_relative ‘../../lib/sample’

describe Sample do
it ‘not to sleep’ do
allow(Kernel).to receive(:sleep)

expect { sample.test }.to_not raise_error
en

元記事を表示

rbenvでRubyのバージョンが更新されないときの対処法

# はじめに
Rubyのバージョン管理で直面した問題について共有します。

# 問題
問題の背景は、プロジェクトでRubyのバージョン`2.7` , `3.3`を必要としていて、現在使用している Ruby のバージョン `2.6.5` をアップグレードする必要がありました。

このアップグレードで直面した主な問題は、`rbenv` を使用して新しいRubyのバージョンをグローバルに設定しても、期待通りのバージョンがシステムに反映されなかったことです。

“`zsh
# Ruby 2.7.2 をインストール
rbenv install 2.7.2

# インストール後の Ruby バージョンを確認
ruby -v
# 出力: ruby 2.6.5
“`

# 解決方法
以下の手順で解決していきます。

## 1. 現在のRubyバージョン状況の確認
`rbenv` が管理しているRubyのバージョンと現在使用されているバージョンを確認します。`rbenv versions` を実行して、Rubyバージョンが更新されない原因が分かってきました。

“`zsh
# 現在インストールされ

元記事を表示

RSpecを導入する手順

# はじめに

Rubyで何かを開発するにあたってRSpecを導入したい。

https://rspec.info/

RSpec公式の「Let’s get started!」を見たり、[RDoc](https://rspec.info/documentation/3.13/rspec-core/#install)を読んだりして導入はできるけど、メモ書き程度に導入手順を残す。

なお、RubyやBundler、gitは導入済みであるとする

# 手順

## 1. 開発用のディレクトリを作る

“`sh
$ mkdir awesome_directory
$ cd awesome_directory
“`

## 2. budler init

開発用のディレクトリの中でGemfileを生成する

“`sh
$ bundler init
$ ls
Gemfile
“`

## 3. Gemfileを編集する

“`Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

gem “rspec”,

元記事を表示

【初心者】JRubyでSQLiteデータベースを読み書きする

# 手軽に使えるSQLiteだが思ったよりも苦労した

何もわざわざJRubyなんて使う必要ないと言われそうなんですが、プログラミングを人に教えるときにデータベースの使い方を扱う必要が出てきまして、Windowsで手軽に環境構築できるので、JRubyを使うことにしました。

また、手軽に利用できるデータベースを探していたところSQLiteにたどり着きました。実際、selectは他のDBよりもかなり速いですね(個人が利用する範囲ならば)

ネットで色々と検索したのですが、自分の環境ではJRuby + SQLiteの読み書きは、Rubyのライブラリーではあまりうまく行きませんでした。

普段からJavaでsql2o( https://www.sql2o.org/ )を利用していたので、これをJRubyで呼び出せば行けるのではないかと考えました

# 準備

sqlite-jdbc-3.46.0.0.jar , slf4j-api-1.7.30.jar , slf4j-simple-1.7.30.jar ,sql2o-1.8.0.jar を使います。

sqlite-jdbcは、slf4jに

元記事を表示

AWS ECS上からRailsアプリケーションにBedrock+Claude 3 Haikuを取り込んでみた

## Claude 3 Haikuは安い・美味い・速い

基本的に応答スピードが早く、日本語入出力にも長け、速いのが特徴です。

以下Bedrock経由での価格ですが、Claude 3 Sonnetは他と比較して1/10以下の金額で使えるのが非常に良いです。応

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293892/9cb13398-28c5-532c-d88b-556845799872.png)

詳細はコチラ

https://aws.amazon.com/jp/bedrock/pricing/

2024年7月時点で、応答速度もSonnetの2倍程度はやく、非常に魅力的です。個人で使ったり、製品のプロトタイプとして活用するには非常に魅力的です。

## AWS Bedrockを使うメリット

– 学習・管理コスト
– AWSに慣れているエンジニアが弊社には多かった
– AIだけAzureに外出しせずとも、AWS内ですべて完結出来る
– セキュリティ

元記事を表示

【個人開発】誰でも簡単に謎解きを作成・回答できる「EnigmaPortals」をリリースしました!👓

## はじめに
皆様初めまして、[ヒデボー](https://x.com/yamarice428 “ヒデボー”)と申します!
プログラミングスクール「RUNTEQ」に入学し現在、WEBエンジニア転職を目指して学習&転職活動を行なっています!
今回、個人開発ポートフォリオとして[EnigmaPortals~謎クリエイト~](https://enigmaportals.com/)を開発しました!

## サービス名
#### EnigmaPortals ~謎クリエイト~

[![Image from Gyazo](https://i.gyazo.com/0d8b483df7e4c9eb17e3b01e828333da.png)](https://gyazo.com/0d8b483df7e4c9eb17e3b01e828333da)

#### ・サービスURL

https://enigmaportals.com/

#### ・Github URL

https://github.com/yamadahideto/EnigmaCraft

## サービス概要
自作の謎を投稿、**AIを使

元記事を表示

書式指定文字列の不思議な挙動

# これは何?

書式指定文字列に変なこと書いてもエラーにならない事に気づいて、色々試してみた記録

# 各種言語の対応

## go

この現象を発見したのは go。

“`go:go
fmt.Printf(“%d %+d %++d %+++d %++++d\n”, 1, 1, 1, 1, 1)
//=> 1 +1 +1 +1 +1
“`

二個以上書いても意味ないけど、エラーにならない。

`+` を書ける場所には ` ` も書けるが、意味的に共存できない。

戦わせると

“`go:go
fmt.Printf(“[%+d]\n”, 1) // [+1]
fmt.Printf(“[% d]\n”, 1) // [ 1]
fmt.Printf(“[%+ +d]\n”, 1) // [+1]
fmt.Printf(“[% + d]\n”, 1) // [+1]
“`

`+` が勝つ。

後勝ちだろうと予想していたので、予想が外れた。

## ruby

ruby も同様に `”%++++++++++++d” % 1` などはエラーにならない。

戦わせてみると

“`ru

元記事を表示

Secrets Managerをrubyのコードから実行してみる

## はじめに
前からSecrets Managerを触ってみたいと思っていたので、今回使ってみることにしました。

## secret managerとは
公式より
>AWS Secrets Manager は、データベース認証情報、アプリケーション認証情報、OAuth トークン、API キー、およびその他のシークレットをライフサイクルを通じて管理、取得、ローテーションするのに役立ちます。多くの AWS サービスは、Secrets Manager でシークレットを保存して使用します。

例えば、Secrets Mangerを使用すると、APIによってデータベース認証情報を取得することができ、なおかつ鍵の更新を自動で行うことができます。

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/intro.html

## Secrets Managerの設定方法
実際に、Secrets Managerの設定をして、使用してみたいと思います。
以下の手順でやっていきます。

**新しいシークレットを保存する**

元記事を表示

スケーラビリティを考慮したクラウドネイティブなスクラム開発の実践

## はじめに

こんにちは、皆さん。今回は、クラウドネイティブなスクラム開発においてスケーラビリティを考慮する方法についてお話しします。クラウドベンダーの多様なサービスを活用しながら、どのようにしてプロダクトのスケーラビリティを確保するかについて、具体的な例を交えて解説します。

## スケーラビリティとは?

まず、スケーラビリティとは何かを簡単におさらいしましょう。スケーラビリティとは、システムが負荷の増加に対してどれだけ効率的に対応できるかを示す指標です。具体的には、ユーザー数やデータ量が増加した際に、システムがどれだけスムーズに動作し続けるかが問われます。

## クラウドサービスの活用

### オートスケーリング

クラウドベンダーの多くは、オートスケーリング機能を提供しています。例えば、AWSのAuto ScalingやGoogle CloudのInstance Groupsを利用することで、負荷に応じて自動的にリソースを増減させることができます。これにより、ピーク時の負荷にも対応でき、コスト効率も向上します。

### サーバーレスアーキテクチャ

サーバーレスアー

元記事を表示

Ruby 3.3 リファレンスマニュアルのEnumerableモジュールの概要を要約してみる※備忘録

私自身、リファレンスを見ることをしていなかったことを見直し、改めてリファレンスを見ながらRubyを学習しようと思い、早速mapメソッドが気になったので、以下のリファレンスを見てみることにした

Ruby 3.3 リファレンスマニュアル ライブラリ一覧 組み込みライブラリ Enumerableモジュール
https://docs.ruby-lang.org/ja/latest/class/Enumerable.html#I_ALL–3F

しかし読んでみると早速、要約で詰んでしまった。
<以下要約>
繰り返しを行なうクラスのための Mix-in。このモジュールのメソッドは全て each を用いて定義されているので、インクルードするクラスには each が定義されていなければなりません。

Array, Hash, Range, Enumerator等のクラスで、 Enumerableモジュールはインクルードされています。ただし、効率化のため、そのクラスでEnumerableと同名・同等の機能を再定義(オーバーライド)しているケースも少なくなく、特にArrayクラスでは同名のメソッ

元記事を表示

ユーザーアクセスログを監視するためのベストプラクティス

## はじめに

こんにちは、皆さん!今回は、ユーザーアクセスログを監視するためのベストプラクティスについてお話しします。クラウドベンダーの多様なサービスを活用しながら、効果的なログ監視を実現する方法を探っていきましょう。

## なぜユーザーアクセスログを監視するのか?

ユーザーアクセスログの監視は、セキュリティの強化、パフォーマンスの最適化、ユーザー行動の分析など、多くの利点があります。これにより、システムの異常を早期に検知し、迅速に対応することが可能になります。

## クラウドベンダーのサービスを活用する

### AWS CloudWatch

AWS CloudWatchは、AWSのリソースとアプリケーションの監視に最適なサービスです。ログデータを収集し、リアルタイムでモニタリングすることができます。アラームを設定して、特定の条件が満たされたときに通知を受け取ることも可能です。

### Azure Monitor

Azure Monitorは、Azureのリソースを監視するための包括的なソリューションです。ログデータを収集し、分析することで、システムのパフォーマンス

元記事を表示

【Render × Xserver】独自ドメインでのデプロイ時の注意点と解決策

# はじめに
本記事では、「**Render**」にデプロイしたアプリを独自ドメインで公開する際の注意点と解決策についてまとめます。今回は、「**お名前.com**」での**ドメイン取得**ができなかったため、以前契約していた「**Xserver**」を利用しました。

この記事が皆さんのお役に立てば嬉しいです!

https://www.xserver.ne.jp/

https://www.onamae.com/

# 前提/条件
– rails7系
– ruby3.2.3
– PostgreSQLを使用
– Renderでデプロイ済み
– Xserverでドメイン取得される方

# 注意点

### XserverでDNSレコード画面で「DNSレコードの確認・設定を行うことができません」表示

![Xserver-error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772961/024ae093-eeb1-2cd6-f3d8-4dcfb18d3a75.png)

DNSレコードの表示ができ

元記事を表示

[個人開発] 食品の在庫を簡単に管理できるサービスを作ってみました

## はじめに

こんにちは。ryosuke([@ryousuke_doi](https://x.com/ryousuke_doi))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

今回リリースしたサービスの紹介と開発の振り返りをまとめてみました。
記事を書くのが初めてなので、温かい目で見ていただけると幸いです。また、技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。
## 作成したサービスの紹介
[![Image from Gyazo](https://i.gyazo.com/385a7078b695448cfef79567d7cd142b.jpg)](https://gyazo.com/385a7078b695448cfef79567d7cd142b)

### サービスURL(レスポンシブ対応済み)

https://pantry-chef-notifier.onrender.com

https://github.com/ryo-mogura/Pantry-Che

元記事を表示

New Relic を使って Redmine のオブザーバビリティを実現

# はじめに
 Redmine は、プロジェクト管理ができる人気のあるオープンソースのツールです。多くの企業や開発チームがタスク管理、バグトラッキング、ガントチャートなどの機能を活用して効率的にプロジェクトを運営しています。しかし、プロジェクトの規模が大きくなるにつれて、システムのパフォーマンスを監視し、最適化することが重要になってきます。ここで役立つのがNew Relicです。

 New Relicは、アプリケーションのパフォーマンスをリアルタイムでモニタリングし、問題を迅速に特定・解決するためのツールです。エンドユーザーの体験を向上させるために、リソースの使用状況、レスポンス時間、エラー率などを詳細に分析できます。これにより、 Redmine のパフォーマンスを向上させ、ユーザーの満足度を高めることができます。

 Redmineはプラグインの導入などでカスタマイズされることが多いです。こうした場合、New Relicを使って収集したデータからボトルネックを特定したり、データベースのインデックスを見直す必要があるかどうかなどの洞察を得ることができます。

 今回は Redmine

元記事を表示

37signalsが書くコードの”Service Object”を見てみる

## 挨拶

自称、Ruby on Rails フロントエンドエンジニア🤣のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaも頑張り始めました。

それでは早速本題です!

## ええっ!!??
37signals商品のRailsコードって見られるの?

そう!Ruby on Railsを開発した37signals社が、どのようにこのフレームワークを活用し、どのようなコードを書いているかを見ることができるのだ!

細かい話は省くが、7月3日に37signals社は[Writebookというアプリを新規に公開した](https://world.hey.com/jason/introducing-writebook-e217cae3)。自由にダウンロードでき、自分でサーバ(例えばさくらインターネットのサーバとか)を用意すれば、[簡単にインストール](https://books.37signals.com/2/the-writebook-manual/27/installation)できる。(

元記事を表示

OTHERカテゴリの最新記事