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

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

【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

元記事を表示

Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- パフォーマンス最適化、アクセシビリティ、多言語対応、アナリティクス (Part 5)

## はじめに

これまでの4つのパートで、Sinatraを使用した中高生向け悩み相談Webサービス「Ballon」の基本的な機能実装から、セキュリティ対策、コンテンツモデレーションまで幅広く解説してきました。この最終回となるPart 5では、以下の内容について詳しく説明します:

1. パフォーマンス最適化
2. アクセシビリティ対応
3. 多言語対応
4. アナリティクスとレポーティング

また、Ballonの開発を通じて学んだ教訓や、中高生向けサービス開発における倫理的考慮事項についても議論します。

## 1. パフォーマンス最適化

Ballonのユーザー数が増加した場合でも、高速なレスポンスを維持するためのパフォーマンス最適化技術を実装します。

### データベースの最適化

1. インデックスの適切な使用
– 頻繁に検索や結合に使用されるカラムにインデックスを追加します。

“`ruby:db/migrate/YYYYMMDDHHMMSS_add_indexes_for_performance.rb
class AddIndexesForPerf

元記事を表示

Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 回答機能、「いいね」機能、セキュリティ対策、コンテンツモデレーション (Part 4)

## はじめに

前回のPart 3では、悩み投稿機能の実装とデータベース設計について詳しく解説しました。今回のPart 4では、以下の内容について説明します:

1. 回答機能の実装
2. 「いいね」機能の実装
3. 高度なセキュリティ対策
4. コンテンツモデレーション

これらの機能追加とベストプラクティスの適用により、Ballonの機能性、安全性、そしてユーザー体験を向上させます。

## 1. 回答機能の実装

まず、回答機能を実装します。ユーザーが悩みに対して回答を投稿できるようにします。

### データベース設計

回答のためのテーブルを作成します:

“`ruby:db/migrate/YYYYMMDDHHMMSS_create_answers.rb
class CreateAnswers < ActiveRecord::Migration[5.2] def change create_table :answers do |t| t.references :user, foreign_key: true t.references

元記事を表示

Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- ユーザー認証システムの実装 (Part 2)

## はじめに
前回の Part 1 では、中高生向け悩み相談Webサービス「Ballon」の概要、技術選定の理由、基本的な設計について説明しました。今回の Part 2 では、ユーザー認証システムの実装に焦点を当てます。セキュアなパスワード管理、セッション管理、そしてユーザーのサインアップ、サインイン、サインアウトの実装方法を詳しく解説します。また、中高生向けサービスならではの配慮事項についても触れていきます。

## ユーザーモデルの設計

まず、ユーザーモデルを設計します。`models.rb` ファイルに以下のコードを追加します:

“`ruby:models.rb
class User < ActiveRecord::Base has_secure_password validates :username, presence: true, uniqueness: true, format: { with: /\A[a-zA-Z0-9_]+\z/, message: "can only contain letters, numbers,

元記事を表示

Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 設計と基本実装 (Part 1)

この記事は、Sinatraを使用した中高生向け悩み相談Webサービス「Ballon」の開発過程を詳細に解説するシリーズの第1部です。

– Part 1 (本編): アプリケーションの概要、技術選定の理由、基本設計
– Part 2: ユーザー認証システムの実装と詳細な解説
– Part 3: 悩み投稿機能の実装とデータベース設計の詳細
– Part 4: 回答機能と「いいね」機能の実装、セキュリティ対策
– Part 5: パフォーマンス最適化、テスト戦略、デプロイメント手法

## はじめに

こんにちは!今回は、Rubyのマイクロフレームワークである**Sinatra**を使用して、中高生向けの悩み相談Webサービス「Ballon」を作成した過程を共有します。このWebサービスは、高校2年生の秋から3年生にかけて開発しました。

Ballonは、悩みの共有とコミュニティサポートを組み合わせることで、若者の精神的健康とピアサポートを促進することを目的としています。本記事では、アプリケーションの設計思想から基本的な実装まで、詳細に解説していきます。

## 技術スタックと選定理由

元記事を表示

OTHERカテゴリの最新記事