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

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

【Ruby】バブルソートで配列の並べ替え

Rubyを使ったアルゴリズムについて学習しています。
今回は数字の配列を並べ替える方法についてやっていきます。

# やりたいこと
sortメソッドを利用せず、数字の配列を昇順ソートして出力するアルゴリズムを作成する。

“`ruby
array = [6, 7, 3, 2, 5, 4, 1]
“`
これを、こうしたい。
“`ruby
array = [1, 2, 3, 4, 5, 6, 7]
“`

# バブルソートとは?

> 値を昇順・降順で並べ替えるアルゴリズムのひとつ
> pointデータを小さい順(大きい順)に並べ替えるよ
> point隣り合う要素の大小比較を繰り返すことで、全体を並べ替えるよ

引用:バブルソートとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

# まずは数字の並べ替えるプログラムを作る

“`ruby
# 配列を定義
array = [6, 7, 3, 2, 5, 4, 1]
if array[2] > ar

元記事を表示

【Ruby on Rails】マイグレーションの仕組みを理解して「分からない」から抜け出そう?【初心者向け】

# ? はじめに
記事を開いていただきありがとうございます!
この記事では主にRailsの初学者に向けて、マイグレーションの仕組みについて分かりやすく解説します!

私が初学の時にやっていた、 **「とりあえず何か分からないけど `rails db:migrate` や `rails db:rollback` を実行してみる」** がみなさんから無くなるように、仕組みを理解できるように、順を追って説明していきます!

:::note info
この記事で書く事
・ よく聞くマイグレーションとはそもそも何か
・ `rails db:migrate` や `rails db:rollback` って何してるの?
:::

:::note alert
この記事で書かない事
・ SQLの解説
・ データベースの構造
・ Railsのコードの書き方
:::

# ? データベースの作り方
まずそもそもデータベース(RDB)はどうやって作るのでしょう?
データベースは `MySQL` や `PostgreSQL` といったデータベースエンジンと呼ばれるものに、 **「データベースを作るよ」** や

元記事を表示

【Ruby】繰り返し処理の制御構造 (で遊んでみた)

# はじめに
– 繰り返し処理の動作を変更するための制御構造について、遊びながら学んでみた
– 学習したことの備忘録

# 主な内容
– break
– redo
– catchとthrow

# break(ひたすらラーメンを完食していくコード)
`break`:繰り返し処理を脱出できる
“`rb
ramens = [“豚骨ラーメン”, “醤油ラーメン”, “塩ラーメン”]
tastes = [“スープを飲む”, “麺をすする”, “完食!”]
ramens.each do |ramen|
tastes.shuffle.each do |t|
puts “#{ramen}, #{t}”
break if t == “完食!”
end
end
“`
shuffleで、「スープを飲む」, 「麺をすする」, 「完食!」がランダムに入れ替わり、「完食!」でbreakする。それを、「豚骨ラーメン」,「醤油ラーメン」,「塩ラーメン」のそれぞれについて繰り返す。

“`:実行結果例
とんこつラーメン, スープを飲む
とんこつラーメン, 麺をすする
とんこつラーメン,

元記事を表示

