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

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

52枚のトランプを5人に配るとき、11枚、11枚、10枚、10枚、10枚と配りたい。

## やりたいこと
52枚のトランプを5人に配るとき、11枚、11枚、10枚、10枚、10枚と配りたい。

## 問題
52を3で割って配ると、1人あたり17枚になり、合計が51枚になってしまう。

“`ruby
irb(main):001> total = 52
=> 52
irb(main):002> total / 5
=> 17
“`
## 考えたこと
・1から52までの数を配列に入れて、5人に順番に渡していく。
・人数分の配列を作り、そこに順番に入れていく。

## やってみる
each_sliceメソッドを使うと指定した数で区切れることがわかった。
配列を用意して、区切った配列を入れていく。
“`ruby
numbers = (1..52).to_a

n = 52 / 5

array = []
numbers.each_slice(n) do |x|
# 均等に配る
array << x end ``` 5人に10枚ずつ配ったが、2枚余ってしまった。 余った51と52を1人目と2人目に配りたい。 ```ruby [ruby]$ ruby tmp_cart.

元記事を表示

Elasticsearch Rails 7とnet-http-persistentを同時に使うときにはFaradayアダプターを指定する

## Railsアプリケーションのgemのバージョンを上げたときエラーが起きた

Railsアプリケーションのgemのバージョンを`bundle update`コマンドで上げていました。
`bin/rails s`コマンドでRailsアプリケーションを起動するときに次のようなエラーがでるようになりました。

“`sh
ledsun@MSI:~/pubdictionaries►bin/rails s
=> Booting WEBrick
=> Rails 7.0.8 application starting in development http://localhost:3000
=> Run `bin/rails server –help` for more startup options
Exiting
/home/ledsun/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware_registry.rb:57:in `lookup_middleware’: :ne

元記事を表示

同じ枚数の人を同じ順位にする(2通りのやり方)

## やりたいこと
カード枚数が同じ枚数だったら同じ順位にしたい。
“`ruby
array = [{:name=>”player3″, :count=>20},
{:name=>”player2″, :count=>16},
{:name=>”player1″, :count=>16},
{:name=>”player4″, :count=>0}]
player3が1位、player2が2位、player1が3位、player4が4位です。
“`
以下のように出力したい。
“`ruby
[{:name=>”player3″, :count=>20},
{:name=>”player2″, :count=>16},
{:name=>”player1″, :count=>16},
{:name=>”player4″, :count=>0}]
player3が1位、player2が2位、player1が2位、player4が4位です。
“`

## 考えたこと
「`each_with_index`メソッドで順番に比較して、値が同じなら同じ順位になるように設定できるの

元記事を表示

【メモ】Ruby3.3.0をDebian12にインストールするためのコマンド集

## はじめに
AWSのLightsailにてインスタンスを作成し、Rubyの学習環境を構築したいと思い、様々なサイトを見て回りながらついにインストールに成功したので、その時に打ち込んだコマンドを全て以下にまとめました。
未検証ですが、Debianと同じ系統のUbuntuでも使えるかと思います。

## コマンド
コマンドのアップグレード、Gitのインストール。
GitはHomebrewのインストールに必要。
“`
$ sudo apt update && sudo apt upgrade
$ sudo apt-get install git-all
“`
Homebrewのインストール。
以下の公式サイトを参照。
https://brew.sh/ja/
“`
$ /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
$ (echo; echo ‘eval “$(/home/linuxbrew/.linuxbrew/bin/brew shell

元記事を表示

Railsの学習を終えて

## 初めに
こんにちは、Railsの学習を終えました。そのRailsの学習で感じたことや思ったことなどを書いていきます。

## Railsの学習で思ったこと
Railsの学習で思ったことは、めっちゃ便利だなということです。クエリを書く必要もなければ、コマンドを打てばファイルが生成されるのはすごく便利でした。先月、フレームワークなしでログイン機能や投稿機能などを開発していたのでなおさら便利に感じます。

## Railsの学習で大変だったこと
Railsの学習で感じたことは、環境構築です。特にbundleに何かを追加しようとすると必ずエラーになり大変でした。

## Railsの学習でやったほうが良いと思ったこと
MVCの理解をしておいたほうがいいなと思いました。これが理解できていないとエラーが起きた時にどこをどう直したらいいのかわからなくなるのでどこがどうつながっているのかを理解しながらRailsを使っていくのがいいと思いました。

## 最後に
Railsを初めて触ったときこんなに便利なんだと感動しました。ぜひRailsを勉強しようと思っていたらまず、フレームワークなしでアプリを

元記事を表示

【Ruby】文字列の結合でappendメソッドを使用して、NoMethodErrorになる

# 初めに

RExの問題を解いていて、appendメソッドを使用して文字列を結合しようとする問題に出会ったので書いていきます。

# 問題

“`ruby

a = “今日も”
b = “最高の1日に。”

p a.append b # NoMethodError

“`

# 解決方法

今回は“`String<<```で解決しました。 ```ruby a = "今日も" b = "最高の1日に。" p a << b # 今日も最高の1日に。 ``` appendメソッドは、Arrayクラスのメソッドで配列に要素を追加するときに使用されるようです。 # 終わりに 今日はRExの1度解いた問題を繰り返し解いてみたら、点数が上がっていたので良かったです。

元記事を表示

【Rails】foreign_key: true を記述するかしないか

## はじめに
Userモデルと紐づいたProfileモデルを作成しようとしているところ。
User:Profile = 1:1 の関係にしたい為、t.referencesを追記。
~~~ruby:20240218073445_create_profiles
class CreateProfiles < ActiveRecord::Migration[6.0] def change create_table :profiles do |t| t.references :user, null: false t.timestamps end end end ~~~ ここで疑問に思った事は、foreign_key: trueをとりあえず追加しておけ。という記事が多くて理由はなんやねん、という事。これについて解説。 foreign_keyについての詳細は省略。 ## RubyとRailsのバージョン - Ruby 3.1.3 - Rails 6.0.6.1 ## 【結論】Railsの命名規則に従っていれば基本は不要 今回のケースのような場合はA

元記事を表示

Ruby Silverの私が行った勉強方法

おはこんばんは! なおぽんと申します🐹
この度、Ruby Silverに合格したため、どのような勉強を行って対策したかまとめました。
少しでも参考になれば嬉しいです!

## ステータス
– Rubyの経験は1年半程度
– 大学4年生

## 学習期間
– 2週間程度
– 学習時間は1日平均3時間程度

## 学習に使用したもの
– 「[[改訂2版]Ruby技術者認定試験合格教本)](https://amzn.asia/d/fwQ6EgC)」の巻末の基本問題と模擬試験
– 1回目:学習開始時(どの程度点数取れるか)
– 2回目:試験3日前(わからない部分を洗い出すため)
– 3回目:試験の前日(わからない部分がないか最終確認)
– [Ruby Silver 模擬試験](https://github.com/ruby-association/prep-test/tree/version3)
– 1回目:試験1週間前(試験の傾向確認&わからない部分の洗い出し)
– 2回目:試験の前日(わからない部分がないか最終確認)
– [REx](https://

元記事を表示

rails7.1.3 での table_name_prefix の挙動の違い

## Rails7.1.3へのアップデート

rails7.1.3のアップデートの際に思わぬところで躓いたので共有です
rails7.1.3で適用された、このPRについてです

https://github.com/rails/rails/pull/50247

**対象読者**

– Rails エンジンで `table_name_prefix` を自分で定義している人

## さきに結論

– `blorgh`というエンジンがあったとして `lib/blorgh.rb`で `table_name_prefix`を上書きしていた場合、rails 7.1.3で効かなくなった
– `isolate_namespace`の呼び出し前に、`Blorgh`モジュールで`table_name_prefix`を上書きする

## 状況

### Rails7.1.2 までの環境

Railsエンジン側でモデルを用意しており、`table_name_prefix`を定義していたとします

`blorgh`というエンジンだとすると、下記のような感じ

“`lib/blorgh.rb
require

元記事を表示

配列の中に入っているハッシュの値が大きい順に並び替える

## やりたいこと
配列の中に入っているハッシュの値が大きい順に並び替えたい。

“`ruby
[{:name=>”player1″, :count=>21},
{:name=>”player2″, :count=>0},
{:name=>”player3″, :count=>30}]
“`
このように並び替えたい。↓
“`ruby
[{:name=>”player3″, :count=>30},
{:name=>”player1″, :count=>21},
{:name=>”player2″, :count=>0}, ]
“`
## 考えたこと
「配列の要素を並び替えるのにsortメソッドというのがあったはず。sortメソッドを使えば並び替えられるかな」

## 試したこと
公式リファレンスをもとに`sort`メソッドを使ってみる。
今回は各要素がハッシュの形をしており、`:count`キーの値を比較する。
“`ruby
a = [{:name=>”player1″, :count=>4},
{:name=>”player2″, :count=>28},
{

元記事を表示

RailsでCloud Storageの設定をする

# 概要
Rails7でActive Storageを使用して、Google CloudのCloud Storageの設定の仕方の記事です。設定するときに、このような記事がありそうでなかったので書きます。

# 前提
Active Storageの設定が終わって、保存先が以下のlocalの設定では動くものとします。
“`development.rb or production.rb
config.active_storage.service = :local
“`
Active Storageの設定が終わっていな人は[こちら](https://qiita.com/nagumo01/items/76b97a98e83604150496)を参考に設定してください。

# Google Cloudの設定
### Cloud Storageの設定
1. Cloud Storageを開いてバケットの作成
1. ロケーションタイプ、リージョンを設定(単一リージョンが1番安い)
1. デフォルトのクラスやアクセス制御を設定
1. 公開アクセスを禁止で問題ない

### サービスアカウントの作

元記事を表示

[Ruby] 名鉄津島線の駅名を上り方面、下り方面の順番で表示する

名鉄津島線の駅名を上り方面、下り方面の順番で表示するプログラムをRubyで実装しました

“`Ruby
# 名鉄津島線の駅名表示

tsushima_line_data = [“須ヶ口”,”甚目寺”,”七宝”,”木田”,”青塚”,”勝幡”,”藤浪”,”津島”]
station_num = tsushima_line_data.length

def space()
puts “”
end

# 名鉄津島線の上り方面の駅名を順に表示(津島から須ヶ口)
start_num = 0
i = station_num – 1
while i >= start_num
puts tsushima_line_data[i]
i -= 1
end

space

# 名鉄津島線の下り方面の駅名を順に表示(須ヶ口から津島)
j = start_num
while j < station_num puts tsushima_line_data[j] j += 1 end ``` 結果 ![title.jpg](https://qiita-image-store.s3.ap-nort

元記事を表示

RSpecの導入方法(準備まで)

# 環境構築の手順
### ① Gemの追加
“`:Gemfile
group :development, :test do

# 以下追加
gem ‘rspec-rails’
gem ‘factory_bot_rails’
end
“`

### ② RSpec用の設定ファイルを生成する
“`
bundle exec rails g rspec:install
“`
下記のようにファイルが作成される
“`
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
“`

### ③ テストを実行してみる
“`
bundle exec rspec
“`
以下のような結果になれば、RSpecを利用する準備は完了。
テストファイルをまだ作成していないため、このように表示される。
“`
No examples found.

Finished in 0.00026 seconds (files took 0.05634 second

元記事を表示

【Ruby】Procオブジェクトとcall

# 初めに

Procを語るときはブロックの理解も必要ですが、今回は説明を省いてProcで何をしているのかcallとセットで書いていきます。

# Procとは

「Proc ruby」で検索すれば、確実にGoogleでヒットしそうな見出しですが自分が理解できればいいので進めます。

– Procはブロックを持ち運べるオブジェクト
– Procはクラス。Proc.newでオブジェクトを作れる
– Proc.newで作成したオブジェクトはcallで呼び出せる

① 敢えてcallで呼び出さなかったときに、どのような結果が返るのか

“`ruby
proc = Proc.new
p proc
# => #
“`

実行結果を見てみると、Proc: に続く謎の数字。Proc.newで作成したオブジェクトが返ってきてるようです。

② callで呼び出すと、変数に代入したProcオブジェクトが返る

“`ruby
proc = Proc.new { p “proc” }
p proc.call
# => pro

元記事を表示

デバイスやブラウザでハンドリングするにはUserAgentを使用する

# UserAgentとは
– エンドユーザが使用しているデバイスやブラウザを認識することができる機能

# 使用方法
以下のコードをcontrollerに記載することで`HTTP_USER_AGENT`を取得することができる

“`ruby
request.env[“HTTP_USER_AGENT”]
# => “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36”
“`
よって、下記のようにハンドリングすることができる。
### ブラウザによってハンドリング
“`ruby
def check_user_agent
ua = request.env[‘HTTP_USER_AGENT’]
if ua.include? “MSIE”
p “IEです”
elsif ua.include? “Firefox”
p “firefoxです”
e

元記事を表示

開発環境で外部APIからレスポンスを受け取るためにrgrokを導入する

# ngrokとは
– ローカルPC上で稼働しているネットワーク(TCP)サービスを外部公開できるサービス
– 開発環境から外部APIと接続して外部APIからレスポンスを受け取りたい場合に使用する

# 導入手順
### 1. ユーザ登録
下記ngrok公式サイトからユーザ登録する。
https://dashboard.ngrok.com/signup
### 2. ngrokコマンドをインストール
2-1. 下記rgrok公式サイトのダウンロードページからファイルを取得する。
https://ngrok.com/download

2-2. ファイルをダウンロード後、任意の場所で解凍する。

2-3. ツールのインストールが完了後、アカウント登録後に表示される「Welcome to ngrok!」のページに表示されている「Connect your account」に記載されているngrokのコマンドを実行する。
→ ~/.ngrok2/ngrok.ymlが生成されたことを確認(認証トークン情報が登録されている)
### 3. Webサイトを公開する
3-1. 下記コマンドを実行し、ロ

元記事を表示

【Rails】コンソールを使いこなそう!レベル1 〜基本的な操作編〜

# コンソールの基本
コンソールとは、プログラムの出力を実際に表示するものです。
極端にいえば、1+1と入力すれば2が返ってきます。
“`console
>irb(main):001:0> 1+1
=> 2
“`
これを利用して、モデルを作ったり中身を確認したりもできます。

コンソールで実行できたことはそのままコードで使えるので、実装前に確認することでエラーを未然に防ぎつつ、着実にコーディングが行えるようになります。

# コンソールの起動 ・ 終了
railコンソールは、ターミナル上で`rails c`と打つと起動し`exit`で終了します。

“`console:コンソール
$ rails c # 起動
>irb(main):001:0> exit # 終了(ショートカットはcontrol + d)
“`

`rails c`で作成・編集したデータは、データベースに保存されます。

しかし試作の度にデータが作られるのは困る場合があります。
そんな時は`rails c -s`を使うと、データは保存されずに全てロールバックします。

“`console:コンソール
$ r

元記事を表示

Railsで特定のカラムを途中から必須にするバリデーションの実装方法

## 事象

Railsアプリケーション開発において、特定のカラム(ここでは便宜上「属性X」と呼びます)が初めは任意入力だったものの、ビジネスルールの変更により必須入力とする必要が出てくる状況は珍しくありません。この記事では、そのような要件変更を効率的に実装する方法について説明します。

## 実装

新規レコードの作成時にのみ「属性X」の入力を必須とするバリデーションを追加します。これは、`on: :create` オプションを使用して、バリデーションを新規作成時に限定することで実現します。

“`ruby:model.rb
class ExampleModel < ApplicationRecord validates :attribute_x, presence: true, on: :create end ``` このコードにより、新規レコードの作成時にのみ「属性X」の入力が必須となります。既存のレコードに対する更新操作では、このバリデーションは適用されません。 ## まとめ この記事では、Railsで特定のカラムを途中から必須に変更する際のバリデーションの実装方法

元記事を表示

Rubyプロジェクトでの主要ライブラリの活用

Rubyは、その表現力豊かな文法と豊富なライブラリ(gem)により、Web開発者の間で高く評価されています。Rubyプロジェクトにおける効率的な開発には、これらのライブラリを理解し、適切に活用することが不可欠です。この記事では、Rubyプロジェクトで頻繁に使用される主要ライブラリとその用途についてまとめてみました。

### 基本的なライブラリ
## WEBrick
用途: フロントエンドとバックエンド間のデータ移送。
WEBrickはRuby標準の簡易HTTPサーバーライブラリで、小規模なWebアプリケーションや開発時のテスト用サーバーとして利用されます。フロントエンドとバックエンド間のデータ移送を手軽に行えるため、開発プロセスをスムーズにします。

## CSV
用途: データの保存と読み込み。
データの保存や読み込みにはCSVライブラリが便利です。CSV(Comma-Separated Values)形式のファイル操作を簡単に行うことができ、データのインポートやエクスポートが必要なアプリケーション開発に欠かせません。

## JSON
用途: JavaScriptの変数で受け取る

元記事を表示

Ruby の `and` と `&&` は違う

`&&` と `and` とか、`!` と `not` とか、一緒じゃんって思ってるとバグることがあるので注意

# 何が違うか

https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html

演算子同士の優先度が違う。要は演算子を並べたときのくっつく順序が違う。

>“`
>高い ::
> []
> +(単項) ! ~
> **
> -(単項)
> * / %
> + –
> << >>
> &
> | ^
> > >= < <= > <=> == === != =~ !~
> &&
> ||
> .. …
> ?:(条件演算子)
> =(+=, -= … )
> not
>低い and or
>“`
>左の「高い」「低い」は演算子の優先順位です。

# 代入(`=`)より優先度

元記事を表示

OTHERカテゴリの最新記事