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

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

なんかRBENV_VERSIONが勝手に入ってるな。。と思ったらjetbrainsを疑う

SSIA(最近覚えたので使ってみる)

rbenvでは`.ruby-version`より`RBENV_VERSION`の値が優先される。

プロジェクトで`rbenv local 2.6.10`みたいな事をして2.6.10を使おうとしていたら、`ruby -v`で違うバージョンが出てびっくり、ということがあったので備忘録として残す。

# 結論

RubyMineを使っていたのだが、こいつが勝手に`RBENV_VERSION`に値を入れてくる模様。

`Ruby SDK and Gems`で変えられるので、ここを変えたら`RBENV_VERSION`も変えられる。

![スクリーンショット 2024-04-10 15.45.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441085/f3fbcd03-f069-dc3f-1562-718236998eb9.png)

元記事を表示

DartとJavaScriptでPythonやRubyみたいに%書式(sprintf)を使えるようにしましょう

# はじめに

PythonとRubyを使っているみんなさん、いつも「%書式」を使っていますか?私はいつも使っています。これは元々C言語の機能で、printfとsprintfで文字列を出力する時に使われていたが、その後色んな言語で同じように搭載されています。

PHPなどではsprintfという関数の形で使えますが、文法の一部として扱えるPythonとRubyの方が直感的で便利です。

