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

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

Ruby3.2.0-devのインストール時にrequire bison 3.0と出てインストールできない時の対処法

rbenvを利用してruby3.2.0-devのインストールを試みたところ、bisonのversionが低いというコンパイラ関連のエラーで躓いてしまいました。
同じ問題でインストールできない方のお役に少しでも立てたらと思い、解決までのプロセスを共有します。

# 3.2.0-devのインストールの準備
[ruby-buildの公式ページ](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment)にて3.2.0-devのインストールに必要な手順を確認し、下記のとおり実行。
1. openssl@3及び関連ライブラリのインストール
`brew install openssl@3 readline libyaml gmp`
2. opensslコンパイルのための環境変数を.zshrcに設定(`source ~/.zshrc`をお忘れなく)
`export RUBY_CONFIGURE_OPTS=”–with-openssl-dir=$(brew –prefix openssl@3)”`
3. [YJIT](

元記事を表示

Ruby3.1.2のインストール時にNothing to be done for `_build_programs’と出てインストールできない時の対処法

rbenvを利用してruby3.1.2のインストールを試みたところ、opnesslのコンパイル関連のエラーで躓いてしまいました。
同じ問題でインストールできない方のお役に少しでも立てたらと思い、解決までのプロセスを共有します。

# エラー内容

ruby3.1.2をinstallしようとしたところ下記のエラーが発生。
“`
$ rbenv install 3.1.2
Downloading openssl-1.1.1n.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a
Installing openssl-1.1.1n…
~/.rbenv/plugins/ruby-build/bin/ruby-build: line 1127: ~/.rbenv/versions/3.1.2/openssl/ssl/cert.pem: No such file or directory

BUILD FAILED (

元記事を表示

配列の正規化でArray()を使うな!

2023年2月某日、Twitterが氷河期になりTLが荒れ狂う最中、私は一つのコードに苛まされていた。
配列の正規化を行うため、以下のコードを実行したところ、

“`rb
fp = File.new(“hoge.mp4”)
Array(fp)

=> [“謎のデータ配列”] # [fp] が帰ってくる予定だった
“`

**は????????**

## 配列の正規化とは

配列またはObject、いずれかの値がやってくる場合に、
配列または[ Object ]、に変換しその後の処理を簡潔にするためのテクニックのこと

たとえば

“`rb
def hoge(file_or_files)
# ↓ ここが配列の正規化
files = file_or_files.is_a?(Array) ? file_or_files : [file_or_files]

files.each do |file|
# 個々のファイルに対して処理をする

end
end
“`

のように書くと、引数の形式をそこまで気にせずに良くなるってヤツ

自分が確認し

元記事を表示

Ruby13

# 問題
以下のように、果物の名前と値段が入った配列があります。
この配列を用いて、果物の名前とそれぞれの合計額が出力される
コードを記述してください。

“`Ruby
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]
“`

“`Ruby:ターミナル
appleの合計金額は670円です
orangeの合計金額は300円です
melonの合計金額は2700円です
“`

# 模範解答
“`Ruby:模範解答
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]

fruits_price.each do |fruit|
sum = 0
fruit[1].each do |price|
sum += price
end
puts “#{frui

元記事を表示

Ruby [eachメソッド] eachの入れ子を使ったプログラム

# eachの入れ子

“`ruby
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]
“`
上記配列を利用して、apple, orange, melonそれぞれの合計金額を出力するプログラムを書きます。

“`ruby
fruits_price = [[“apple”, [200, 250, 220]], [“orange”, [100, 120, 80]], [“melon”, [1200, 1500]]]
fruits_price.each do |fruit|
sum = 0
fruit[1].each do |price|
sum += price
end
puts “#{fruit[0]}の合計金額は#{sum}円です”
end
“`

– fruits_price.each do |fruit|
[“apple”, [200, 250, 220]という値を取り出し、変数fruitに代入します

元記事を表示

Ruby eachメソッド

# eachメソッドについて

eachメソッドは、配列や要素の1つひとつに対して、要素の数だけ名前をつけて取り出すことができる処理を行います。


“`ruby
colors = [“赤”, “黄”, “青”]
colors.each do |color|
puts “#{color}色”
end
“`

“`ruby
赤色
黄色
青色
# ターミナル出力
“`
each doの後にブロック変数( |[変数]| )を記述します。
そうすることで、繰り返し処理が実行されるたびに、配列・ハッシュの値がそれぞれブロック変数に格納され、その値を処理の中で使用することができます。

# timesメソッドで配列の全ての要素に対して繰り返し処理を書くとどうなる?

“`ruby
colors = [“あか”, “あお”, “きいろ”]
element_count = colors.length # 要素数を変数に代入
element_count.times do |i|
puts “色: #{colors[i]}” # 添字0から要素を出力
end
“`

“`r

元記事を表示

Ruby if文を使った条件分岐

# 条件分岐の例

下記条件沿ってプログラムを書く。

– 条件1:10以下なら10以下の数字です
– 条件2:10より大きい数値なら10より大きい数字です
– 条件3:10以下でかつ0以下なら0以下の数字です

“`ruby
input = gets.to_i
if input <= 0 puts "0以下の数字です" elsif input <= 10 puts "10以下の数字です" else puts "10より大きい数字です" end ``` if文は先に書いた条件から判断していきます。
先に書いた条件に当てはまった場合、それより後に書いた条件に当てはまったとしても、条件の処理はスルーされてしまいます。
もし以下のように書くと、ターミナルではどのように出力されるか考えます。

“`ruby
if input <= 10 puts "10以下の数字です" elsif input <= 0 puts "0以下の数字です" end ``` 上記条件で、10を入力すると、"10以下の数字です"と返ってきます。 上記条件で、0を入力

元記事を表示

【Raills】rails6.1.7 × Docker × MySQLの環境構築の際の疑問点を解消

# はじめに
DockerでrailsとMySQLの環境構築を初めてしていく中で「ここなんでこうなるの!?」という箇所が何個かあったり、私がエラーで詰まった場所があったので共有したいと思います。

### バージョン
下記のバージョンで実行環境を構築しました。

* ruby 3.2
* rails 6.1.2
* MySQL 8.0
* Docker 20.10.12

# 必要なファイルを作成
任意のディレクトリを作成し、その直下に
`Dockerfile`
`docker-compose.yml`
`Gemfile`
`Gemfile.lock`
を作成します。  
今回は`my_rails`というディレクトリで進めていきます。

### Dockerfile
“`Docker:Dockerfile
FROM ruby:3.2
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev && \
curl -fsSL https://deb.nodesource.com/

元記事を表示

ローカルテストでdynamodbを動くようにした

# 環境
ruby(ruby 3.1.1p18)
rails(Rails 7.0.2.3)
docker
minitest(ローカルテスト)

# やりたいこと
docker-composeのタイミングでdynamodbにテーブルを作成する。
テストケース単位でfixtureを読み込み、テーブルにデータをインサートする。

# 環境作成
dynamodbのコンテナイメージとテーブル作成用のawscliのコンテナイメージを使用します。
“`yaml:docker-compose
dynamodb-local:
command: “-jar DynamoDBLocal.jar -sharedDb -dbPath ./data”
image: “amazon/dynamodb-local:latest”
ports:
– “8000:8000”
working_dir: /home/dynamodblocal
volumes:
– /local_path/:/ho

元記事を表示

Rubyでコマンドライン引数を扱う方法 optparse(2023/2/3)

Rubyにはコマンドラインを扱う方法が色々ありますが、今回はコマンドライン引数を扱うための有名なライブラリとして、**optparse**を紹介します。

## 概要
optparseは、Rubyの標準ライブラリであり、コマンドラインオプションを解析するためのライブラリです。
これにより、Rubyのスクリプトを実行する際に、ユーザーが指定するオプションを解析し、適切な値を取得することができます。

下記、公式のマニュアルがあるので参照ください。

[library optparse (Ruby 3.1 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/library/optparse.html)

## 基本的な使い方
1) まずは、optparseを使うために、requireします。
“`ruby:sample
require ‘optparse’
“`

2) 次に、OptionParserオブジェクトを作成します。
“`ruby:sample
options = OptionParser.new do |opt

元記事を表示

【Rails】render.comを使ってデプロイする

# 概要
– render.comを使用して、アプリケーションをデプロイする
– 無料プランを利用&クレジットカードの登録は行ない

# 開発環境
– OS:MacOS(m1チップ)
– 言語:ruby 3.1.2
– フレームワーク:Ruby on Rails7.0.2
– DB:PostgreSQL(←要注意:詳細後述)
– Docker等のコンテナは使わず、PCのローカル環境に構築

# 本番環境(production環境)を用意する
“`ruby:Gemfile
group :production do
gem “pg”
end
“`
ここで注意が必要
`gem “pg”`はPostgreSQLを使用するために導入(筆者はsqliteを使用していた)
render.comはデータベースをPostgreSQLしかサポートしていないため、
MySQLやSQLite等を使用している場合は、本番環境のデータベースのみPostgreSQLnに変更する必要がある

### gemをインストールする
“`
bundle install
“`
# render.yamlの作成
以下

元記事を表示

Ruby12

# 問題
ターミナルから数字を入力して、数字に応じて以下のように出力するプログラムを書いてください。

・10以下なら10以下の数字です
・10より大きい数値なら10より大きい数字です
・10以下でかつ0以下なら0以下の数字です

“`Ruby:雛形(ソースコードを追記すること)
input = gets.to_i
“`

# 模範解答

“`Ruby:模範解答
input = gets.to_i