RubyでAtCoder ABC293(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC293のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A – Order Something Else
https://atcoder.jp/contests/abc310/tasks/abc310_a
“`ruby:a-293.rb
n, a, b = gets.split.map(&:to_i)
d = gets.split.map(&:to_i).sort

discounted_price = d[0] + b
puts a <= discounted_price ? a : discounted_price ``` # B - Strictly Superior https://atcoder.jp/contests/abc310/tasks/abc310_b ```ruby:b-293.rb n, _ = gets.split.map(&:to_i) array = Array.new(n){ gets.split

元記事を表示

Boolean型カラムをpresence: trueで設定したらfalseで保存出来なかった

# 前提条件

Userテーブルにnullを許容しないBoolean型のhoge_flagというカラムがあるとする。

“`ruby
create_table :users do |t|
t.boolean :hoge_flag, default: true, null: false
end
“`

migration後にuser.rbにvalidatesを追加

“` ruby
validates :hoge_flag, presence: true
“`

# データ保存時にエラーが出る・・・

上記を踏まえて、hoge_flagをfalseにしてみた!

“`
user = User.first
user.hoge_flag = false
user.save!
“`

結果
“`
Translation missing: ja.activerecord.errors.messages.record_invalid (ActiveRecord::RecordInvalid)
“`

あらら・・・

もう少し確認してみると

“`
user.valid?
=>

元記事を表示

Railsで’application.css’以外のCSSファイルを作成する手順

## はじめに
#### 実装したこと
レスポンシブ対応のために新しいCSSファイルを作成と適用する手順を記事にします。

#### 動作環境
Ruby 3.1.2
Rails 6.1.7.3

## 手順
1\. まず app/assets/stylesheetsディレクトリ内に、’responsive.css’という名前の新しいCSSファイルを作成します。(ファイル名はなんでも問題ないです)

2\. responsive.cssファイルを開き、メディアクエリなどのレスポンシブデザインに必要なスタイルルールを記述します。例えば、以下のようなコードを追加します。
~~~ responsive.css
/* 例: スマートフォンサイズの場合に適用されるスタイル */
@media screen and (max-width: 520px) {
/* スタイルの定義 */
}

/* 例: タブレットサイズの場合に適用されるスタイル */
@media screen and (min-width: 521px) and (max-width: 960px) {
/* スタイルの定

元記事を表示

Rubyのライブラリoptparseについて調べてみた

## はじめに

個人学習でカレンダプログラムを作成するにあたり、Rubyのライブラリ`optparse`を使用しました。使用するにあたり、[Rubyの公式マニュアル](https://docs.ruby-lang.org/ja/latest/library/optparse.html)を読むだけでなく、実際にプログラムを動かして、調べてみましたため、その記録を残します。

## 本題

`optparse`の機能について簡単に申し上げますと、Rubyプログラムを実行する際に指定しているオプションを扱うためのライブラリです。

例えば、`ruby sample.rb -a foo bar -b baz`のように`-a foo bar -b baz`箇所をsample.rbの中で使用したい場合に使用するライブラリです。以下は[Rubyの公式マニュアル](https://docs.ruby-lang.org/ja/latest/library/optparse.html)から引用して、少しだけ内容を変えたプログラムになります。

“`ruby:sample.rb
require ‘o

元記事を表示

【Rails API】エラーハンドリング処理をJSON形式で返す

Rails APIについて学習しています。
今回は、Railsアプリケーションを使い、をAPIによる例外処理(エラーハンドリング)を実装していきます。

# 今回やること

– apiのエラーハンドリング処理を実装する。
– 404, 500のレスポンスを返す処理を実装する。
– apiのエラーをjson形式で返す処理を実装する。

# base_controller.rbに追記する

“`ruby:app/controllers/api/v1/base_controller.rb
module Api
module V1
class BaseController < ApplicationController include Api::ExceptionHandler end end end ``` # このコードの解説 - このコードでは、Ruby on Railsのアプリケーションにおけるコントローラの基底クラス`BaseController`を定義している。 - `module Api` `module V1`の部分で、「Api」

元記事を表示

AtCoder ABC310 解法(A ~ E) Ruby & Kotlin

# 解法

## [A – Order Something Else](https://atcoder.jp/contests/abc310/tasks/abc310_a)

|[公式解説](https://atcoder.jp/contests/abc310/tasks/abc310_a/editorial)|
|-|

| Difficulty | Solve Prob | Solve Time |
| :—: | :—: | :—: |
| 23 | > 99 % | 4 mins |

### Ruby

“`ruby:abc310_a.rb
N, P, Q = gets.split.map(&:to_i)
D = gets.split.map(&:to_i)
puts [D.min + Q, P].min
“`

### Kotlin

“`kotlin:abc310_a.kt
fun main() {
val (N, P, Q) = readLine()!!.split(” “).map(String::toInt)
val D = readLin

元記事を表示

共同開発 model作成 カラム追加

モデルの作成は 先頭大文字の単数形で作成します。
### :shamrock:モデルの作成とカラムの追加

“`
【顧客用】
$ rails g devise Customer
【管理者用】
$ rails g devise Admin
“`
“`
rails db:migrate
“`
Deviseというユーザー認証システム用のCustomerモデルが生成されます。モデルファイル、ビューファイル、データベースマイグレーションなど、Deviseを使うために必要なファイルが自動的に作成されます。

:star: cusutomers (顧客)ファイル
“`diff_ruby
create_table :customers do |t|
t.string :last_name, null: false
t.string :first_name, null: false
t.string :kana_last_name, null: false
t.string :kana_first_name, null: false

元記事を表示

Ruby 配列 ブロックについて 3

# はじめに
– Rubyの配列やブロックの復習用(3回目)
– 学習したことの備忘録
– 「[Ruby 配列 ブロックについて 2](https://qiita.com/takayuki91/items/ad9098a258c7927e1f98)」の続き

# 学習内容
#### ブロック
– with_indexメソッド
– each_with_indexメソッド

# 参考にした教材
– [プロを目指す人のためのRuby入門]( https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%

元記事を表示

Next.jsとRuby on Railsを使ってアプリを作成してみた【フルスタックブログ】

## 参考サイト
[Next.jsとRuby on Railsを使ってフルスタックブログ開発を体験してみよう](https://www.youtube.com/watch?v=XQtkP8it9Ag&t=1657s)

元記事を表示

RubyのPolarsでデータフレームのすべての行を表示する

## はじめに

:::note warn
この記事は2023年7月16日時点の記事であり、半年後や1年後にはあまり役に立たない可能性が高いです。あくまで現時点での回避策だと思ってください。
:::

みなさん、[Polars](https://github.com/pola-rs/polars)はご存じですか?

Pandasを置き換えるかもしれないと言われている、Rustで実装された新しい高速なデータフレームライブラリです。PolarsにはRubyのバインディングもあって、Ankaneさんが開発・メンテナンスを行っています。

https://github.com/ankane/polars-ruby

このPolarsでCSVファイルを読み込むと次のようになります。

“`ruby
require “csv”

df = Polars.read_csv(“iris.csv”)
“`

“`
=>
shape: (150, 5)
┌──────────────┬─────────────┬──────────────┬─────────────┬───────────┐

元記事を表示

いいコード悪いコードまとめ4章不変の活用

変数の値を変更することができることを可変(ミュータブル)と呼び、その反対を不変(イミュータブル)と呼ぶ。

変数がミュータブルだとこの値になるはずと意図して実装したにも関わらず、意図しないうちに値が変わってしまうという事態につながってしまう。

# 再代入
以下のようにイミュータブルにしていないと上書きができてしまう。
“`
x = 10
y = 20

x = y

puts x # 20
puts y # 20
“`

# 不変と可変の取り扱い方針
## デフォルトは不変に
定数の意味が変化しなくなるので混乱を避けられる
挙動が安定し、結果を予測しやすくなる
コードの影響範囲が限定的になり保守が容易になる

## 可変にしてもよいとき
不変が望ましくない場合は
* パフォーマンスに問題が生じるケース
例えば大量のデータの高速処理や画像処理リソース制約の厳しい組み込みソフトウェアなどで可変が必要なこともある。

* スコープが局所的なケース
ループ処理のスコープでしか使われないことが確実がローカル変数ならば可変にしてもよい

# まとめ
基本的に変数は不変にすること。ただし、一部

元記事を表示

【Rails】人間が読める形式でメールの件名と本文をログに出力する方法 (Beta)

## 困っていること

ActionMailerからメールを送信すると、ログにメールの送信内容が出力されます。しかし、件名(Subject)や本文はエンコードされていて、内容が確認できません。

“`
Devise::Mailer#reset_password_instructions: processed outbound mail in 11.8ms
Delivered mail 64b379aa26c5c_60f3440c-546@jit-m1.local.mail (3.4ms)
Date: Sun, 16 Jul 2023 14:01:30 +0900
From: please-change-me-at-config-initializers-devise@example.com
Reply-To: please-change-me-at-config-initializers-devise@example.com
To: foo@example.com
Message-ID: <64b379aa26c5c_60f3440c-546@jit-m1.local.mail>
S

元記事を表示

誹謗中傷が機能しないSNSを個人開発してみました!「紹介編」| Rails7 x TailwindCSS x Render.com

注:本記事はzennの記事からの転載です。
## 概要
昨今、SNSを通じた誹謗中傷が起こっていますが、それらをどうにか起こさないSNSができないものかと思い自分なりに考え、業務未経験ですが作ってみました!今回は、その簡単な紹介記事です。良ければ読んでみて、そして遊んでみてください!また、意見ももらえるととても嬉しいです!

## 使用技術
– Ruby 3.1.2
– Rails 7.0.6
– 各種Gem (ログインなど)
– Tailwind CSS (デザイン周り)
– PostgreSQL (DB)
– Render.com (デプロイ先)

## 作ったもの
![コトノハ 手紙制作画面](https://storage.googleapis.com/zenn-user-upload/06cc60b20874-20230715.png)

https://gen3-kotonoha.onrender.com/
“コトノハ”というwebアプリを作りました。

## 特徴
未熟な私ではありますが、コトノハでは主に機能面で差別化を測っています。既存のアプリ・サービスとは違う点を、表

元記事を表示

【Rails】DecoratorとHelperの特徴・違い

# Decoratorとは?

– デザインパターンの一つである。
– デザインパターンとは、汎用的な設計パターンのことで、いろんなプログラムで再利用できるのが特徴。
– Decoratorはインスタンスに対して動作するため、各インスタンスに固有の挙動を持たせることができる。
– draperというgem(ライブラリ)やActive_Decoratorを用いることで使用できる。

# Decoratorの使用例

– モデルとビュー、どちらにも記述できるロジックがある場合に、あいだにDecoratorを定義する事で、モデルをスリムにできる。
– つまり、Fatモデルの解消などの効果がある。
– 例えば、日付フォーマットを変更するロジックを実装する際などに利用できる。
– モデル・ビュー、どちらにも記述することは可能だが、Decoratorを間に定義し、役割を分散させることでコードをスッキリできる。

詳しいコードはこちらの記事が参考になります。
【Rails入門】ViewとModelの間にDecor

元記事を表示

「プロを目指す人のためのRuby入門」を読んだので。

[プロを目指す人のためのRuby入門](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976) を読んだので、個人的に気になったことなどをまとめてます。

## 学んだこと
### 式展開(`#{}`)を使った時は、自

元記事を表示

Rubymineの2023.1.xでdebugできない問題の対応

## 背景
Rubymineのバージョンを2023.1.xに上げて、Rubymin上でデバッグを実行しようとすると、debug用gemが入っていないというエラーが繰り返し表示される。
指示に従いインストールしても何もおきない。
既にリリースされてから、数ヶ月経っていますが、日本語での情報があまりなかったので、書いてみました。

## 環境
macOS 13.4(intel, m1)
ubuntu 22.04LTS
docker


Gemfileにdebaseとruby-debug-ideが入っている

## 原因
Gemfileにdebaseとruby-debug-ideを記載していると起きる模様
直接的な原因は深く調べきれていないのでご容赦ください。

## 対応策

### その1
rubymineのバージョンを旧バージョンに戻す
元も子もないですが、以前のバージョンで動いていた方は、旧バージョンに戻したら問題ないです。

https://www.jetbrains.com/ja-jp/ruby/download/other

元記事を表示

いいコード悪いコードまとめ3章クラス設計

原則:クラスが単体で正常動作するよう設計する
これはSOLID原則のSingleResponsibilityの考え方かな?

https://qiita.com/YokoYokoko/items/347101166fb81d301c45

「クラス設計とはインスタンス変数を不正状態に陥らせないための仕組みづくり」である。

クラスをインスタンス化して、それを他のクラスに初期化してもらったり、データの入力をチェックしてもらうようではいけないわけで、クラスは必ず自分の身は自分で守ると言う自己防衛責務を全てのクラスがそなえるわけです。

## コンストラクタで確実に正常値を設定する
これを避けるために2章でも出てきましたが、コンストラクタで初期化することが大切です。

例えば、`Money`クラスを作成するときの基本形は以下のような形ですが、これは問題があります。
なぜなら、引数に不正な値が渡ってきてもエラーが発生しないからです。
“`
class Money
attr_accessor :mount, :currency

def initialize(mount, cur

元記事を表示

OTHERカテゴリの最新記事