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

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

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.

元記事を表示

Rails環境構築エラーメモ

# 環境

– Windows 11 (WSL2)
– シェル:Bash

# やりたいこと

大学の教育プログラムでRuby on Railsをいじることになった。
エラーが出たので解決法のメモ

“`bash
rails new
“`

# エラー内容

エラー内容

“`
$ rails new pdiary –skip-git
Based on the specified options, the following options will also be activated:

–skip-decrypted-diffs [due to –skip-git]

create
create README.md
create Rakefile
create .ruby-version
create config.ru
create Gemfile
create app
cre

元記事を表示

RSpecテストにおける build と create の使い分け

# はじめに
RSpecでテストを書く際、FactoryBotを使用してテストデータを生成することが一般的です。その際、`build` と `create` という2つのメソッドがよく使われますが、これらの使い分けは重要です。本記事では、これらのメソッドの違いと適切な使用場面について解説します。

# `build` と `create` の基本的な違い
## build

– メモリ上にオブジェクトを作成するが、データベースには保存しない
– 処理が高速
– データベースに影響を与えない

## create

– オブジェクトを作成し、データベースに保存する
– `build` より処理が遅い
– データベースに実際にレコードが作成される

## 使い分けの指針

### buildを使用する場合

1. モデルの単純なバリデーションをテストする場合
2. データベースへの保存が不要なテストの場合
3. テストの実行速度を重視する場合

例:
“`ruby
RSpec.describe User, type: :model do
let(:user) { build(:use

元記事を表示

Railsチュートリアル 第4章 復習用

Railsチュートリアルで私が一番苦手な分野である第4章をアウトプットのために記述していく
最近プログラミング始めたビギナーなので間違いがあったら先輩方に訂正していただきたい
この記事をかなり参考にした
https://qiita.com/take_webengineer/items/265f29b77f3126d3a9df

単純なオブジェクト指向(?)のはなし

・クラスの下にインスタンスがある(Stringクラスの中に”foobar”という文字列がある)
・詳しくはこちらのサイトが解説している(スマホの例がわかりやすい) https://type.jp/et/feature/25261/
・メソッドとは、オブジェクトに渡されるメッセージ( “foobar”.length のlengthがメソッド)
・Rubyはメソッドの引数のカッコ()を省略して記述できる。
・ハッシュがメソッド呼び出しの最後の引数である場合は、波カッコを省略できる
“`Ruby
# メソッド呼び出しの丸カッコは省略可能。
stylesheet_link_tag(“application”, “data

元記事を表示

Ruby gem 開発!中国語(簡体字・繁体字)と日本語を判別するgemを作ってみた(前編)

# Ruby gem 開発!中国語と日本語を判別する gem を作ってみた(前編)

こんにちは、私の名前は九兵衛です。
今回、真面目に Ruby gem を開発することになり、その過程で学んだことを皆さんと共有したいと思います。
私が作ろうとしているのは、[Unihan Database](https://unicode.org/charts/unihan.html) で公開されている `Unihan_Variants.txt` に基づいて中国語(簡体字・繁体字)と日本語を判別する gem です。

## gem って何?なぜ作るの?

最初に、「gem」って何なのか、ぶっちゃけよくわかっていなかったんです 😅
調べてみると、gem は Ruby のライブラリやアプリケーションをパッケージ化したものだと分かりました(それはそう)
つまり、自分で作った便利な機能を、他の人も簡単に使えるようにするためのもの

私がこの gem を作ろうと思ったのは、多言語対応をするのに日本語と中国語を判別する必要があったからです。
既存の gem を探してみたんですが、ピッタリなものが見つからず…

元記事を表示

【Tips】Railsのバージョンアップ時にload_defaultsを更新し忘れる問題に気付きやすくする

## 解決したい問題
既存のRailsアプリケーションをバージョンアップする場合、`config/application.rb`で`config.load_defaults`も(どこかのタイミングで)更新する必要があります。

“`diff_ruby:config/application.rb
class Application < Rails::Application # Rails 7.0から7.1にバージョンアップする - config.load_defaults 7.0 + config.load_defaults 7.1 ``` しかし、この設定をうっかり更新し忘れて「よし、Rails 7.1にアップデートできたぞ!🙌」と喜んでいたら、実は`load_defaults`が7.0のままだった😱という問題が起こる可能性があります。 というか、僕は先日やらかしました、はい😂 (再度Rails 7.1向けのプログラム修正と動作確認を余儀なくされました……) ## 改善策 この問題に気付きやすくするように、`config/application.rb

元記事を表示

Index name ‘Index name’ on table ‘Table name’ already existsって言われたとき

# はじめに
以下のマイグレーションエラーがよく起きてたけど、
対処法は毎度同じだったので手順を残す

## Index name {Index name} on table {Table name} already exists
`rails db:migrate`または`rails db:migrate:up VERSION={バージョン}`したときに、
上記のエラーメッセージで怒られる

## やったこと

テーブルまたはインデックスが本当にあるのか確認
“`cmd
$ docker compose exec db bash
$ mysql -u root -p
# パスワード入力

# 本当にテーブルがあるのか → あった
show columns from {Table name};

# そのテーブルに当該Indexはあるのか → あった
show index from {Table name};
“`

作成しようとしている所に作成しているあるから怒られると思う
ならば消してみる
“`cmd
# インデックスがあれば消す
alter table {Table nam

元記事を表示

mapメソッドを&:と一緒に使う時の方法

## mapメソッドってどんななの?
>各要素に対してブロックを評価した結果を全て含む配列を返します。
なので、計算してそれを配列で返してくれるメソッドですね。

ただ、良く
“`
members = organizations.map(&:member)
“`
というコードを見かけます。

これなんなん?って思っていたので、調べてみました。

“`
organizations.map { |org| org.member }
“`
が省力して書ける感じですね。これはよく中間テーブルとかで、経由先をまとめて取得したい時とかに使います。
イディオム的に覚えるしかないやつですね〜

## 参考記事

Ruby: アンパサンドとコロン`&:`記法について調べてみた

元記事を表示

sort_byをHashに対して使う時の話

## どんなメソッドなの?
>ブロックの評価結果を <=> メソッドで比較することで、self を昇順にソートします。ソートされた配列を新たに生成して返します。

なので、ArrayやHashで使って場合に、中身をソートして配列を返すってメソッドですね。

## 具体例
“`
# サンプルハッシュ
hash = { 3 => “apple”, 2 => “banana”, 5 => “cherry”, 1 => “date” }

# キーでソート
sorted_by_key = hash.sort_by { |key, value| key }
puts “Sorted by key (as array):”
p sorted_by_key

# 値でソート
sorted_by_value = hash.sort_by { |key, value| value }
puts “\nSorted by value (as array):”
p sorted_by_value
“`

こんな感じで使用できます。

ただ、Hashで使った場合は、配列になってしまうのでHashのまま扱い

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程〜要件定義〜

## はじめに

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

## 要件定義

### 機能要件

#### ユーザー管理
– **ユーザー登録**: 名前、メールアドレス、パスワード、住所を入力して新規登録。
– **ログイン/ログアウト**: 登録済みユーザーがメールアドレスとパスワードでログイン。
– **ユーザープロフィール管理**: 名前、住所、メールアドレス、電話番号の変更機能。

#### 依頼管理
– **依頼内容**: タイトル、説明、カテゴリー、条件価格、画像をアップロードし、依頼の投稿。
– **依頼一覧表示**: 全依頼の一覧を表示、カテゴリーや価格帯でフィルタリング可能。
– **依頼条件詳細表示**: 依頼の条件の詳細情報(タイトル、説明、上限・下限価格、依頼者情報、着払い可否)を表示。
– **依頼検索**: 依頼している商品タイ

元記事を表示

view/devise/passwords/edit.html.erbとview/users/edit.html.erbの違い

# ①app/view/devise/passwords/edit.html.erb
## 目的
このファイルは、パスワードをリセットするためのビューを提供するためのもの。
ユーザーが「パスワードを忘れた」場合に、メールで送信されたリンクを使って新しいパスワードを設定するためのフォームとなる。

## 主な機能
・パスワードリセットトークンの入力
・新しいパスワードの入力
・パスワードの確認
・フォームの例

## 実装例
“`ruby:app/view/devise/passwords/edit.html.erb

Change your password

<%= form_with(model: resource, url: password_path(resource_name), method: :put, local: true) do |f| %>
<%= devise_error_messages! %>

<%= f.label :password, "New password" %>

元記事を表示

Macでちょっと考えて好きなRubyを使う方法

https://qiita.com/hana-da/items/b7afec4393440d74c17a

そうなんですよ。一番新しいのが一番いいやつなので、それを使っておくのがいいのですよ。。。

でもね、古風なのもよかったりするじゃないですか? 2.7.8 とか。

それ、できるよ。そう [rbenv](https://github.com/rbenv/rbenv) ならね。

# そもそも rbenv とは

[rbenv](https://github.com/rbenv/rbenv) とは様々なversionのRubyを共存(同時にインストール)させつつ、簡単にいい感じに切り替えて使えるようにするツールです。
そして [ruby-build](https://github.com/rbenv/ruby-build) とはrbenv環境用に様々なversionのRubyを簡単にインストールする仕組みです。

なので流れとしては

1. rbenv 自体を整える
2. ruby-build を整える
3. ご希望のRubyのversionを選ぶ
4. ご希望のversionのRu

元記事を表示

Rubyで配列の変更を防ぐ:インスタンスの共有とコピーについて

今回はRubyでの配列のインスタンス共有とコピーについて、実際の問題とその解決方法を紹介します。この記事では、特に`dup`メソッドを使って元の配列が変更されるのを防ぐ方法に焦点を当てます。

## 問題の背景
Rubyでは、変数にはオブジェクトの実体ではなく、そのオブジェクトへの参照が格納されます。したがって、ある変数を別の変数に代入すると、両方の変数が同じオブジェクトを参照することになります。これにより、どちらかの変数を通じてオブジェクトが変更されると、他方の変数でもその変更が反映されることになります。

例えば、以下のコードを見てください。

“`ruby:example.rb
original_array = [“apple”, “grape”]
save_array = []
p save_array = original_array
original_array[0] = “banana”
p original_array
p save_array
“`
このコードを実行すると、`save_array`に`original_array`を保存したと思いましたが、実際には

元記事を表示

Macで何も考えずに最新の一番いいRubyを使う方法

![Elshaddai_free_images056.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17434/02e12d6c-9ad8-6d58-0996-1933c6f7b090.jpeg)
**一番新しいRubyが一番速くて一番よいRuby**

という事で最新のRubyを何も考えずに入れて使う方法です。

最新のRubyは年に数回(2ヶ月に1回)リリースされるので、それに追従して最新のRubyを入れつづけやすいように [rbenv](https://github.com/rbenv/rbenv) というツールを使います。

# 下ごしらえ

基本的には https://github.com/rbenv/rbenv#basic-git-checkout に書いてある事をそのままやるだけなのですが、この記事では `何も考えずに` がウリなので何も考えなくていいように、何も考えずに以下のコマンドをターミナルへコピペしてください。

## まず rbenv をインストール

ターミナルを起動して以下

元記事を表示

Rubyで配列から複数の値を削除する

Rubyで配列から複数の値を削除する方法が分からなかったので調べました。

元となる配列base_listと削除したい文字が入っている配列delete_listは以下です。

“`
base_list = [1, 2, 2, 3, ‘hoge’, ‘fuga’, ‘piyo’] # 元の配列
# => [1, 2, 2, 3, “hoge”, “fuga”, “piyo”]

delete_list = [2, ‘fuga’] # 削除したい文字の配列
# => [2, “fuga”]

“`

## -(マイナス) 指定した配列の要素を取り除いた新しい配列を返す

「`-`」を使って、`元の配列 – 削除したい文字`とすることで、指定文字が削除された新しい配列が作成されます。

“`
new_list = base_list – delete_list
# => [1, 3, “hoge”, “piyo”]

“`

元の配列には変化はありません。

“`
base_list
# => [1, 2, 3, “hoge”, “fuga”, “piyo”]

“`

## *

元記事を表示

メール本文や件名から、必要な情報を抽出する

# はじめに

ワークフローの完了通知など、システムからメールで通知が送られてくるケースは多いかと思います。通知の受信をトリガーにした場合、メール本文や件名に含まれる情報を抽出する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3444315/cbc9b95a-d96d-a366-c815-5c74866dab96.png)

Workatoを使って、これらの情報をどのように抽出すればよいでしょうか?

# 正規表現を使えばメール本文から情報が抽出可能

正規表現 (regular expression) というものを使うと、メール本文のテキストから条件に合う部分を抽出することが可能です。フォーミュラモード (formula mode) を使えば、簡単に正規表現を使うことが可能です。

### そもそも正規表現とは?

正規表現は、英語では regular expression と呼び、文字列のパターンを指定するための記述方法です。特定の文字列を検索、置換、抽出したりす

元記事を表示

OTHERカテゴリの最新記事