if input <= 0 puts "0以下の数字です" elsif input <= 10 puts "10以下の数字です" else puts "10より大きい数字です" end ``` # 【解説】 ### ①ターミナルから数値を入力する書き方 ターミナルから数値を入力するにはgetsというメソッドを使います。 このgetsメソッドを使って入力した値は全て文字列になるため、getsの値をto_iメソッドを使って数値に変換します。 ### ②条件分岐の書き方 条件分岐はif文を使います。今回は3つのパターンで分岐するためelsif

元記事を表示

【テックジム無料講座】Ruby on Rails講座 <問合せフォームを作ろう>の感想

テックジムが無料で開催している、Ruby on Rails講座 <問合せフォームを作ろう>をオンラインで受講してみました。Rubyを勉強した経験が無く、動画の通りには出来たものの、何をやっているのか良く解りませんでした。AWS Cloud9を利用しているので、ウェブベースで受講出来るのが便利だと思いました。現在の私の場合、テックジムさんのRuby on Rails本講座を受講する前に、progate等で、Rubyの基礎を学ばないと、独習は難しいと感じました。

1-0 環境構築編
1-1の解説動画
1-2の解説動画
1-3の解説動画
1-4の解説動画

元記事を表示

【ServerlessFramework】API GatewayのWebSocket通信を利用してリアルタイムに変化するTodoアプリを作成した

# はじめに

ServerlessFrameworkを用いて、ApiGatewayのWebsocket通信を利用したリアルタイムアウトTodoアプリを実装した時のメモ。

# 環境

* Svelte
* 3.54.0
* ServerlessFramework
* 3.27.0

# 完成画面

![realTimeTodo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985550/a50b694f-0e0b-0b0f-aa85-52efb182f739.gif)

# 環境について

## 構成図

## WebSocket説明

### 1. connect / disconnect時にはDynamoDB

元記事を表示

rubyXLのconvenience_methods一覧

公式の方でまとめられているものを書き出しています
https://github.com/weshatheleopard/rubyXL/tree/master/lib/rubyXL

#### rubyXL/convenience_methods/cell
– change_contents
– remove_formula
– get_border
– get_border_color
– change_horizontal_alignment
– change_vertical_alignment
– change_text_wrap
– change_shrink_to_fit
– change_text_rotation
– change_text_indent
– change_border
– change_border_color
– is_italicized
– is_bolded
– is_underlined
– is_struckthrough
– font_name
– font_size
– font_color
– fill_color
– horizon

元記事を表示

【備忘録】NoMethodError: undefined method `change_contents’ for #

