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

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

Ruby3.2をインストールするとき、libyamlが必要

## はじめに
Ruby3.2をインストールしようとした時にエラーが発生したので、解消方法をまとめていきます。

## 問題
“`sh
$ rbenv install 3.2.0

BUILD FAILED
“`

## 解決方法
Ruby3.2からlibyamlやlibffiのライブラリのソースコードの同梱が廃止されています。
libyamlをyumなどでインストール後、Rubyをインストールすると正常にインストールできます。

“`sh
$ yum install libyaml-devel
“`

## 参考
https://zenn.dev/fuuukeee3/articles/22caeb537cf1a6

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

元記事を表示

Everyday Rails – RSpecによるRailsテスト入門を読んだ

# はじめに
今回railsの学習に伴いテストフレームワークの学習として
Everyday Railsを読みましたのでそのアウトプットとして本記事を作成しました。
# 学んだこと
* **意味のあるテストデータの作成**
* Factory Bot
* テストにおけるサンプルデータを作成するためのgem
* “`bin/rails g factory_bot:model モデル名“`でファクトリのファイルを作成
* 以下ファクトリの構成例。用意するとスペック全体でファクトリが使用可能になる。
“`
FactoryBot.definedo
factory :モデル名 do
//データを囲む中括弧({})は必須
カラム1 { “test1” }
カラム2 { true }
カラム3 { 1234 }
end
end
“`
* “`FactoryBot.build(:モデル)“`のような

元記事を表示

【紹介】「認可」を実装する方法3選_Rails

# はじめに
「認証」は、多くのRailsアプリケーションで、`devise`が使用されているかと思います。
ただ、「認可」に関しては、皆さんどのように実装されていますでしょうか?

今回実装するにあたって、考えた方法を3つご紹介いたします。

:::note warn
「認証」と「認可」の違いに関しては、本記事では解説いたしません。
詳しくは、以下の記事が参考になりますので、ご覧ください。
:::

今さら聞けない認証と認可の違い ゼロトラストセキュリティ対策

# 3選の紹介
## ① Pundit ・ cancancan
https://github.com/varvet/pundit

https://github.com/CanCanCommunity/cancancan

上記2つとも、認可周りをサポートしてくれるgemです。
ライブラリを使用すると、実装が楽になるのはとても良いですね。

昔からあるイメージですが

元記事を表示

HackTheBox Perfection WriteUp

今回はHackTheBoxのEasyマシン「Perfection」です!
マシンの名前からはあまりどのようなものか想像できませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/e9a8e99b-7b93-eb3e-25f7-11ee49768c08.png)

グラフはいつものEasyマシンと変わらない感じですね。
評価も高いので、面白そうです!サクッと攻略していきましょう~!

HackTheBoxって何?という方は下記の記事を見てみてください!一緒にハッキングしましょう〜!

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!

https://qiita.com/Perplex/items/30f949fe261f56af7476

## Perfection

### 列挙

それでは

元記事を表示

【初心者向け】RailsアプリをRenderでデプロイする手順(mac)

## 背景
今回はRailsアプリを作ってデプロイする上で、
2024年7月時点において最も簡単かつモダンにデプロイする手順についてです:sunglasses:

当方、駆け出しエンジニアですがrailsデプロイに苦しんだため、
同じくデプロイで苦しんでおられる方の一助となればと思います:grinning:

webアプリは有料プラン(starter:月$7~)でないと動作が不安定なのでご注意ください。Freeプランだとエラーが出る場合があります。Freeで失敗したら有料プランの移行を検討してください:hushed:
データベースは90日まで無料で運用できますが、90日でデータベースは削除されるので継続運用される場合は有料プラン(starter:月$7~)に移行をお願いします:bow:

## 手順
大きく以下の流れで進行します。

1.PC上のアプリ内準備
2.Railsアプリのデプロイ
3.データベースのデプロイ
4.Railsアプリとデータベース接続

## PC上のアプリ内での準備

### Gemfileの編集

以下のような変更を加えてください。

“`diff_c:

元記事を表示

Ruby内部で学ぶ10進数変換処理

## Rubyでの10進数変換処理

Rubyでは、`to_i` メソッドに基底(2進数の場合は、2)を引数に指定して、実行することにより10進数に変換が出来ます。

“`ruby
irb(main):001> “100”.to_i(2)
=> 4
“`

右桁から計算するのが一番直感的ですが、

“`ruby

target_str = ‘101’
reversed_target_str = target_str.reverse!
base = 2
total_decimal = 0

reversed_target_str.each_char.with_index do |target_char, index|
target_int = target_char.to_i

decimal_value = target_int * (base ** index)

total_decimal += decimal_value
end
“`

Ruby内部ではどのように計算されているのでしょうか。

## Ru

元記事を表示

【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を利用することで、負荷に応じて自動的にリソースを増減させることができます。これにより、ピーク時の負荷にも対応でき、コスト効率も向上します。

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

サーバーレスアー

元記事を表示

OTHERカテゴリの最新記事