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

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

Ruby:多重ループを抜ける大域脱出とは

※この記事は初学者が自分なりにまとめたものになります。

# 目次
– [はじめに](#はじめに)
– [大域脱出とは](#大域脱出とは)
– [代表的な大域脱出方法2選](#代表的な大域脱出方法2選)
– [1. return](#1-return)
– [2. throw catch](#2-throw-catch)
– [まとめ](#まとめ)
– [使い分けのポイント](#使い分けのポイント)

# はじめに

今日は、Rubyにおいて2重3重に重なったループを一撃で抜ける方法を調べてみました!

### 大域脱出とは

この何重にも重なったループを抜け出す処理を”**大域脱出**”と言います。

# <代表的な大域脱出方法2選>

以下は、Rubyの大域脱出の方法で代表的なもの2つです。

**1. return**

メソッドやブロックの実行を終了し、呼び出し元に制御を戻します。メソッドの中で使われることが多いです。

**2. throw catch**

特定のスコープから大域脱出するための方法で、throwは指定されたシンボルを投げ、対応するcatc

元記事を表示

【Rails】Railsチュートリアル第6章 復習用

はじめに

今日もチュートリアルに取り組んでいく。
今回はモデルを主に扱っているようだ

Userモデル

・Railsでは、データモデルとして扱うデフォルトのデータ構造のことを **モデル(Model)** と呼びます
・データベースを使うことで長時間データを保存することができる
・データベースをやりとりするライブラリ(テンプレのようなもの)を **Active Record** という
・ActiveRecordにはデータの作成、保存、検索のメソッドが用意されている
・これらをつかうためにSQLを意識する必要がない!!
・**マイグレーション** = Rubyでデータのはいったテーブル(表)を操作する仕組み

Railsにおける属性

・第4章では`attr_accesor`を用いてUserクラスにnameとemail属性を定義した。
・しかしこれはRubyだから必要なのであって、実はRailsでは属性を定義する必要がない(デフォルトでその仕組が提供されている)

モデル作成

・ここでこれらのユーザー情報を保存するモデルを作成する
・Control

元記事を表示

Docker 環境で binding.pry を使ってデバッグする方法

## 初めに
Ruby アプリケーションを Docker コンテナ内でデバッグする際に、`binding.pry` を使いたいと思ったことはありませんか?この記事では、Docker 環境で `binding.pry` を設定する手順を解説します。

## ステップ 1: Gemfile に pry を追加

まず、`Gemfile` に `pry-byebug` を追加します。

“`ruby
gem ‘pry-byebug’
“`

これで、`bundle install` を実行

“`bash
bundle install
“`

## ステップ 2: docker-compose.yml の設定

`docker-compose.yml` ファイルを作成または編集して、デバッグ用の設定を追加します。

“`yaml
docker-compose.yml
web:
build: .
command: bash -c “rm -f tmp/pids~

/////↓この2文を追加
stdin_open: true
tty: true
“`

## ステップ 4

元記事を表示

[paiza×Qiita記事投稿キャンペーン] Rubyでmod7占いを解いてみた

この記事は **paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」** キャンペーンへの参加記事です。

https://paiza.jp/pages/campaign/paiza-qiita

今回キャンペーンの候補問題の中から、ランクSの「mod7占い」を解いてみました。

https://paiza.jp/works/mondai/s_rank_skillcheck_sample/mod7

解いたソースコードの全体像は以下にあります。

https://github.com/Umekawa/paiza-open-problem/blob/main/mod7.rb

## 問題分

問題文の詳細ははPaizaの記事の方を読んでいただくとして、要点は

– 最初にカード数が与えられ、その後カードの数だけ入力が与えられる
– すべて異なるカードがn枚与えられる (nは3以上)
– 与えられたカードから同時に3枚選び、3枚のカードの和が7の倍数になる組み合わせ数を出力する

の3点です。

では実際に作成していきましょう。

## 実

元記事を表示

【AWS SAM】入門してみた dockerで環境構築 ruby

# はじめに
今までserverless frame workを使用して、lambdaのデプロイを行ってきたのですが、serverless frame work V4から有料化ということを受けてSAMへ移行したいと思いました。

https://dev.classmethod.jp/articles/sls-migrate-cdk-or-sam/

# 環境構築
dockerで行いました。
* ruby3.3.4
* node 20.16.0
* aws-sam-cliをzipで公式ページから取得しインストール

https://github.com/yuuki4135/sam-test-app

“`dockerfile
FROM ruby:3.3.4-slim-bookworm

RUN useradd -u 1000 developper \
&& apt-get update -qq && apt-get install -qq –no-install-recommends \
curl awscli unzip wget git vim

RUN wget h

元記事を表示

‘rubygems/user_interaction’ を使って、簡単なプロンプト UI を実装する

RubyGems 内には、 `rubygems/user_interaction` という (RubyGems 用の) プロンプト UI を実装するためのヘルパーがあります。

“`ruby
require ‘rubygems/user_interaction’ # 標準ライブラリなので、これ自体のインストールは不要

ui = Gem::ConsoleUI.new

ui.ask(‘What is your name?’)
# What is your name? tomoasleep
# => “tomoasleep”

ui.ask_yes_no(‘Are you ok?’)
# Are you ok? [yn] y
# => true

ui.ask_yes_no(‘Are you ok?’, true)
# Are you ok? [Yn]
# => true

ui.choose_from_list(‘What is your favorite food?’, [‘ramen’, ‘sushi’, ‘tempura’])
# What is your favorite

元記事を表示

【Rails】環境構築まとめ

はじめに

現在Railsチュートリアル2周目に取り組み始めて約1週間が経つ
Railsチュートリアル7版ではGitHub CodespacesというクラウドIDE環境での開発が取り上げられている
→テンプレートが用意されていて、環境構築が非常に楽なのだが(というかほぼない)実際に環境構築をする際に何も知らなくて困ってしまう

更に私は来週から技育CAMPのオンラインハッカソンに出場する予定なので、
「さすがに環境構築を知らないのはまずい!」
と思い、環境構築について学習することにする。

もしかしたらチュートリアルのテンプレートは今後開発をする際にも流用できるのかもしれないが、他のエンジニアの方はおそらく環境構築から取り掛かっているだろうし、何かと今後困りそうなので!

基本的にこちらの記事を参考にさせていただいてるが、具体的なインストール手順などは重複してしまうためこちらでは書かない。この記事では必要な部分を要約する形にしたい。

元記事を表示

カレー好きのためのActiveRecord学習ガイド 〜スパイシーなメソッドを添えて〜

## はじめに
Rails学習中のカレー屋めぐりにハマっている私を含め、多くの初学者はActiveRecordを使用する際、背後で実行されているSQL文をあまり意識していなく「これ、どんな動きをするんだっけ?」と手が止まることも少なくありません。
SQL文を理解していないと、複雑なデータ操作などができず、気が付かぬうちに非効率なコードを書いてしまう可能性があります。
本記事ではカレー屋めぐりにハマっている私がカレー屋を例えに、ActiveRecordのメソッドをまとめてみました。

## 対象者
– Rails初学者
基本的な Rubyの記法の理解
– SQL初学者
クエリの構造の理解

## 環境
Ruby バージョン: 3.2.2
Rails バージョン: 7.0.4
## メソッド一覧とSQL

### find: 番号でカレーを探す
“`
CurryDish.find(1)
# SELECT `curry_dishes`.* FROM `curry_dishes` WHERE `curry_dishes`.`id` = 1 LIMIT 1

CurryDish.find([

元記事を表示

centos9でlibyaml-develが見つからない

conohaサーバーを借り、ruby3.2.2をasdf経由でインストールしようとしていた際、libyaml-develが必要だからインストールしてね、と出るのにインストールコマンドを打つと、

“`:command
$ sudo dnf install -y libyaml-devel
Last metadata expiration check: 0:00:43 ago on Mon 29 Jul 2024 11:00:14 PM JST.
No match for argument: libyaml-devel
“`
となり、見つからないとなってしまった。その際解決した手順の忘備録です。

## 対処法

下記ページの通りに実行したところ、無事インストールできrubyのインストールも完了しました。

https://github.com/rbenv/ruby-build/discussions/2197

参考ページの通り、以下のコマンドを実行します。
“`:command
sudo dnf install -y epel-release
sudo dnf config-m

元記事を表示

配列の各要素ごとにカウントする方法【Ruby JS】

# はじめに

配列の各要素ごとにカウントする方法について記述していきます。

今回はHashの形でreturnします。

# Rubyの場合

簡単です。`tally`メソッドを使用します。

“`rb
arr = [“apple”, “banana”, “apple”, “orange”, “banana”, “apple”]
tallied = arr.tally
# => {“apple”=>3, “banana”=>2, “orange”=>1}
“`

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/tally.html

# JSの場合

最も美しいのは、`reduce`メソッドを使用し`tally`メソッドを再現することだと思います。

“`js
function tally(array) {
return array.reduce((acc, item) => {
acc[item] = (acc[item] || 0) + 1;
return acc;
}, {});
}

元記事を表示

Ruby3.0系から3.1系へのバージョンアップ

# 背景
Ruby3.0.6とRails6.1.7.7で開発したアプリを運用します。デプロイ先はheroku(heroku-20)で特に問題なくアプリは動いていました。

しかしながら、Ruby3.0系はheroku-20と互換性はありますが、heroku-22と互換性がなく、Ruby3.0系でherokuにデプロイしようとすると以下のエラーが発生しました。
~~~
remote: This app is using the Heroku-20 stack, which is deprecated:
remote: https://devcenter.heroku.com/changelog-items/2895
remote:
remote: From April 30th 2025, Heroku-20 will be end-of-life, and apps using it
remote: will no longer receive security updates, and be run at your own risk.
remote:
remote: From M

元記事を表示

【Rails】Railsチュートリアル 第5章 復習用

前回の第4章ではRubyのコードに関して学習し、基礎的なオブジェクト指向が理解出来た(はず)

第5章ではおそらくviewの部分をメインに扱っている
さらに今回はBootstrapも用いる

classとid

・HTMLではclassに似たようなidというものがある
・idは重複してはならない(一度しかつかえない)
・クラスとidはcssを当てる時に便利
・また今回のclass名にはbootstrapにおいて特別な意味を持つため、適当につけてはいけない。

“`css
.nav{ /*ここはidの場合は.ではなく#を用いる*/
font-size:20px
}
“`

link_to(重要)

・様々なRailsのコードを見る限り恐らくめちゃくちゃ頻出するコード
・link_toはページ内にリンクを作成するコード(HTMLでいう

元記事を表示

割り算の余りが出せなくてもエンジニアとしてやっていけますか?

## はじまりはいつも自己紹介から

どうも!
割り算の余りが出せないモンスターです!

今回ですが、rubyで割り算と余りを算出する問題が出され正解を一発で出すことができなかったので、こちらの記事を書く決心をしました。

以下本文

## なんで、できんかったん?

今回の問題を解くのが難しいと感じたのは以下の理由があったからです。

“`
1. rubyの組み込みメソッドが使えない。
2. 割り算の”/”は商しか出すことができないこと。
“`

そのためわかりませんでした。

## 余りを出す組み込みメソッド “modulo”

皆様ご存知かと思われますが、rubyには割り算の余りを出すメソッドがあります。
それがmoduloメソッドです。

### 以下”modulo”の解説

### moduloメソッドの使い方
moduloメソッドは数値オブジェクトに対して呼び出され、引数として除数を指定します。すると、割り算の余りを返してくれます。以下にいくつかの例を示します。

“`
puts 10.modulo(3) # 出力: 1
puts 20.modulo(4)

元記事を表示

【超爆速】DockerでRails環境構築

Ruby on railsをローカル環境で構築して、学習用に手軽に実行したいときにDockerでの構築手順が面倒だと思いました。
Docked Rails CLIを使うと簡単なコマンドを打つだけで実行環境が構築できてしまうのでとても便利だと思いました。
手順を紹介します。
### Docked Rails CLI

[docked](https://github.com/rails/docked#docked-rails-cli)

## 手順
このコードは初心者向けにRailsアプリケーションを簡単にセットアップする方法を示しています。以下に簡潔に解説します:

1. ターミナルで以下のコマンドを実行します:
– Dockerボリュームを作成し、Rubyの依存関係を保存します。
“`shell
docker volume create ruby-bundle-cache
“`
– `docked`というエイリアス(ショートカット)を作成します。これにより、Dockerコンテナ内でRailsコマンドを簡単に実行できます。

元記事を表示

JavaScriptからRubyへ:初心者が感じた違いと学び

# JavaScriptからRubyへ:初心者が感じた違いと学び

JavaScriptとRubyは、どちらも人気の高いプログラミング言語ですが、その書き方や使用方法には多くの違いがあります。JavaScriptからRubyを学び始めた初心者として、感じた違いや学びを共有したいと思います。

#### 1. 文法の違い
JavaScriptは、セミコロンでステートメントを区切ります。また、{}を使ってブロックを定義します。対して、Rubyはよりシンプルで、endを使ってブロックを終了します。この違いにより、Rubyのコードは読みやすくなっています。

#### 2. 標準ライブラリとフレームワーク
JavaScriptには豊富なフレームワーク(React, Angular, Vueなど)が存在しますが、Rubyには特にWeb開発に強力なフレームワークであるRailsが存在します。

# JavaScriptエンジニアがRubyを学んで驚いたポイント4選
JavaScriptエンジニアとしての経験を持つ私が、Rubyを学び始めて驚いたポイントを10選紹介します。

#### 文法の簡潔

元記事を表示

each内でfindしてる処理(線形探索)をハッシュ探索、バイナリ探索にするとどれくらい早いのか計測してみた。

# 前提
以下、過去の開発で実際にあった例です。

“`
stations = [{id: 1, name: station1}, {id: 2, name: station2}, …]
facility_counts_by_station = [{id: 1, count: 10}, {id: 3, count: 20}, …]
idはどちらもstation_idを指す。
“`
のような配列がそれぞれあり、**stationsに同一idのcountをmerge**したい。

これを処理するうえで、**線形探索**、**ハッシュ探索**、**バイナリ探索**それぞれのアルゴリズムで処理速度がどれくらい違うのか比較してみた。

### 補足
ある施設の数を駅ごとに表示するため用意しているデータです。

1つ目の配列はActiveRecordから取得、2つ目の配列はElasticSearchのaggregationから取得しているため、それを突合させる必要がありました。

なお、stationに属するfacilityが0件のケースはfacility_counts_by_stat

元記事を表示

Railsで、グルーピングしたDBレコードを1クエリで取得するscope

# 動機
特定カラムが同じレコードを、そのどれでもいい一つのみを代表して重複を一つにまとめ、レコードと対応するインスタンスとして取得する…というクエリを組むとき苦労したので備忘録です。
当初distinctメソッドを利用してみようとしていましたが、primary_keyが取得できず(selectメソッドにidを組み込むと、idが異なることで重複していないとみなされるため)、レコードと対応するインスタンス化できませんでした。
特定カラムのみをselectしてdistinctすると、idがnil、カラムがまとめた値、という形になります。

distinctの参考:

https://qiita.com/toda-axiaworks/items/ad5a0e2322ac6a2ea0f4

上記記事の`distinctはselectしなくても問題ないか?`のような操作がやりたかったイメージです。

# グルーピングという解決策
以下の記事を参考に、解決に一歩近づくことができました。
`parent_hoge_id`カラムでグルーピングして、グループごとに最大のIDの1レコードを取得していま

元記事を表示

ActiveRecord::Type::Boolean.new.castの利用方法

こんばんは。

今日は「ActiveRecord::Type::Boolean.new.castの利用方法」について説明します。

ActiveRecord::Type::Boolean.new.cast メソッドは、入力された値をブール値に変換する際に注意が必要です。
なぜなら、異なるタイプの入力を許容し、それをブール値に変換する際に予想外の結果を引き起こす可能性があるからです。

# どういうことか

`ActiveRecord::Type::Boolean.new.cast`は引数をtrueあるいはfalseに変換してくれるのだが、変換の基準は以下のものに引っかかるものがfalseになる。

クラスとしてはこちらに定義がある。

“`
FALSE_VALUES = [
false, 0,
“0”, :”0″,
“f”, :f,
“F”, :F,
“false”, :false,
“FALSE”, :FALSE,
“off”, :off,
“OFF”, :OFF,
].to_set.freeze
“`

また、`””` と `nil` は `ni

元記事を表示

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

# はじめに
Everyday Rails – RSpecによるRailsテスト入門を読了したので、良かった部分や学んだ部分についてまとめようと思います
# 良かったところ
* 章の組み立てがわかりやすい
* テストの内容・説明→まとめ→章末問題という流れ
* 最初、基礎的なテストの仕方を説明して、後の章で今回言うとFactoryBotを使って説明していて理解しやすい
* Rails5ではなくRails7で書かれていること
* Ruby on Railsの教材の中でRails7の内容を書かれているものはあまり多くない印象です
* 今後バージョンが上がった際も対応していただけそうな雰囲気を文章から感じました
# 学んだところ
### RSpec のセットアップ
* Gemfile

* “`ruby
group :development, :test do

gem ‘rspec-rails’ #追加

end
“`
に記述して “bundle install“実行
* テストデータベース
confi

元記事を表示

【Rails】gem geocoderを使用する際のバリデーションについて

## はじめに
こんにちは、なかじ(@nakayama-bird)と申します。
現在、プログラミングスクールに通ってRuby on Railsを学習しております。

:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りのある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。
:::
## 記事の概要
現在、ポートフォリオの作成をしております。
地図上で投稿した場所が表示されるように住所から緯度・経度の座標を取得する際に、モデルでの設定でつまづいた箇所についてまとめてみました。
## 環境
– Rails 7.1.3.4
– gem geocoder
– Google Maps API(Geocoding API)
## gem geocogerの導入・設定方法
### 1. 導入に至った経緯
今回のアプリケーションではユーザーがある場所を投稿して、それを地図上にピンで表示するという機能を実装しています。ピンで表示する際、緯度・経度の情報が必要になるのですが、それをユーザーに直接入力してもらうのは現実的でありません。そのため、住所から緯度・経度

元記事を表示

OTHERカテゴリの最新記事