rubyXLを3.4.0以降のバージョンに上げたときに

“`
NoMethodError: undefined method `change_contents’ for # require ‘rubyXL/convenience_methods/cell’
require ‘rubyXL/convenience_methods/color’
require ‘rubyXL/convenience_methods/font’
require ‘rubyXL/convenience_methods/workbook’
require ‘rubyXL/convenience_methods/worksheet’

https://github-com.translate.goog/weshatheleopard/rubyXL/issues/328?_x_tr_sl=en&_x_t

元記事を表示

Ruby include?メソッド

# include?メソッド
指定した値が配列や文字列内に含まれているかを判定するメソッドです。
指定した値が含まれている→true
指定した値が含まれていない→false  を返り値として返します。

例1
“`ruby
string = [“hello”, “goodbye”]
puts string.include?(“hello”)
“`

“`
true
# ターミナル出力
“`
例2
“`ruby
string = [“hello”, “goodbye”]
puts string.include?(“thanks”)
“`

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

# include?メソッドとif文を使って文字列を検知するプログラムを作成する

条件1:名前を入力すると「登録が完了しました」という文字列を出力すること
条件2:名前の中にピリオド(.)がある場合は、「 “!エラー!記号は登録できません”」という文字列を出力すること
条件3:名前の中に空白(半角のみ)がある場合は、「 “!エラー!空白は登録できません”」という文字列を出力すること
※今回

