Ruby関連のことを調べてみた2023年01月02日

Ruby関連のことを調べてみた2023年01月02日
目次

ruby 練習問題47 (アウトプット用)

ある映画のハッシュを定義し、格納されている「title」(タイトル)・「genre」(ジャンル)・「year」(公開年)の三つの要素の中から一つを取り出すプログラムを作成する問題。
**定義する変数**
①movie = {“title” => “ハリーポッター”, “genre” => “ファンタジー”, “year” => “2001年”}

②ユーザーが入力するキーを、getsメソッドを利用し定義しましょう

以下、模範解答
“`ruby
def movie_info(movie, data)
puts movie[data]
end

movie = {“title” => “ハリーポッター”, “genre” => “ファンタジー”, “year” => “2001年”}

puts “以下から一つを選んで入力してください。
・title
・genre
・year”

info = gets.chomp
movie_info(movie, info)
“`
以下、解説
今回はハッシュを引数としてメソッドに渡す練習をしました。
前提として、ハッシュ名[キー名

元記事を表示

【Rails】nil? empty? blank? present?の挙動と使い分けを確認

## 1. TL; DR
下記の基準で使い分ける
– nilかどうかの観点のみで判定したい:nil?
– nil + 空のオブジェクトの存在を判定したい:blank?
– 値の有無によって結果を判定したい:empty?
※例外が発生する可能性があるため取り扱い注意
– 空でないオブジェクトの存在を判定したい:present?

#### 早見表
| |nil? |empty?|blank?|present?|
|— |— |— |— |— |
|nil |true |“NoMethodError“|true |false|
|true |false|“NoMethodError“|false|true |
|false |false|“NoMethodError“|true |false|
|”” |false|true |true |false|
|” ” |false|false |true |false|
|[] |false|tru

元記事を表示

【Rails】present?とexists?の挙動を確認し、使い分けの基準を整理する

## 1. present?
– Railsのメソッド
– オブジェクトがある場合はtrueを返す
– present?の反対は、blank?
– 実行するとキャッシュされる

発行されるクエリを見てみると、1回全部の該当レコードをごそっと取ってきていることが分かる
“SELECT “articles”.* FROM “articles” WHERE “articles”.”title” = ? [[“title”, “Test”]]“

“`
irb(main):001:0> Article.where(title: ‘Test’).present?
(1.6ms) SELECT sqlite_version(*)
Article Load (0.2ms) SELECT “articles”.* FROM “articles” WHERE “articles”.”title” = ? [[“title”, “Test”]]
=> true
“`

## 2. exists?
– Railsのメソッド
– SQLのexists式を使う
– 該当レコー

元記事を表示

RSpec MocksのREADMEを翻訳

# 翻訳する目的

[Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)を読み、モック関連と、FactoryBotについて更に知識をつけたいと思った。どちらも技術本で学ぶのは難しいので、リポジトリのREADMEを通じて学ぶのが良いと思った。
Google翻訳やDeepLを用いて全文翻訳を行うと、日本語が不自然で読みにくかったので、今後何度も参照することを考えて、自分で翻訳してしまおうと思った。
FactoryBotのREADMEの翻訳は既に存在していたので、[RSpec MocksのREADME](https://github.com/rspec/rspec-mocks/blob/main/README.md)を翻訳することにした。

# 翻訳時のルール

– Google翻訳やDeepLは利用しない。
– わからない単語を辞書で調べるのはOK。

ここから下が翻訳した内容です。

# RSpec Mocks

rspec-mocksはRSpec向けのテストダブルのフレームワーク

元記事を表示

Rubyのインストール方法

# はじめに
#### ※以下の内容には誤りが含まれる可能性があります

Rubyを学習したいと思い、じゃあ何からしたらいいんだ?とワタクシは最初思いました。

### 「Rubyが無いじゃんYo!」

いや正確にはあるんですが、それは後述します。

# まずRubyをインストールしなきゃ始まらない

インストール方法はさまざまです。OSによっても違いますし、そのOSの中でも複数の方法があるのです。

macOS/linux
* OS標準のRubyを使う。

* ソースからビルドする。
* パッケージ管理ツール(Homebrewなど)を使ってインストールする。
* Ruby専用のパッケージ管理ツール(rbenv、RVMなど)を使ってインストールする。

Windows
* Rubyinstallerを使う。
* WSLまたはWSL2のLinux環境にRubyをインストールする。

その他

* コンテナ環境(Dockerなど)を使う。
* クラウド上の開発環境(AWS Cloud9などを使う)

### ざっ

元記事を表示

Rails API 論理削除の実装

# はじめに
業務のタスクの中で論理削除を実装するタスクが有りましたので、備忘録として書き起こすことにしました。至らぬ点はご容赦ください。。。

# そもそも論理削除とは?
https://www.tutitatu.com/%E3%80%8C%E8%AB%96%E7%90%86%E5%89%8A%E9%99%A4%E3%80%8D%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%82%84%E6%84%8F%E5%91%B3%E3%80%81%E4%BE%8B%E6%96%87%E3%82%84%E9%A1%9E%E7%BE%A9%E8%AA%9E%E3%82%92%E5%BE%B9/#i-2

↑こちらによると
> データベースのレコードを削除する際にフィールド値を変更する事で削除した扱いにする方式で実際のデータは削除しない事。

とあります。PCの「ゴミ箱」機能がこれにあたるとも書かれていました。
論理削除を実装するメリットとしては、「あたかも削除をしたかのように振る舞う」のでいざ復旧しようとなるとすぐにできることがメリットとして挙げられます。

#

元記事を表示

wasi-vfsでパックしたバイナリ(CRuby)を眺めてみた

# wasi-vfsでパックしたバイナリ(CRuby)を眺めてみた
Ruby 3.2.0でWASIベースのWasmへのコンパイルがサポートされた。
https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

その中でも個人的に気になったのはこの記載。
> さらに、WASIの上にVFSを実装しました。これにより、Rubyアプリを単一の.wasmファイルに容易にパッケージ化できます。Rubyアプリの配布が少し簡単になります。

どういうバイナリになっているのかなど、気になったので調べてみたいと思う。

# WASIの上にVFSとは?
`VFS`というと真っ先に思い浮かんだのが、Unix系のシステムで聞く[仮想ファイルシステム(Virtual File System)](https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)。
おそら

元記事を表示

test

testですので

元記事を表示

えっ、Rubyってオワコン言語なの、初心者は何を勉強すればいいの?

## 2022年Qiitaのアドベントカレンダーに見るオワコン言語、人気の言語

世の中にはたくさんのコンピュータ言語があります。一世を風靡し、そしていつしか忘れられていく言語もたくさんあります。皆さんは、いま流行りの言語は何で、これから伸びる言語は何だろう、オワコン言語は何だろうと思ったことはないでしょうか?また、YouTubeでインフルエンサーが「Rubyはオワコンだから」と言ったりしますが、「それってあなたの感想ですよね」、「なんかそういうデータあるんですか」と思ったりしていました。
そんな中 @Dosaidon は、Qiitaにアドベントカレンダーと言うコンピュータ言語別に記事を投稿するイベントがあるのを知りました。12月1日から12月25日までの25日間のカレンダーに投稿していくものです。(あれれっ、アドベントカレンダーって24日終わりじゃないの…)それはさておき@Dosaidonも[2022年アドベントカレンダー、Rubyカレンダー2、3](https://qiita.com/advent-calendar/2022/ruby)に参加しました(PR:Ruby初心者の方読んで

元記事を表示

Mac で binutils をインストールしている状態で rbenv 経由で Ruby をインストールする際のエラー回避

# 概要

https://qiita.com/Hiragi-GKUTH/items/bbd37608b7a517c6ed6d

を見た後に行った回避方法について記載しています。

# 環境

– macOS Monterey 12.5 / Intel プロセッサ
– rbenv 1.2.0
– zsh 5.8.1 (x86_64-apple-darwin21.3.0)
– binutils 2.37
– インストールしようとした Ruby のバージョン : 2.6.9

# 個人の経緯

rbenv で Ruby のインストールに失敗して、失敗ログを確認したら以下の記事と同様のエラーログということがわかりました。

https://qiita.com/Hiragi-GKUTH/items/bbd37608b7a517c6ed6d

rbenv がビルドの際に使う Mac のコマンドを PATH 的に binutils のものを優先してしまうことでエラーが発生するようです。

binutils 自体は使うためアンインストールしたり、PATH から外したりはしたくないです。
次のように

元記事を表示

【個人開発】日用品を自動で購入してくれるアプリを作りました。

## はじめに
こんにちは@prg_mtと申します。
DIVE INTO CODEでエンジニア転職を目指し、4ヶ月間学習をして参りました。
今回はその集大成となるオリジナルアプリについての記事を書いてみます。

## 開発したアプリについて
今回開発したアプリ名は「Stock Roller」です。
アプリ名の由来は「日用品のストックを継続的に回していく」という部分からです。
![スクリーンショット 2022-12-30 17.25.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881858/1c1def99-9ef7-0890-93ac-9bd890573728.png)

【アプリURL】
https://stock-roller.work/
【Git Hub URL】
https://github.com/TomokiMatsubuchi/Stock-Rolling-App.git

### アプリ制作のきっかけ
![スクリーンショット 2022-12-3

元記事を表示

Capistranoを使った自動デプロイで詰まった話 (Your bundle only supports…)

こんにちは、しほです。

Qiita初投稿。Railsで作ったポートフォリオをCapistranoで自動デプロイしようとして詰まった話でございます。

# 環境

Rails 6.1.6

# 背景

こちらの記事を参考に、AWS EC2への自動デプロイ を実装しようとしていました。
https://pikawaka.com/rails/capistrano

Capistranoとかのインストールをしたり、NginxやUnicornの設定をした後、最後に以下の自動デプロイ コマンドを打ってみると
“`
bundle exec cap production deploy
“`
**「Your bundle only supports platforms [“x86_64-darwin-19”]・・・」**
とエラーが発生して進めない。困った。

# 解決にいたるまで

1. とりあえずぐぐる。このあたりの記事を見て、なんかBundlerがうまくいかないんだなーということを考えた。
https://autovice.jp/articles/150

2\. エラーログに指示のあった以

元記事を表示

(備忘録)MacにゼロからRubyの環境構築をする方法

# 環境構築とは?
* プログラミングを書いたり、実行したりするような環境を自分のパソコンに整うこと

# 環境構築の手順

## ①テキストエディタの準備
* テキストエディタは文章を作成、編集するためのソフトウェア
* Microsoftが無料提供しているVisual Studio Codeが有名
* 今回はVisual Studio Codeを中心に進む
* Download URL : https://code.visualstudio.com/

## ②VSCodeに拡張機能導入(推奨)
#### 拡張機能とは?
* VSCode単体ではサポートしてない機能を後から付け加えるためのもの

#### Japanese Language Pack for Visual Studio Code
* 日本語表記にする

#### HTML Snippets
* HTMLタグ、CSSタグの入力を補完

#### Ruby
* Rubyの構文をチェック、間違った箇所を指摘

#### zenkaku
* 全角スペースを知らせる
* zenkakuに関してはインストールしただけでは使用

元記事を表示

コントローラを共通化したModuleに対応するビューを自動で検索させる

# ユースケース

Railsで、複数のコントローラに似たActionがあるときに、それらを1つのModuleに切り出して、共通化することがありますよね。controllers/concerns/xxx_feature.rb のようなファイルに切り出すパターンです。

このとき、対応するビューも共通化したいことがあります。たとえば、showアクションを共通化している場合、こんな感じで自分で指定やれば、もちろんできます。

“`ruby:xxx_feature.rb
def show

render “shared/xxx/show”
end
“`

ただ、以下のような点が不満です。

1. 面倒。
2. あるコントローラでは共通化ビューを使いたい、あるコントローラでは直接コントローラで自前のカスタムビューを使いたいという切り分けをしようとすると、テンプレートの有無を調べたりして煩雑になる。

特に、2については耐え難いと感じて、方法を調べました。

# 解決方法

バッチリ、エレガントな方法がありました。

“`ruby:xxx_feature.rb
module

元記事を表示

[Go]Collection操作が楽楽書けるsamber/loライブラリの紹介

元々RailsからGoの案件にうつって一ヶ月半ほど経過しました。
この間に、Rubyに存在した

– 配列から条件にマッチする要素を取得する“find(detect)“
– 配列から条件にマッチする要素で絞り込んだ配列を生成する“filter(select)“
– 配列から新たな配列を生成する“map“

といった**便利メソッドが標準ライブラリとして存在せずforループやら活用して自分たちでなんとかするしかない・・・というのが実情であると知って絶望** していましたが、Go 1.18で追加されたジェネリクスを利用した外部ライブラリ[samber/lo](https://github.com/samber/lo)を使えば楽に書けることを知って歓喜しました。

自分と同じように**Rails案件からGo案件に移ってきて絶望した人向けに、サンプルコードで対比して紹介**したいと思います。
また、このライブラリには弱点も存在するので、その辺も交えて紹介したいと思います。

なお、Rubyでは配列は「Array」と呼び、Goでも配列はあるけど、実際使うのはほぼ動的配列である「Sli

元記事を表示

ActiveRecord::ProtectedEnvironmentError: の対処方法

## はじめに

Railsチュートリアル第7版の10章の終わりにデータをRenderにデプロイしたところ、タイトルのようなエラーが発生しました。

## 環境

OS: macOS Monterey Version 12.3
Ruby: 3.1.2
Rails: 7.0.4

## 発生したエラー

Manual DeployのDeploy latest commitを実行後、Renderのログに以下のエラーが発生しました。

“`
Dec 29 11:35:59 AM rails aborted!
Dec 29 11:35:59 AM ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
Dec 29 11:35:59 AM If you are sure you want to continue, run the same command with the environment

元記事を表示

Ruby 3.2.0をインストールする時、”The Ruby openssl extension was not compiled.”エラーが出てインストールできない場合の対策

## 環境
– MacBook Pro M1 Max
– macOS 13.1 (Ventura)
– rbenv 1.2.0-50-g593f820

## 問題
Ruby 3.2.0をインストールしている途中、以下のエラーが出ました。
“`zsh
Inspect or clean up the working tree at /var/folders/49/nz02t3_136xgn4jlw6z9r1q40000gn/T/ruby-build.20221229163135.84880.33u6aF
Results logged to /var/folders/49/nz02t3_136xgn4jlw6z9r1q40000gn/T/ruby-build.20221229163135.84880.log

Last 10 log lines:
ERROR: Ruby install aborted due to missing extensions
Configure options used:
–prefix=/Users/yuto/.anyenv/envs/rbenv/ve

元記事を表示

ActiveRecord::RecordNotFound(Couldn’t find Member with ‘id’=2)エラーについて

# ※投稿後、ミスに気付いたので後日編集します!※

初めての投稿です。
プログラミングスクールの卒業制作のような位置付けでオリジナルアプリを作成していて、エラーが出たので備忘録として投稿します。
読みにくい部分もあるかと思いますがご容赦ください。

## 開発しているアプリ
– 自分の趣味で所属している団体内(約70名が所属)で使用することを想定した連絡ツールアプリ。
– 今後はメール一斉送信機能、メンバーを指定したチャット機能、データファイル投稿機能などを実装予定。

## 実装環境
– MacOS Ventura13.0
– Ruby 2.6.5
– Rails 6.1.6.1
– MySQL 14.14
– TablePlus 5.1.0(本番環境のデータベースを管理)

## 状況
– deviseを使ってユーザー新規登録とログイン機能を実装済み。
– マイページ・ユーザー情報編集機能を実装。
– さらに、ユーザー情報より詳細な団員情報の登録・編集機能を実装。
– renderを使ってデプロイが完了。

## 関係するDBの構成
– ユーザー情報:usersテーブル
– 団員

元記事を表示

[Ruby] 整数を判定する、あるいは”整数ではない”について

何番煎じですかってお題ですが、地味に詰まったので言葉にして残してみます。

# はじめに: 筆者について
Ruby歴2ヶ月ほどで、バックエンドの開発が得意です。Javaのエンジニアからキャリアをスタートし、最近1年半くらいはサーバーサイドKotlinの導入やプロダクション用のビルドやアプリ基盤開発などに従事してきました。個人的な趣味としても、規約よりも設定、型によるモデルの実装といった堅牢だが冗長な実装を好む傾向にあります。

そのような背景がありますので、型やnullの状態がコンパイル時にわかるような気で、 “Java屋的な” 発想でRubyを書いてしまいがちです。

# お題: 小数点付きならエラー
簡単な修正の担当となり、「小数点付きならエラー」を実装しようとしていました。

以下の修正が結論です。変数名などはぼかして書いています。
“`ruby
do_on_error unless !@subject&.is_a(Integer)
“`

## インスタンスの型もnullabilityも明示的ではない
はじめに気づいたことは、検査対象は数値のインスタンスとは限らないというこ

元記事を表示

SQLでバルクインサートを使ってテストデータを大量に作成する

# この記事を書いた背景
RailsのAPIモードで開発していたのですが、動作確認のためステージング環境にテストデータを大量に作成する必要がありました。

その際、Railsコンソールからデータを増やそうと思い`each`で繰り返しデータの生成を実行したのですが、herokuのプランの都合上1時間に発行できるクエリ数が3,600に限られており、それがオーバーしたようでデータの作成が途中で終わってしまいました(泣)

しかも、一度クエリの上限数を超えると1時間ほどDBにアクセスできなくなるという問題も、、、
(現在は有料プランに切り替えたので恐らく問題ないですが、当時は無料プランだったためこうした制限に引っ掛かりました)

参考:https://zenn.dev/ttskch/articles/905ae809e29504

– 急に有料プランに切り替えたくても自社持ちの費用でないため承認まで時間がかかる可能性があること、
– リリースまで時間がなく、なるべくすぐにステージング環境で動作検証をしたかったこと
このような理由から、herokuが復旧後、SQLでバルクインサートを行い発行する

元記事を表示

OTHERカテゴリの最新記事