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

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

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を参考にさせていただいた。

元記事を表示

Search Console API と Ruby on Rails

# はじめに

昔つくったプログラムを思い出に残しておきます。
最新の情報ではありません。

Search Consoleからオーガニック流入キーワードを確認できるが、DBに取り込むバッチプログラムを作成し分析できるデータを保存する。Search ConsoleではAPIが用意されているためそれを毎日実行し、必要な情報を取得する。

# Search Console API

## API 有効化

1. [https://console.cloud.google.com/getting-started?hl=ja&pli=1](https://console.cloud.google.com/getting-started?hl=ja&pli=1) ログインする
2. プロジェクト内で左のバーの中にある「IAMと管理」の「サービスアカウント」という項目を選択
3. 「サービスアカウントを作成」を選択し、必要事項を記入します。
4. サービスアカウントの権限を設定します。Google Search Consoleを転送元として用いるために必要な権限は特にありません
5. 「ユーザーにこ

元記事を表示

Dart Sass + cssbundling-rails から dartsass-rails に移行した

## はじめに

以前書いた記事で、 Webpacker から importmap-rails + Propshaft + cssbundling-rails への移行で実施したことを紹介した。

https://qiita.com/mishina2228/items/d4b9af22d0096ee451d7

このときは [Dart Sass](https://github.com/sass/dart-sass) を使っていたため、 Node.js が必要な状態だったが、 dartsass-rails はバイナリファイルをラップしているため、これを使えば `package.json` を使った JavaScript パッケージのバージョン管理や、肥大化する node_module ディレクトリから解放されるかも!と思い移行してみた。

https://github.com/rails/dartsass-rails

https://techracho.bpsinc.jp/hachi8833/2022_03_02/116014

**しかし、結論から言うと相変わらず Node.js は

元記事を表示

開発中のDeviseをインストールしてRails 7.0 (Hotwire/Turbo)のテストに協力する

## はじめに
Rails 7.0が2021年の暮れにリリースされて以降、Deviseは長らくRails 7.0(というか、Hotwire/Turbo)に完全対応していない状態が続いていました。ですが、ようやくDeviseのコミッタさんがRails 7.0対応に向けたプルリクエストを作ってくれました。

https://github.com/heartcombo/devise/pull/5548/

2023年2月4日現在、このプルリクエストの変更内容をテストしてくれるボランティアを募集しているようです。

もし、rails/ujsではなく、Hotwire/Turboを使っているRails 7.0にDeviseを組み込んでいる(もしくはこれから組み込もうとしている)人は、以下の手順に従って開発中のDeviseをテストしてみてください。

### 参考:僕もテストしてみた

ちなみに僕も動作確認用の簡単なRailsアプリを作って動作確認しました。

https://git

元記事を表示

自動販売機をRubyで作成して学んだこと

## むやみにattr_accessorをpublicに定義するのは好ましくない

外部から書き換えられても良いものには `attr_accessor`を利用する。
それ以外は`attr_reader`を使用する

## 同じ処理は共通化する

“`diff_ruby: vending_machine.rb
– # ペプシを購入するリクエスト
– def request_purchase_pepsi(suica)
– if suica.deposit >= @pepsi.price
– @earning += @pepsi.price
– suica.purchased(@pepsi.price)
– @pepsi.stock -= 1
– else
– puts ‘カードの残高が足りません。’
– end
– end
– # モンスターを購入するリクエスト
– def request_purchase_monster(suica)
– if suica.deposit >= @monster.price

元記事を表示

rbenvをシステム全体で利用できるようにする + Ruby 3をruby-buildでビルド on AlmaLinux 9

rbenvをユーザー毎ではなく、システム全体で共有して利用できるようにします。

* この記事は[旧記事](https://qiita.com/h-izumi/items/ca2c417fc09c092eb084)の改版です

# 前提
* 事前にgitを使用可能にしておく
* rbenv関連の書き込み権限を持つグループとして`rbnev`グループを作成、必要なユーザーを所属させる

### 環境
* AlmaLinux 9で確認しています

# rbenvインストール

## rbenvを操作できるグループを追加
“`shell-session
$ sudo groupadd rbenv
“`

### 追加したグループにユーザを追加
“`shell-session
$ sudo gpasswd -a USERNAME rbenv
“`

## rbenv用のディレクトリを作成

“`shell-session
$ sudo mkdir /usr/local/rbenv
“`

### ディレクトリの所有者(グループ)を変更
“`shell-session
$ sudo

元記事を表示

【Ruby】チンチロをリファクタリングと機能追加してみた。

# チンチロプログラムのリファクタリングをしました。
[先日作成したチンチロプログラム](https://qiita.com/mocchi32/items/81176e875b133f7a3c64)のリファクタリングを行いました。

前回作成時点では、
「モノは動くけどクラス定義やメソッドがこれでいいのか、全然わかんない!」状態でした。

現在通っているプログラミングスクール講師の方にコードレビューをしていただき、
特に正しいクラス定義、メソッド定義の仕方について理解した上で実装できるようになりました。

リファクタリング前後のコードを見比べると明らかに分かりやすく、かつ
保守性の高いコードになったかなと思います。

やっぱり他の人に見てもらうって大事ですねえ。感謝。

# 機能追加
機能追加しました。
① プレイヤー人数設定(2~4人)
② ゲーム終了判定
③ 賭け金の入力制限

リファクタリング後に機能追加したのですが、
「嗚呼!これがオブジェクト指向かっ!!」と、その保守性の高さを身をもって経験できました?

## main.rb
“`ruby:
# チンチロ for 2~4p

元記事を表示

Ruby if, else問題

# if文を使った条件分岐
以下の条件を満たすようプログラムを作成する。

– 条件1:第一引数のnumが1以上かつ10以下の範囲であればTrueを出力すること
– 条件2:第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること
– 条件3:それ以外はFalseを出力すること

“`ruby
def in1to10(num, outside_mode)
if (num >= 1 && num <= 10) || outside_mode puts "True" else puts "False" end end # 呼び出し例 in1to10(5,false) in1to10(11,false) in1to10(11,true) ``` ```ruby True False True # ターミナル出力 ``` 複数の条件がある場合は、***論理演算子***を使って記述を行います。 ## 論理演算子とは 「真(true)」と「偽(false)」の確認を行う時に使われる演算子(記号)をのこと。 複数の条

元記事を表示

[Rails] コメント機能実装

# はじめに
コメント機能を実装するための忘備録です。
Userモデル、Articleモデル(Postモデルと同じ)は作成済みで行っています。
# 実行環境
– 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/42b97f6f-d233-1379-c1f6-ceeef6e8826c.png)
articlesテーブルとcommentsテーブルを1対多でつなぎ、comment_contentのレコードを追加していくだけでコメントを残すことは出来そうですが、
今回は、***誰がコメントを追加したか***まで実装したいため、articlesテーブルだけでなく、usersテーブルもcommentsテーブルにつなげます。

この場合、usersテーブルとariticlesテーブルは***多対多***の関係になっており、commentsテーブルはそれを実現させ

元記事を表示

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のインストールを試みたところ、opensslのコンパイル関連のエラーで躓いてしまいました。
同じ問題でインストールできない方のお役に少しでも立てたらと思い、解決までのプロセスを共有します。

# エラー内容

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の作成
以下

元記事を表示

OTHERカテゴリの最新記事