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

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

【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. 導入に至った経緯
今回のアプリケーションではユーザーがある場所を投稿して、それを地図上にピンで表示するという機能を実装しています。ピンで表示する際、緯度・経度の情報が必要になるのですが、それをユーザーに直接入力してもらうのは現実的でありません。そのため、住所から緯度・経度

元記事を表示

フロントエンドでのdigメソッドの使い方

## digメソッドとは
digメソッドは、Rubyのメソッドでありハッシュや配列などのデータ構造に対し、指定したキーまたはインデックスを使用して要素にアクセスできるメソッドです。

## 使い方

例えば、下記のデータへアクセスする場合には、下記のような方法でデータを取得できます。
“`
data = {
user: {
name: “kaihatu tarou”,
address: {
country: “Japan”,
region: “aichi”
},
orders: [
{ id: 1, product: “1” },
{ id: 2, product: “2” }
]
}
}
“`
“`
name = data.dig(:user, :name)
# => “kaihatu tarou”
“`

下記のように、他のキーと値が含まれる場合でも、digメソッドを使用することができます。以下のコードでは、item_hash の中にある status_id キーに対応する値の

元記事を表示

rubyで(変な解き方で) FizzBuzzを解いてみる

みなさん、こんにちは!

筆者はRuby on RailsでRails7の初期 + ruby 3.2 環境ぐらいまでは書いていましたが、ここ半年は専ら[Misskey](https://github.com/misskey-dev/misskey)の開発などに勤しんでいるのもあり、TypeScriptばかりを書く日々を送っていました。

そんなある日、ふとQiitaを開いてみると[paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」](https://qiita.com/official-events/9ab96aa95d62fe3cbdd7)なんてキャンペーンをやってたので、久々にrubyでも書こうと思い、記事を書くことにしました。

## 対象の問題
久々にrubyでも書くので手堅くみんな大好きFizzBuzz問題でも解いてみようと思います。

[Fizz Buzz (paizaランク C 相当)](https://paiza.jp/works/mondai/c_rank_skillcheck_sample/fizz-buzz)

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程〜テーブル設計〜

## はじめに

こんにちは、今日もオリジナルアプリの制作過程を記録していきます。今日は要件定義についてです!
このシリーズの記事では、企画・要件定義から設計、実装、テストまでの全てのプロセスを詳細に説明します。毎日少しずつ進めていきますので、アドバイスや指摘があればぜひ教えてください。

今日はテーブルを設計して見ました。

# テーブル設計

## users テーブル

| Column | Type | Options |
| —————— | —— | —————————— |
| name | string | null: false |
| email | string | null: false, unique: true |
| password_confirmation| string | null: false

元記事を表示

【勉強会資料】Ruby メモリ管理 プログラミング

社内で勉強会をしたときのスライド資料です。

なぜメモリリーク・枯渇が発生するのか? 低レイヤーからアプリケーションレイヤー(Ruby)に渡って仕組みを説明します。

元記事を表示

【勉強会資料】日付と正規化

社内で勉強会をしたときのスライド資料です。

文字列や日付等、ソフトウェア内部で表現が混在すると障害につながるケースの対策について書いています。

元記事を表示

【Rails】【Ruby】Fileクラスのwriteメソッドとbinwriteメソッドについて

Rails初学者のアウトプット兼備忘録です。
間違いや補足等あればご指摘いただけると幸いです。

今回はFileクラスのwriteメソッドとbinwriteメソッドについてまとめます。

# そもそもFileクラスとは?
Rubyでファイルを扱うには、Fileクラスを使う必要があります。
Fileクラスに対してメソッドを指定することで、ファイルの作成や書き込み等行うことができます。
Fileクラスにも様々なメソッドがありますが、今回はwriteメソッドとbinwriteメソッドに限定して違いなどをまとめます。

# writeメソッドとbinwriteメソッドの違い
まず、writeメソッド、binwriteメソッド共にファイルにデータを書き込むメソッドです。
違いとしては、文字列を書き込むか、バイナリーデータ(画像や音声などの非テキストデータ)を書き込むかというところです。

**writeメソッド-ファイルに文字列を書き込むのに適している
binwriteメソッド-ファイルにバイナリーデータを書き込むのに適している**

# 使い方

“`controller.rb
File.

元記事を表示

OTHERカテゴリの最新記事