勿論、PythonとRubyは%書式以外に他の書式の機能がありますね。[前にもPythonで使える書式を比較する記事を書きました。](https://qiita.com/phyblas/items/0a122fe4a18a18a83050)それぞれ特徴があって違いがあります。**色んな言語共通で使える**のは%書式の長所です。

ただし残念ながらJavaScriptはこんな便利な機能を持っていません。関数という使いたいとしても追加パッケージをインストールする必要があります。

最初にJavaScriptを勉強した時に不便を感じて、ないなら自分で作ればいいよね、と思って結局頑張って実装してみました。

元記事を表示

Effective Rubyを読んだ備忘録

# 3章:コレクション
## nil、スカラーオブジェクトを配列に変換するには、Arrayメソッドを使おう

次のようなピザの注文のためのクラスについて考えてみる。

“`ruby
class Pizza
def initialize (toppings)
toppings.each do |topping|
add_and_price_topping(topping)
end
end

end
“`
initializeメソッドは、トッピングの配列を期待しているが、単一のトッピングも渡したいし、トッピングがなければnilも渡せるようにしたい。

そこでArrayメソッドを利用する。Arrayメソッドは、ほとんどのオブジェクトを1個の要素を含む集合に変換し、引数がnilなら空配列に、引数が配列ならそのまま引数を返す。
“`ruby
irb> Array(‘Betelgeuse’)
—>[“Betelgeuse”]
irb> Array(nil)
—>[]
irb> Array([‘Nodroj’, ‘Retep’])
—>

元記事を表示

FactoryBotでhas_oneの関連付けを表現する。traitの基本的な使い方。

FactoryBotでhas_oneの関連付けを表現するのってどうやるんだっけ?ってなったので自分用に備忘録を残しました。

traitという機能を使用しました。
今回はtraitの基本的な使い方➕作業の全体像を記しています。

参考にした記事

https://qiita.com/ShotaroHirose59/items/7c64be350676120de9bd

## 前提条件

CustomerがProfileをhas_oneしています。

“`customer.rb
class Customer < ApplicationRecord has_one :profile, dependent: :destroy end ``` ```profile.rb class Profile < ApplicationRecord belongs_to :customer end ``` ## 本題のコード customerの方のFactoryBot “`spec/factories/customers.rb FactoryBot.d

元記事を表示

【Rails】erbからslimへ変換したい方へ

## はじめに

みなさん`slim`はお好きでしょうか?

`erb`から`slim`への変換をしてくれる便利な`html2slim`というgemがあるのですが、非推奨のメソッドが使用されている関係で警告が出ていました。

それだけでなく、一部のファイルが変換できない現象があったため解決しようと試みました💡

:::note warn
ご覧いただきありがとうございます!
この記事の投稿者は主にRuby on Railsを学習している初学者です。
理解不足な点や内容に誤りがございましたらご指摘いただけますと幸いです。
:::

## 問題
“`
NoMethodError: undefined method `exists?’ for class File
“`
exists?メソッドが非推奨(そして最終的に削除された)ために発生しているようです。
現在は`File.exists?`の代わりに`File.exist?`を使用するのだそうです。

詳しいことまではわからないのですが、ライブラリの記述で起きている問題のため、本家のgemの更新を待つ他にはないようです。

## 解決方法

元記事を表示

備忘: Railsで古い日付を JST の TimeWithZoneに変換すると時刻がずれる

# 追記
https://qiita.com/vivid_muimui/items/876d89f8bdc0a35c4fb5#comment-96533a49b7d45a748ead

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26310/518d80f7-da5c-fc0c-555f-92f95e641442.png)

コメントで教えていただきました!

# 以下、元記事

:memo: ふかぼりきれておらず事象だけのメモ

# 環境

ruby: ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin22]
rails: 7.1.2

# 現象

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26310/af57e6c1-d3d5-e39b-72d4-2136a63f4e7f.png)

“`rb
❯ TZ=

元記事を表示

Discord の BOT で音楽を流したい (w/Ruby)

## 概要

Discord の BOT でボイスチャンネル (以下 VC) に接続して音楽を流す.言語は Ruby.

当記事で BOT の作り方には触れないので[私の過去の記事](https://qiita.com/RabbitAATS/items/31c98b0896f57194ef6b
)を,Discordrb に関する詳しい内容は [Discordrb の GitHub](https://github.com/shardlab/discordrb) を参照されたい.

https://qiita.com/RabbitAATS/items/31c98b0896f57194ef6b

https://github.com/shardlab/discordrb

## 環境

– OS: Rocky Linux 9.3
– 言語: Ruby 3.0.4

## ライブラリの準備

Discord の BOT が VC に接続するには,以下のライブラリが必要.

– libsodium: 暗号処理ライブラリ
– libopus (Opus): 音声圧縮ライブラリ (FFmpeg が使

元記事を表示

AtCoder Beginner Contest 348参戦記録(A~C問題)

RubyでAtCoderに参戦した記録です。
今回はABC3完でした。

## [ABC348 A Penalty Kick](https://atcoder.jp/contests/abc348/tasks/abc348_a)
N回のペナルティキックの結果を「o」と「x」で記述します。3の倍数回目の時のみキックに失敗するそうです。

“`Ruby
n= gets.to_i
for i in (1..n) do
if i % 3 ==0
print “x”
else
print “o”
end
end
“`
特に難しいわけでもないのですが、最初n.timesで書こうとして「あれ?」となりました。
“`Ruby
# 誤答です
n.times do
if (n+1)%3 == 0
print “x”
else
print “o”
end
end
“`
.timesでは0~nまでが順番に渡されるという記憶があったのですが、それは下記のようにパラメータを設定した時ですね。
“`Ruby
n.times do |i|
if

元記事を表示

【Rails】メモ書きしたコメントを一括で見る機能

## はじめに

アプリケーションコード内のコメントにtodoを書くことがあるのですが、実装途中に一覧で確認したい時があり、探したところ見つかりました!!

:::note warn
ご覧いただきありがとうございます!
この記事の投稿者は主にRuby on Railsを学習している初学者です。
理解不足な点や内容に誤りがございましたらご指摘いただけますと幸いです。
:::

## 問題
コメントに記入したtodoの内容は把握できているはずだが、見落としがないか一覧表示で確認したい。

## 解決方法
コメントをアノテーション(注釈)として残しておく機能がRailsにありましたので、そちらを使っていきます。

使用方法は簡単です、コメントの記述方法を少しだけ追加します。
“`ruby:example_controller.rb
def example_action
# TODO: 後でちゃんと実装してくださいね
puts “hoge”
end
“`
コマンドラインで下記コマンドを入力します、すると・・・
“`
bin/rails notes
“`
このような形で表示させ

元記事を表示

【RSpec】フレーキーなテスト(たまに落ちるテスト)の直し方

## はじめに
自動テストを整備しておくと大量のテストを自動実行してくれるので大変便利です。
ですが、テストコードが増えてくると「パスするはずなのに、なぜかたまに失敗する」というテストが出てきます。
このような不安定なテストを「フレーキー(flaky)なテスト」と呼びます。

### フレーキーなテストの問題点
フレーキーなテストは「たまに失敗するだけ」なので、何度かやり直せばパスします。
なので、GitHub ActionsのようなCIツール上でテストが落ちても、「あ、また落ちた。再実行したら直るかな(ポチッ)」という安易な解決策に走りがちです。

しかし、フレーキーなテストを放置するのはよくありません。
理由は以下の通りです。

– 本当はバグのせいで失敗しているのに「きっとフレーキーなテストだからに違いない」と思い込んで、そのままリリースしてしまうから(いわゆる「狼少年」状態)
– 実務レベルの巨大なテストコードになると、再実行するにしても完了まで数十分かかるので開発のテンポが遅くなるから
– 1回の再実行で全パスする保証はどこにもなく、再々実行や再々々実行しないとパスしない可能

元記事を表示

devise導入における基本コマンド

# devise 導入 基本手順
## deviseとは?
deviseとはユーザー認証機能導入を手助けするgemです。
## ユーザー管理機能の実装
### deviseのinstall
#### gemファイルへの追記
**Gemfile**
“`
# 中略
gem ‘devise’
“`
#### bundleによる反映
**コマンド**
“`
bundle install
“`
### deviseの設定ファイルの作成
“`
rails g devise:install
“`
### userモデルの作成
モデルやマイグレーションファイルの自動生成、ルーティングへの追記を行う[^1]

[^1]:**user**はあくまでモデル名の一例。masterでもなんでも良い。
“`
rails g devise user
“`
### usersテーブルの作成
マイグレーションの実行
“`
rails db:migrate
“`
再起動して反映
“`
rails s
“`

### viewの作成
“`
rails g devise:views
“`

元記事を表示

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う PWM編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino](https://wiki.seeedstudio.com/Grove-Beginner-Kit-For-Arduino/) を使ってみる記事の第3回、今回は PWM (Pulse Width Moduration) を題材にします。

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* mruby/c – [Rboard](https://www.sjc-inc.co.jp/service/rboard)

今回、ラズパイのライブラリは、まだPWMを用意していないので一旦保留にします。

# 1. Buzzer

Grove ブザーモジュールは、ピエゾ素子を使ったモジュールです。
Buzzer という名前に反して、自励式ではありません。つまり電源をONしただけでは音が鳴りません。音を鳴らすには、鳴らしたい周波数で信号線を ON/OFF する必要があります。

元記事を表示

新社会人が読むべき、初心者からRailsを始めて三ヶ月が経った人間の日記①

## 注意
仕事をやめ実家に帰ることとなった際、
兄に誘われた事をきっかけにRailsをやり始めた。
プログライミング?何それ?からの三ヶ月です。
つらつらと自分が分かった事、知ったことを羅列しておきます。
新社会人に教えていて、こいつどこでどうつまずいるのかよくわかんないなって思っている人は、何かの参考になるかも知れません。
※誤った情報もあるかも知れません。
# 学んでいった過程
### エンジニアにはインフラ、システム、フロントエンドなどがある。
・インフラエンジニアはシステムやインターネットを使用するために必要なサーバーやネットワークを開発、運用できるようにする仕事
・システムエンジニアはインターネット内のシステム全体の開発、設計をする仕事
・フロントエンドエンジニアはwebサイトやアプリの見た目を開発、設計をする仕事
webページで言うと、ログインしたり、お気に入りをしたり、投稿された動画が並ぶような開発をするのがシステムエンジニア、
それの見た目をしっかり作るのがフロントエンドエンジニア、
インフラエンジニアがいるからそのインターネットが使えてる。
そう言う認識です。
##

元記事を表示

density

“`ruby:title.rb

import pandas as pd
import numpy as np

r_res = 0.01 # 距離方向の分解能(m)

# DataFrameの作成
df = pd.DataFrame(columns=[‘r’, ‘theta’, ‘phi’])

# r, theta, phiの値を生成するリスト内包表記
data = [{‘r’: r, ‘theta’: theta, ‘phi’: phi}
for r in [num * r_res for num in range(0, 1000)]
for theta in range(-30, 32, 2)
for phi in range(-30, 32, 2)]

sin_th = np.sin(np.radians(df[‘theta’].astype(float)))
cos_th = np.cos(np.radians(df[‘theta’].astype(float)))
sin_ph = np.sin(np.radians(d

元記事を表示

keisan3

“`ruby:title.rb

import pandas as pd
import numpy as np

# DataFrameの作成
df = pd.DataFrame(columns=[‘r’, ‘theta’, ‘phi’])

# r, theta, phiの値を生成するリスト内包表記
data = [{‘r’: r, ‘theta’: theta, ‘phi’: phi}
for r in range(4, 5) # rの範囲は1~10
for theta in range(-60, 62, 2)
for phi in range(-60, 62, 2)]

# DataFrameにデータを追加
df = df.append(data, ignore_index=True)

df[‘x’] = df[‘r’] * np.sin(np.radians(df[‘theta’].astype(float))) * np.cos(np.radians(df[‘phi’].astype(float)))
df[‘y’] =

元記事を表示

keisan2

“`ruby:title.rb

import pandas as pd
import numpy as np

# DataFrameの作成
df = pd.DataFrame(columns=[‘r’, ‘theta’, ‘phi’])

# r, theta, phiの値を生成するリスト内包表記
data = [{‘r’: r, ‘theta’: theta, ‘phi’: phi}
for r in range(4, 5) # rの範囲は1~10
for theta in range(-60, 62, 2)
for phi in range(-60, 62, 2)]

sin_th = np.sin(np.radians(df[‘theta’].astype(float)))
cos_th = np.cos(np.radians(df[‘theta’].astype(float)))
sin_ph = np.sin(np.radians(df[‘phi’].astype(float)))
cos_ph = np.cos(np

元記事を表示

配列をコピーする時の注意点

# はじめに
 Atcoder004 – Cross Sum(★2)の問題を解いている時、自分の考えている処理と異なる処理が行われた。具体的には、2次元配列をコピーする際、コピーする元の配列まで変化してしまうというエラーが発生した。自分の学習のメモとして、記事を書いた。
# コード
“`ruby
#1次元配列の場合
a = [1,3]
b = a.dup
b[0] = 2

print a #[1, 3]
print b #[2, 3]

#2次元配列の場合
c = [[1,2],[1,3]]
d = c.dup
d[0][0] = 2

print c #[[2, 2], [1, 3]]
print d #[[2, 2], [1, 3]]
“`
# 解説
 1次元配列の場合、配列をコピーしたものの要素を変更しても、元の配列は変化しない。しかし、2次元配列の場合、配列をコピーしたものお要素を変更すると、元の配列も変更されてしまう。
 原因は、dupやcloneなどの配列を複製するコマンドは浅いコピーであることだ。浅いコピーの場合、コピー元の配列も変更する場合が生まれてしまう。今回の

元記事を表示

Ruby でかけっこのパズルを解く

https://qiita.com/jpwgad/items/5431e452b4a65cba3862
# 問題
>一郎、二郎、三郎の三人で駆けっこをして、その結果を次のように言っています。
>
>一郎:「僕は一番じゃない」
>二郎:「僕は一番だ」
>三郎:「僕は二番だ」

三人のなかで一人だけウソをついています。それは誰でしょう?

# Ruby で解いてみる
総当りで解いています。
0, 1, 2 でそれぞれ一郎、二郎、三郎を表しています。

“`ruby
names = %W(一郎 二郎 三郎)
(0..2).each do |usotsuki| #嘘つきを選びます
table = [-1, 1, 2] #与えられた条件(否定は負にします)
#嘘をつかせます
table[usotsuki] = -table[usotsuki]
#可能性のある順位を配列にします
tmp = table.map { _1 < 0 ? [1, 2, 3] - [-_1] : [_1] } #順位を総当りでまわして判定します [1, 2, 3].permuta

元記事を表示

新人エンジニアに向けてのエール

# 初投稿です。

4月も1週間過ぎたので、駆け出しエンジニアに向けてエールを送る意味で記事を執筆することにしました。

まず初めに軽い自己紹介から。
### About me
“`java:AboutMe.java
// 私は都内のIT企業で働く4年目のエンジニアです。
// 得意科目はフロントエンドの実装で、これまでにReact.jsやVue.jsなど
// のプロジェクトで要件定義~テストまで幅広く開発してまいりました。
// フロント以外にも、JavaやPHP、Pythonなども経験があります。
// 4年目といってもまだまだ勉強することだらけの毎日ですが、培ってきた知見や、
// つらかった経験、楽しかった経験などつらつらと発進できたらと思います。
// ということで。。。

String greeting = “よろしくお願いします。”;
System.out.println(greeting);
“`

### プログラミング学習について

未熟な私ですが、最近では後輩なども何人かできて、よく質問されるのが、「どうやって覚えてますか?」といった質問です。
その問いに対

元記事を表示

Railsを使ってアプリを作る(基礎中の基礎)

# はじめに
今回は、railsをつかってアプリをつくり、デプロイまでの基本的な流れをまとめました。
基礎中の基礎という通り、画面にHello,worldを表示するだけのアプリになります。
エディタはVSCodeを用いて、バージョン管理をGitで行い、Renderへデプロイします。
使用ハードはmacbook m2です。
Rubyはデフォルトで入ってるので、Railsのインストールから始めます。

# Railsをインストール
“`
$ gem install rails
“`

-vを行うことでバージョンの指定もできます。

“`
$ gem install rails -v 7.0.4.3
“`

次にbundlerをインストールします。

“`
$ gem install bundler
“`

# アプリを作る

Railsプロジェクト用のenvironmentディレクトリを作ります。

“`
$ cd
$ mkdir environment
$ cd environment/
“`

rails newを実行する。
このとき、PCにインストー

元記事を表示

OTHERカテゴリの最新記事