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

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

mysql2 (0.5.3) がインストールできなかった時の対処法

##### 下記のコマンドで解決しなかった人受けの記事です
“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/zstd
$ bundle install
“`

この方法で解決することも多いですが、私の場合は解決しませんでした。

## 最終的な解決方法

##### 最終的には Ruby の再インストールを行うことで問題が解決しました。

この方法で解決できたので、同じような問題に遭遇した方は試してみてください。

## まとめ

Ruby 2.7.3 で `mysql2` (0.5.3) のインストールに失敗した場合、まずは以下のコマンドを試してみましょう。

“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/

元記事を表示

[Rails] Active Recordの関連付け

## はじめに

Ruby on Rails における Active Record の関連付けは、データベース内のテーブル間の関係を簡単に表現する方法です。この記事では、Rails の主要な関連付けタイプについて解説します。

## なぜ関連付けを使うのか?

関連付けを使用する主な理由は以下の通りです:

1. コードをシンプルに保つ
2. データベースの操作を簡単にする
3. モデル間のつながりを分かりやすくする
4. 共通の操作を一貫して行える

## Rails の主要な関連付けタイプ

Rails では以下の 6 種類の関連付けがあります。それぞれを日常生活の例を使って説明していきます。

### 1. `belongs_to`(〜に属する)

`belongs_to` は、「このモデルは他のモデルに属している」という関係を表します。

例:生徒は学級に属している

“`ruby
class Student < ApplicationRecord belongs_to :classroom end class Classroom < ApplicationRecord

元記事を表示

エラー発生→解決

備忘録として、こんな事で悩んでたなーと将来見返すときの為に記述します。

エラーコード
ActiveModel::UnknownAttributeError in PrototypesController#create
unknown attribute ‘prototype_id’ for Prototype.

今までできていた新規投稿が出来なくなった。
createアクションの記述が間違い?

訂正前
def prototype_params
params.require(:prototype).permit(:title, :catch_copy, :image, :concept).merge(user_id: current_user.id, prototype_id: params[:prototype_id])
end

