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

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

Linux Ruby 3.3.5 update メモ (rbenv)

# 環境
H/W : HP ENVY x360 Convertible 13-ar0xxx(CPU:Ryzen7 3700U Mem:16GB)
OS : Linux(Debian12 bookworm on WSL2)
Host OS : Windows11 Home 23H2

# はじめに
インストールの記事は書いてるけど、そういやrbenvを使ったバージョンアップについて書いてないので投稿したいと思います。

# 参考URL
[「gem update –system」と「gem update」の違い](https://qiita.com/tatama/items/4e9d6bb8bfa2d9556db7)
[LinuxでRuby 2.5.0 インストールメモ](https://qiita.com/edward999th/items/823ccb1fd88eabc93190)

# 前提
過去記事の[Linux Ruby3.3.1インストール完全に理解した(rbenv)](https://qiita.com/edward999th/items/e6479a356be11d53d

元記事を表示

薬剤師がエンジニアになってまずやったこと

はじめまして。
和(かず)と申します。

2024年1月から薬局ベンチャーへ就職して
開発エンジニアをしながら薬剤師として働いています。

今回は私がエンジニアになって最初に行ったことを紹介したいと思います。

# まず何をすればいいのか
現役エンジニアの方々が口を揃えていうのは
『まずは何か作ってみるといい』

とは言われても何をすればいいのかわからない。
何かを作る前に私がまず行なったことは2つあります

***
### 開発環境を構築する

私はDockerを利用した開発環境の整え方について勉強しました。
Dockerとは「コンテナ型の仮想環境を作成、共有、実行するためのプラットフォーム」です。

なんのことやらとわからない方
Dockerについて知りたい方は他の方の記事ですが[こちら](https://qiita.com/S4nTo/items/977d28b0eac316915702)をご確認ください

導入と学習のメリットとしては
ローカル環境を汚さずに、従来の仮想環境に比べて軽量に起動が可能となります。

学び方は本を買うでもWebサイトから学ぶでもなんでもいいと思います

元記事を表示

長距離ドライブをサポートするアプリを作成しました

## はじめに
こんにちは!
[ジョニー](https://x.com/johnny1_ryo) と申します。
未経験からエンジニア転職を目指して、日々学習をしています。

この度、[kodora-co-driver](https://www.kodora-co-driver.com/) を開発しました。

## サービス名 : kodora-co-driver
Image from Gyazo

▼ サービスURL

https://www.kodora-co-driver.com/

▼ Githubリポジトリ

https://github.com/johnny23ryo/kodora-Co-Driver-

## アプリ名の由来

アプリ名「kodora-co-driver

元記事を表示

【初心者向け】mapメソッドって何?

mapメソッドとは何なのか、どう使えばいいのかを簡単に紹介していきます。

# 基本的な用途
例えば、以下のような配列があるとします。
“` ruby
numbers = [1, 2, 3]
“`
この配列に収められた数字を、それぞれ2倍にしてみましょう。
単純に考えれば、以下のようなコードが思い浮かぶかもしれません。
“` ruby
doubled_number = numbers * 2
pp doubled_number
“`
しかし、変数doubled_numberの返却値は以下の通りになります。
“` ruby
[1, 2, 3, 1, 2, 3]
“`
数字ではなく、配列の中身そのものが2倍になってしまいました。
それではどうすればいいのか……。

こういう時こそmapメソッドの出番です。
基本的な使い方は以下の通りになります。
“` ruby
‘配列’.map {|’配列内の個々の要素’| ‘指示したい処理内容’}
“`

それでは早速、配列numbersの中に収められた数字をそれぞれ2倍にしてみましょう。
“` ruby
doubled_nu

元記事を表示

【Rails7】button_toの挙動の変更の対応

## 問題
Rails6.1までは、button_toで生成されるHTMLはinputタグでしたが、Rails7からbutton_toでHTMLのbuttonタグが生成されるようになりました。
これにより、アップデート前に設定していたinputタグのCSSやJavaScriptが効かなくなります。

## 解決方法
CSSなどのinputタグをbuttonタグに変更することで対応できますが、以下の設定をconfig/application.rbに入れることで、button_toがRails6.1までの挙動に戻ります。
“`ruby
class Application < Rails::Application config.action_view.button_to_generates_button_tag = false end ``` ## 参考 https://blog.saeloun.com/2021/08/24/rails-7-button-to-rendering/

元記事を表示

Railsでプロジェクトルートディレクトリのパスから辿れるようにする

# 概要
– スクリプトを実行するときに外部ファイルが必要な場合が多々ある
– どこに置く?となると、`~/tmp/` が良いんじゃなかろうかと
– https://railsdoc.com/rails_base
– スクリプトからどうやって取得する?で教えてもらった話の備忘録

# 結論

`Rails.root.join` を利用しましょう

“`ruby
csv_path = Rails.root.join(‘tmp’, ‘file_name.csv’)
“`

コンソールでいじるとこんなオブジェクトが返ってきます(僕の環境下ではDocker利用しており、プロジェクトルートディレクトリが`/app`にしているので、`/app`が表示されています)

“`ruby
$ rails console
[1] pry(main)> Rails.root
=> #
[2] pry(main)> Rails.root.join
=> #
[3] pry(main)> Rails.root.join(‘tmp’)
=>

元記事を表示

【RubKaigi2024】チャットを活用した参加方法はおススメ!

# はじめに
RubyKaigi2024(2024年5月15-17日)に参加しました。RubyKaigiへの参加は今回で2回目でした。[前回](https://qiita.com/Takaharu_01/items/fac8829bebd59c441308)はオンライン参加、今回はリアル参加(先輩と二人)でした。今回はチャットを繋げた状態で講演を聞くスタイルを取り、そのスタイルがあまりにもよかったので紹介します。

https://rubykaigi.org/2024/

# チャットを活用した方法
**①チャットはラインを利用し、常に連絡できる状態にする。**
**②講演が始まったら発表内容に関するメッセを送りあったり、終わったら感想を送る。**
たったこれだけですが、効果としては、
**①構えることなく楽しく講演を聞くことができた**
**②他の講演がどんな感じだったのか迅速に共有できた**
です。

# おわりに
今回は二人でリアル参加し、チャットを活用した方法で講演を聞きました。その結果、楽しく講演を聞くことができました。また、公演は各会場で開催されるので、「あっちの講演どうた

元記事を表示

Paizaのすゝめ

## paizaとは
実行環境構築いらずでブラウザ上でプログラミング言語を実行できます
https://paiza.jp/guide/works

## (自分的に)Paizaでできること
Rubyには便利なメソッドがたくさんあります。
しかし私にとってはそれらをすぐに使いこなすことができませんでした。
そんな私にとってPaizaはメソッドを「知る」・「使う」きっかけになります。
またプログラミングの基礎(条件分岐, 繰り返し処理, 配列処理)も学ぶことができます

## なぜPaizaを使用しようと思ったか
主な理由は2つあります
### コードを書くのが遅い
### 「知っている」けど使いこなせないメソッドたち
Rubyには便利なメソッドが数多く存在しますが、それらを使いこなすことができませんでした
例えば、filterメソッド(配列の中に条件が一致するものがあれば、一致したもののみの配列を返却するメソッド)
1度は使ったことがありますが、なぜ使用したのかやメソッドの理解が足りないためコードを書いているときに使用することができないことが多々ありました
これら2つを改善するために、毎

元記事を表示

[Ruby on Rails]enumerize gemでoptionsを絞り込みたい場合

## enumerize gemについて

Ruby on Railsでenumを使いたい時に便利なGem
https://github.com/brainspec/enumerize

ざっくり使い方

“`ruby
class User
extend Enumerize

enumerize :role, in: [:user, :admin, :staff]
end
“`

## 本題: optionsを絞り込みたい場合

enumerizeのoptionsを使用してkey, valueの構造を取得する場合に任意の項目を除外または指定した項目だけを取得したい場合には以下のように指定します。

### 除外したい場合

“`ruby
User.status.options(except: [:admin])
# => user, staffが取れる
“`

### 指定した項目だけ取得したい場合

“`ruby
User.status.options(only: [:user])
# => userのみが取れる
“`

## まとめ

以上、雑ですが忘れそうなの

元記事を表示

VSCodeのRuby LSPが Gem::MissingSpecErrorで立ち上がらないエラーがでた備忘録

## エラー内容

“`console
/Users/user/.rbenv/versions/3.3.4/lib/ruby/3.3.0/rubygems/dependency.rb:301:
in `to_specs’: Could not find ‘sorbet-runtime’ (>= 0.5.10782) among 210 total gem(s)
(Gem::MissingSpecError)
Checked in’GEM_PATH=/Users/user/.gem/ruby/3.3.0:/Users/user/.rbenv/versions/3.3.4/lib/ruby/gems/3.3.0′,
execute `gem env` for more information

Error starting the server:
Pending response rejected since connection got disposed
“`

## 読んで欲しい人

– Ruby LSPで上記に似たエラーが出た人
– 過去の俺

## 問題発生までの経緯

元記事を表示

[Rails]stubを使うときは評価順序に気をつけた方がいいという話

# はじめに
皆さん`stub`は好きですか?私は正直嫌いです。しかし、外部と通信を行う機能を作成したりする時には切ってもきれない便利な機能です。今回はそんな機能を使うにあたって沼ったポイントがあったので共有していきます。

# 開発環境
– Ruby 3以上
– Ruby on Rails 6以上
– Minitest

# 最初に結論
`Object.new`を`stub`する際は、`.new`される前に引数が評価されるので注意が必要です。

これだけではわかりづらいと思うので、コードで例を見ながら解説します。

# ケーススタディ
以下のような外部とやり取りを行う、`GetterService`があったとします。外部通信を行うのは`GetterClient`なので、テストを行う際は`GetterClient.new`を`stub`することになります。
“` ruby
class GetterService < ServiceBase def call pp '1' data_list = getter_client.fetch_data_list

元記事を表示

Rspecにてcreated_atの検証で失敗する

# はじめに
RspecにてJSON形式のレスポンスデータを検証している際に、
`created_at`や`updated_at`にてデータが一致しないことで困っていた

# 困ってたこと

データ形式:
“`ruby
{
‘key’ => ‘value’,
‘created_at’ => ‘instance.created_at’,
‘updated_at’ => ‘instance.updated_at’,
}
“`

Timeオブジェクトはミリ秒の値まで含んでしまっているため、
データが一致せずにテストが落ちてしまう

“`plaintext
# 期待していたデータ
“created_at” => “2024-08-26T10:35:23+09:00”

# 実際に来たデータ
“created_at” => “2024-08-26T10:35:23.000+09:00”

“`

# as_jsonで試してみた

https://railsdoc.com/page/as_json

as_jsonではハッシュ形式に変換してくれるらしい

creat

元記事を表示

Rails7から追加された簡単にレコードを任意の順番に並び替えられる「in_order_of」

# はじめに

業務で「何かのレコードを特定のid順や数字で並べたい」みたいな要件に出会った経験ある人もいるのではないでしょうか?

当時エンジニア歴2年目の時に詰まった記憶があります笑

そのような時はどうやって実装しますか??

色々書き方はあると思いますが、***Rails7から追加***された“`in_order_of“`というメソッドが便利だったので紹介します。

https://railsdoc.com/page/in_order_of

# in_order_ofを使わない方法

まずは“`in_order_of“`を使用しない方法を考えようかと思います。

“`in_order_of“`の説明だけ見たい人はここは飛ばしてください。

*前提条件

モデル: User
並び替えカラム: id
並び順: [3,2,1]
PostgreSQL使用

“`ruby
ids = [3,2,1]
“`
*実際のクエリは変数を使っているので“`in ($1,・・・)“`みたいになってますが、本題とは関係ないので簡略化しています。

## 1.whereを使って実装

元記事を表示

dockerでrails new する one liner

# これはなに
`docker` で `rails new` するコマンドラインの備忘メモ
“`
docker run –rm -v $(pwd):/app ruby:3.3 bash -c “gem install rails; cd /app; rails new -B -d mysql
“`

# メモ
`-v $(pwd):/app`
コマンドを実行するカレントディレクトリを `/app` にマウントする
このディレクトリ直下に、 `` が作成される。

`ruby:3.3`
使用するdockerイメージ。
ruby 公式からバージョンを選択

`gem install rails;`
ここで、`rails` をインストールする。
必要に応じて、optionを指定

`rails new -B -d mysql;`
ここで、 `rails new` を実行。
`db` に `mysql` を指定

``
作成したい `project-name`

元記事を表示

RSpec の request spec で css_select を使って HTML の内容を確認する

# やりたいこと

RSpec の request spec であるエンドポイントが返す HTML の内容を確認したいです。

# 例

例えば、あるエンドポイントが

“`html

No 名前 絵文字 日時
3 さぶろう 🐈 2024/09/01 00:00:00
2 はなこ 🐕 2024/08/31 23:59:59
1 ジローラモ 🦘 2024/08/01 00:00:00

“`

IIS の CGI でバイナリデータを返すときにハマった

ウェブアプリケーションのサーバーサイドで Excel ブックを作成する必要があり、もともと IIS (Internet Information Services) と Ruby が動作する環境があったこともあり、rubyXL を試してみることにしました。

https://github.com/weshatheleopard/rubyXL

ひとまず、次のようなプログラムを作成してみました。

“`ruby
require “rubyXL”

workbook = RubyXL::Workbook.new

puts “Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”
puts “Content-Disposition: attachment; filename=\”filename.xlsx\””
puts

print workbook.stream.string
“`

しかし、ブラウザーで開くとファイルはダウンロードされるものの、そのファイルは Excel で開く

元記事を表示

古いバージョンのNodeやRubyで作ったアプリをherokuでデプロイする際の設定

## この記事の内容
### 起きたこと
herokuを使って講座で作成したWebアプリをデプロイしようしたところ、なにやらたくさんエラーが起こりました。
おきたエラーの詳細はエラー詳細に記載しています。

### 前提(バージョンなど)
– Ruby:2.7.7
– Rails:6.0.6.1
– Node.js:14.15.0
– Windows11でUbuntu(WSL2)を導入

### 原因
– Rubyのバージョンがherokuの最新バージョンに対応していなかった
– Nodeのバージョンがherokuが標準で使用するバージョンと異なっていた
– buildpackを導入していなかった

## エラー詳細1
### エラーメッセージ
“`
!
! The Ruby version you are trying to install does not exist on this stack.
!
! You are trying to install ruby-2.7.7 on heroku-22.
!
! Ruby ruby-

元記事を表示

【ABC369】D – Bonus EXP のイメージベース解説(動的計画法の基本が理解できる)

## 目的
[AtCoder公式解説](https://atcoder.jp/contests/abc369/editorial/10841)を見て動的計画法の基本が理解できたので、復習用にイメージベースで解説

## 問題
https://atcoder.jp/contests/abc369/tasks/abc369_d

## 解き方
1. モンスターを倒した回数が偶数回だった場合の経験値の合計の最大値(evenExp)と奇数回だった場合の経験値の合計の最大値(oddExp)を求める
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3861065/94f8f92d-e0c4-69a4-49ad-0853523a116f.png)
※evenExpは`今回の経験値 * 2 + oddExp`と`計算前のevenExp`の最大値
※oddExpは`evenExp + 今回の経験値`と`計算前のoddExp

RSpecで快適にテストを書こう!初心者から上級者まで使える15のテクニック

## はじめに

RSpecは Ruby on Rails アプリケーションでよく使用されるテストフレームワークです。しかし、初めて触れる方にとっては少し難しく感じるかもしれません。この記事では、RSpecの基本から応用まで、15の章に分けてわかりやすく解説します。各章では、具体的なコード例と詳細な説明を提供し、RSpecの理解を深めていきましょう。

## 1. RSpecの基本構造

RSpecのテストは通常、`describe`ブロックで始まります。これはテスト対象を示すもので、クラスやメソッド名を記述します。その中に`context`ブロックを置き、特定の状況や条件を表現します。実際のテストは`it`ブロックの中に書きます。

“`ruby
describe User do
context ‘有効なユーザーの場合’ do
it ‘バリデーションが通る’ do
user = User.new(name: ‘山田太郎’, email: ‘yamada@example.com’)
expect(user).to be_valid
end

Ruby on Railsでコネクションプールを導入したredis-rbの導入方法

# 始めに

Ruby on Rails では、Redis を利用して一時的に値を保持するケースが多々あると思います。(たとえば、カート情報の管理やカウント処理など)
もし Redis の String 型のバリューのみで要件を満たせるのであれば、[Railsのキャッシュ機構(低レベルキャッシュ)](https://railsguides.jp/caching_with_rails.html#%E4%BD%8E%E3%83%AC%E3%83%99%E3%83%AB%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5)を利用するだけで、Redis を簡単に扱うことができます。

Rails の `cache_store` に `:redis_cache_store` が設定されている前提で、以下のように Redis を利用できます。
“`ruby
# 取得
Rails.cache.read(key)

# 保存
Rails.cache.write(key, value)

# 削除
Rails.cache.delete(key)
“`
しかし、も