元記事を表示

Ruby11

# 概要
対象の文字列の中に特定の値が含まれているかどうかを検知するプログラムを実装します。

# 問題
以下の要件を満たすcheck_nameメソッドを実装しましょう。

・名前を入力すると「登録が完了しました」という文字列を出力すること
・名前の中にピリオド(.)がある場合は、「 “!エラー!記号は登録できません”」という文字列を出力すること
・名前の中に空白(半角のみ)がある場合は、「 “!エラー!空白は登録できません”」という文字列を出力すること
※今回空白に関しては、半角スペースのみを考えることとします。

“`Ruby:雛形
def check_name(str)
# 処理を記述
end

puts “登録したい名前を入力してください(例)YamadaTaro”
str = gets
check_name(str)
“`
“`Ruby:ターミナル
YamadaTaro → 登録が完了しました
Yamada.Taro→!エラー!記号は登録できません
Yamada Taro → !エラー!空白は登録できません
“`

### ?ヒント?
include?メ

配列の操作一覧

### 配列について

初めて配列を操作するにあたり、どの様な操作が出来るか・動きをするかまとめていきます。

## 空の配列xを作成
“`
x = []
=>[]
“`
空の配列xを作成しました。
このxに要素(文字列や数字)を入れていきます。

## 空の配列xに0,0,1,2,2,3,4を入れる
“`
x.push(0,0,1,2,2,3,4)
=>[0,0,1,2,2,3,4]
“`

これで配列に要素を入れることが出来ました。
入れたばかりではありますが、さっそく削除していきます。

## 要素の削除

“`
x.delete(0)
=>[1,2,2,3,4]
“`
削除が出来ましたが、指定した”0″に該当する要素がすべて消えてしましました。

## 場所を指定して要素を削除

“`
x.delete_at(3)
=>[1,2,3,4]
“`
delete_at()で指定した、前から数えた数字の要素が削除されます。
ですので、今回は(3)を指定した為、前から3番目の”2″が削除されました。

## 指定範囲の要素を削除する

“`
x.slice!(1

Ruby10

# 概要
任意の数字が配列の中の何番目に格納されているかを確認できるプログラムを実装します。

# 問題
以下の配列から任意の数字を探して何番目に含まれているかという結果を返すsearchメソッドを、each_with_indexを用いて作成しましょう。

“`Ruby
input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
“`

以下の雛形のコードを参考に解答しましょう。

“`Ruby:雛形
def search(target_num, input)
# 処理を記述
end

input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
# 呼び出し例
search(11, input)
“`

### 出力例
search(5, input) → 2番目にあります
search(12, input) → 4番目にあります
search(7, input) → その数は含まれていません

### ?ヒント?