訂正後
def prototype_params
params.require(:prototype).permit(:title, :catch_copy, :image, :concept).merge(user_id: current_u

元記事を表示

Ruby sort_by でソートの基準を設定

# はじめに
本記事はRuby初心者が備忘録として作成したものとなっております。間違い等ありましたら、指摘していただけると幸いです。

## sort_byメソッドとは?
ソートの基準を自由に設定するができ、より複雑なコレクションの並び替えが可能になる。
sort、sort_byはどちらも配列をソートするメソッドですがsort_byのほうが処理が速いそうです。

“`:Ruby
books = [
{name: “Book2”,price:1000},
{name: “Book1”,price:500},
{name: “Book3″,price:2000}
]

sort_book = books.sort_by{ |book| [book[:price],book[:name]] }

puts sort_book

【実行結果】

{:name=>”Book1″, :price=>500}
{:name=>”Book2″, :price=>1000}
{:name=>”Book3”, :price=>2000}
“`

降順ソートをしたい場合は `-` を

元記事を表示

【Ruby】初学者向け-言語基礎①

Stringについて学んだことを整理しました。

Stringに使用するメソッド一覧

**upcase**
…小文字の文字列を大文字にする
<使用例>

test = 'test'
test.upcase
    =>TEST

—————————-
**downcase**
…大文字の文字列を小文字にする
<使用例>

test = 'TEST'
test.downcase
    =>test

—————————-
**slice**
…文字の切り分けを行う
<使用例>

test = 'あいうえお'
 test.slice(1,2)
  => "いう"

—————————-
**size**
…文字の大きさを確認する
<使用例>

test = 'あいうえお'
 test.size
  => "5"

—————————-
**to_i**
…文

元記事を表示

Vimerの開発スピードに勝つ為のVSCode拡張機能開発

結論から言うと勝てはしないと思う。
しかし、私は自作のVSCode拡張機能を開発して実際に今の開発チームに使用してもらって、開発効率をかなり上げた。

今回は開発した拡張機能の紹介と簡単に作り方を紹介します。
見ていただけた方達の開発効率の助けになれば思います。
実務でRailsを使用しているのでRuby寄りの機能もありますが、考え方は他の言語でも同じだと思います。

まずgenerator-codeをグローバルインストールします。これをYoemanで使用するとVS Code拡張のプロジェクトの雛形を生成できます。
“`bash
npm install -g yo generator-code

“`

“`bash
yo code

_—–_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|–(o)–| │ Studio Code Extension │
`———´ │ generator!

元記事を表示

【Ruby】getsメソッドとchompの使い方について

# はじめに
こんにちは、今回はRubyのgetsメソッドとchompメソッドについてお話します。
この2つのメソッドは、ユーザーからの入力を処理するときによく使われますが、意外と知られていない細かい部分もあるので記事にしようと思いました

# `gets`メソッドとは
まずは基本的な`gets`メソッドの解説をしていきます
`gets`メソッドは、ユーザーの入力を受け取るためのメソッドです。プログラムが実行されると、キーボードから入力を受け取り、その値を文字列として返します。下の例を見てみましょう。
“`ruby:gets1.rb
input = gets
puts “あなたが入力したのは: #{input}です”

# (入力)こんにちは
# あなたが入力したのは:こんにちは
# です
“`
このコードを実行すると、コンソール上で入力を待ちます。例えば「こんにちは」と入力してEnterキーを押すと、上記のように表示されます。
本来であれば、「あなたが入力したのは: こんにちはです」のように出力したいのですが、`gets`のみの場合だとこんにちはのうしろに改行(`\n`)が入りま

元記事を表示

それってSetにする価値ありますかね?

# はじめに

競プロ([AtCoder](https://atcoder.jp/))をやっていると、配列の要素数や検索回数が大きい場合、重複削除目的ではなく高速化のために、配列(`Array`, `List`)を`Set`や`Map`(Rubyの場合`Hash`)に変換することはよくあります。

さて、実業務ではどうでしょうか?

実際に扱う配列の要素数、検索回数が$10^6$程度ということはそんなにないかもしれません。
むしろ、要素数や検索回数が100未満ということが多いのではないでしょうか?

では、この場合に、配列を`Set`や`Map`(or `Hash`)に変換する価値はあるのでしょうか?
もちろん、`Set`, `Map`(or `Hash`)になったものを、検索する速度が速いことはわかります。

しかし、`Set`や`Map`(or `Hash`)に**変換するにもコストがかかります**。

**境界はどこでしょうか?**

今回、`Ruby`, `Javascript`, `Kotlin`で、`Set`, `Map`(or `Hash`)の使用は要素数・検索回数がどれ

元記事を表示

Rubyのgemの作り方を学んでみた

## なぜやるか?

普段なんとなく必要なgemをinstallして使っているが
実際どうやって作られて公開されているかを知ってみたかった。

## どういうgemを作るか?

今回は、よくSQLのQuery文を忘れることが多いので
入力値から自動でSQL文を作成してくれるgemを作ってみようと思います。
名前は、「sql_craft」にします!

## 作ってみる

https://guides.rubygems.org/make-your-own-gem/ を参考に進めます。

まず、以下のようなディレクトリ構成にする必要があります。

“`sh
$ tree
.
├── sql_craft.gemspec # gemspecは、gemの中身、作成者、バージョンを定義する。
└── lib
└── sql_craft.rb # 実際のコードの中身

“`

./lib/sql_craft.rb を 以下のように記述します。
とりあえず、入力値を元に
DATABASEのcreate文とdrop文を出力するプログラムを書いてみます。
“`ruby
module SqlCr

元記事を表示

2つのモデルを使ってユーザーフォロー機能の実装

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
Xのクローンサービスを制作している時に自分が躓いたユーザーフォロー機能の実装内容について知識整理も兼ねてまとめたものです。

## 実装時のER図(最終版)
![スクリーンショット 2024-10-14 20.41.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/03d3eea2-1ef1-543e-d5d2-8fca3a4a9cc0.png)

## 実相当初のコード
“`ruby:user.rbの関連箇所を抜粋
has_many :relations, dependent: :destroy
has_many :followers, through: :relations
“`
“`ruby:relation.rb
class Relation < ApplicationRecord belongs_to

元記事を表示

RailsのEnum型を使う

## Enum(列挙型)とは
名前がついた定数の集まりです。
あらかじめ用意した選択肢の列挙からデータを選択することで、可読性の向上, 値の代入ミスを防ぐことができます。

## DBのEnum(列挙型)
RailsのEnumを見る前にDBレベルでのENUMについて説明します。
DBのENUMはテーブル作成時に列挙された定義リストに存在する値のみを保管可能になるデータ型です。

要するに”banana”, “apple”, “orange”と定義すると、その3種類しか保存ができなくなります。

## Ruby on RailsでのEnum
Railsのenum型は`数値のカラム`に対してプログラム上で扱える別名を付与することで使用することが可能です。

重要な点としてDBレベルで見るとカラムの型は`数値`です。
これにより、DBのカラムの型自体をEnumにした場合と比べ、カラムに保存可能な値を変更したい際に、DBの変更が必要になる点や、アプリ側からカラムに保存可能な値がわかりづらいという問題点を解消できます。

## Enum型を定義する
今回はAnimalというModelを作成し、k

元記事を表示

【Ruby】変数と引数の違いについて

# はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
Rubyを勉強していて当たり前に変数とか引数という言葉が出てくると思うのですが、どう違うの。と言われたら明確に説明できますか?
中高の数学で変数があり、同じ意味でとらえてはいけないよということを本記事で紹介していきたいと思います

環境:ruby 3.3.5

# 変数とは
中高生数学でやった変数とは全く別物ということをまず前提で聞いてください。特に独学で勉強している方は、反射的に変数と聞けば`x`や`y`を想像してしまうのではないでしょうか。
知っている単語は無意識的に知っている知識で補おうとするので、勘違いしていることに気づかなくなってしまいます。そういったバイアスがあることを認識してさっそく変数はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
Rubyを勉強していて当たり前に変数とか引数という言葉が出てくると思うのですが、どう違うの。と言われたら明確に説明できますか?
中高の数学で変数があり、同じ意味でと

元記事を表示

【Ruby】URI.escapeが使えない

## はじめに
Railsのアップデート中にURI.escapeを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
URI.escape(str)
“`

エラー文
“`ruby
NoMethodError (undefined method `espace’ for URI:Module)
“`

## 解決方法
Ruby3.0からURI.escapeは削除されました。また、URI.unescapeも削除されています。
代わりに、CGI.escapeやURI.encode_www_formなどを使用します。

## 参考

元記事を表示

Rubyで自動販売機のプログラムを作成する

## はじめに
[前回](https://qiita.com/at-sacai/private/eb933e1c8f73f28e6741)に引き続き、Ruby学習のアウトプットとして今回は自動販売機のプログラムを作成しました。

上記の内容について、備忘のためにメモ書きを残しておくことにします。

## 仕様

Suicaのみで購入可能な自動販売機のプログラムとします。

### Suica

– デポジットとして500円がデフォルトでチャージされているものとする
– Suicaには100円以上の任意の金額をチャージできる
– 100円未満をチャージしようとした場合は例外を発生させる
– Suicaは現在のチャージ残高を取得できる

### 自動販売機の在庫管理

– 自動販売機は飲み物を3種類(ペプシ、モンスター、いろはす)を格納できる
– 飲み物は名前と値段の情報をもつ
– 初期状態で、3種類の飲み物はそれぞれ5本格納されている
– 自動販売機は在庫を取得できる

|名前 |価格 |
|:——|:—|
| ペプシ |150円|
| モンスター|230円|
| いろは

元記事を表示

Rubyでゴルフのスコア名を出力するプログラムを作成する

## はじめに
[前回](https://qiita.com/at-sacai/private/aae5231711cea1e6e706)に引き続き、Ruby学習のアウトプットとして今回はゴルフのスコア名を出力するプログラムを作成しました。

上記の内容について、備忘のためにメモ書きを残しておくことにします。

## アウトプットイメージ

以下のようなテキストファイル(1行目:規定打数、2行目:実際の打数)を入力値として、ゴルフのスコア名を出力します。

入力値のそれぞれの値の範囲は以下の通りです。

– `3 ≤ 規定打数 ≤ 5`
– `1 ≤ 実際の打数`

※ ゴルフのルールやスコア名の説明は省略させていただきます。

“` plaintext:case_1.text
4,4,5,3,5,4,4,3,4,4,5,4,4,3,4,4,3,5
2,3,1,5,8,3,5,1,5,6,2,5,7,2,5,5,2,6
“`
出力の例
“`
イーグル,バーディ,コンドル,2ボギー,3ボギー,バーディ,ボギー,ホールインワン,ボギー,2ボギー,アルバトロス,ボギー,3ボギー,バーデ

元記事を表示

Rubyでカレンダーを表示するプログラムを作成する

## はじめに
以前からRubyの学習を進めており、アウトプットとしてカレンダーを出力するプログラムを作成しました。

今回は、プログラムの作成の過程についてまとめていきます。私のようなプログラミング学習初心者の一助となれば幸いです。

## アウトプットイメージ

アウトプットイメージは、以下の添付画像の通り
Macのターミナルで`cal`コマンドを実行した結果と同じものを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2290540/50d4faaa-5f4d-f2c7-455c-7600d460fc15.png)

追加要件として、以下も満たすことにします。

– 曜日は月曜日始まりにする(`cal`コマンドの実行結果は日曜日始まり)
– `ruby`コマンドでファイルを実行する際、`-m`オプションで月を指定できるようにする
– `-m`オプションで指定した月のカレンダーを出力する(今年)
– `-m`オプションの引数を指定しない場合、今月のカレンダーを表示

元記事を表示

Rubyでランダムにグループ分けするプログラムを作成する

## はじめに
[前回](https://qiita.com/at-sacai/private/9d46b20adf89e10e7f81)に引き続き、Ruby学習のアウトプットとして今回はランダムにグループ分けをするプログラムを作成しました。

上記の内容について、備忘のためにメモ書きを残しておくことにします。

## 仕様
– 前提
– A、B、C、D、E、Fという6人のグループがあった
– 定期的に、6人でLINEのグループ通話をしている
– 課題
– 6人でLINEのグループ通話は会話しづらい
– 要件
– 3人と3人、または2人と4人にランダムにグループ分けを行いたい
– 補足
– 本プログラムは実行するたびに、結果が変わるようにすること
– 表示結果はアルファベット順に並び替えること

## アウトプットイメージ

アウトプットイメージは、以下の通りです。

“` plaintext
$ ruby random.rb
[“B”, “C”]
[“A”, “D”, “E”, “F”]
“`

## 検討

まずは、プログラムの処

元記事を表示

Gemがインストールできないの解決まで(Rubyのバージョンインストールとrbenvのバージョン管理)

# 経緯
MacでGemをインストールしようとしたところエラーや、作業が詰まったところがあったため、その解決までに至る経緯をメモ。

# 目指すゴール
Faker((テストデータを取得するGem)をインストールし、挙動を確認したい。

# 課題
### 1.バージョンが古かった
FakerというGemをインストールを試みたところ
「fakerはRubyバージョン>= 2.7が必要です。現在のRubyバージョンは2.6.10.210です。」
とエラーが表示された。

“`
$ gem install faker
faker requires Ruby version >= 2.7. The current ruby version is 2.6.10.210.
“`

### 2.rbenvで上手くバージョンが切り替わらなかった
rbenvで3.0.0をインストールしglobal設定したが、ruby -v で確認すると上手く設定できていない。

“`
$ rbenv global 3.0.0
$ rbenv versions
system
*3.0.0
$ ruby -v
rub

元記事を表示

【Ruby】uniqは重複を除外するだけではないよ

# はじめに

こんにちは。ProgateでRubyを勉強したのち、「ゼロからわかるRuby超入門」でさらに学習を進めています。
この本で uniq メソッドについて学んだ際、配列の中の重複要素を除外する機能が紹介されていましたが、実はそれ以外にも興味深い機能があることに気づきました。今回は、その意外な機能について共有します。

Rubyを勉強し始めたばかりなので、Rubyに詳しい方にとっては当たり前のことかもしれませんが、この記事はRuby初心者向けということでお手柔らかにお願いします。

環境:Ruby 3.3.5

# uniqとは

`uniq` は配列から重複した要素を取り除いた新しい配列を返します。

“`ruby:uniq1.rb
[1,1,1].uniq
# [1]
[1,3,2,2,3].uniq
# [1,3,2]
“`
ほかにも`uniq!`といった重複の削除を破壊的に行うコマンドもありますが、本題ではないので触れないでおきます

# uniqのもう一つの機能とは?

では以下のコードを見てどういう結果が出力されるか確認しましょう。
皆さんも一緒に考えてみて

元記事を表示

Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 総括版

## はじめに

この連載では、Rubyのマイクロフレームワークであるsinatraを使用して、中高生向け悩み相談Webサービス「Ballon」を開発する過程を詳細に解説してきました。この総括版では、5つのパートの主要なポイントをまとめ、全体像を把握しやすくします。

## Part 1: アプリケーションの概要と基本設計

### 主要ポイント:
1. 技術スタックの選定理由(Ruby、Sinatra、ActiveRecord、SQLite3)
2. アプリケーションの基本構造とMVCパターンの適用
3. データベース設計の基本(users、worries、answers、likesテーブル)
4. Sinatraアプリケーションの基本設定(セッション管理、ヘルパーメソッドなど)

### コードハイライト:
“`ruby:app.rb
require ‘bundler/setup’
Bundler.require
require ‘sinatra/reloader’ if development?
require ‘./models’

enable :sessions

hel

元記事を表示

OTHERカテゴリの最新記事