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

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

DateTimeのズレ

# sqlで範囲検索するとずれる
“`rb
irb(main):073:0> a = DateTime.now
=> Fri, 10 May 2024 00:45:56 +0900
“`
“`rb
irb(main):076:0> Model.where(created_at:b .. a)
Model Load (0.5ms) SELECT `models`.* FROM `models` WHERE `models`.`created_at` BETWEEN ‘2024-05-03 00:00:00’ AND ‘2024-05-09 15:45:56.557590’
=> []
“`
“`Fri, 10 May 2024 00:45:56 +0900“`が“`’2024-05-09 15:45:56.557590’“`になっている。

9時間前になる。
“`+0900“`が9時間前になっているからだと思う。“`+0000“`すると時差が解消される

“`rb
irb(main):078:0> a = “#{DateTime.now.to_date}

元記事を表示

Ruby extendについて

# はじめに

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

# extendとは何か

extendとはモジュールのメソッドを使用するためのメソッドです。

クラスの中でモジュールを呼び出すときに使います。

その際extendはクラスメソッドとして読み込む。

# extendの使い方

“`
module cat
def name
“ミケ”
end
end

class Animal
extend Cat
end

p Animal.name
“`

includeメソッドとの違いはクラスメソッドとしてモジュールがインクルードされる点です。

# まとめ

– extendはモジュールを使用するためのメソッド
– extendeはクラスメソッドとして読み込む

元記事を表示

Example title

# Example

元記事を表示

Example title

# Example

元記事を表示

Railsの日本語化

## バージョン
Ruby:3.1.4p223
Rails :7.0.8.1

## 手順
1. 複数言語に対応させるため”rails-i18n”というGemを導入
2. “ja.yml”ファイルを作成
3. application.rb内に設定を記述

### 1.複数言語に対応させるため”rails-i18n”というGemを導入
rails-i18n は、Railsアプリケーションで国際化(i18n)をサポートするためのGemで。
国際化とは、アプリケーションのテキストやメッセージを複数の言語に対応させるためのプロセスのことで、このGemを使うことで、Railsアプリケーションで多言語サポートを実装するための便利な機能が提供されます。

“`ruby
gem ‘rails-i18n’
“`

### 2. “ja.yml”ファイルを作成
**config➡locals➡配下に”ja.yml”を作成**

“.yml”はYAML(YAML Ain’t Markup Language)形式のファイル拡張子。

“ja.yml”ファイル

元記事を表示

【ザックリ概要】ActiveRecordの基礎

※解釈が入り混じっているので不備などがあるかもしれません。予めご了承ください。
※ザックリと理解するというスタンスなのでまとめ方が不十分かもしれません
***
引用元・参考サイト
[Railsガイド](https://railsguides.jp/active_record_basics.html)
***
# 概要
– `Active Record`はMVCのMを相当する『オブジェクト指向 × DB操作』を可能にした仕組み
データ操作をオブジェクトを介して実現可能にしている
– ORMというシステム設計パターンを採用しており、ORMではDBの種類ごとのSQLの記述の違いを吸収してくれるなど”互換性が高い”のが大きな特徴
– `Active Record`は次のような特徴を持つ
– 先述したSQLでのDB操作をオブジェクトを介して実行可能な点に加えて、『RDBのような”テーブル同士の相関”などよりDB寄りなデータの意味までもオブジェクトで表現できる』
> ・モデルおよびモデル内のデータを表現する[^1]
> ・モデル同士の関連付け(アソシエーション)を表現する[^1]

元記事を表示

【ruby】timesを使った繰り返し処理

timesを使った繰り返し処理です。

“`ruby
greeting = ‘Hello world’
n = 5
n.times do
puts greeting
end

“`

実行した結果です。

![kekka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710584/a66ee55e-e680-6c13-77a2-d9eb3b9cf966.jpeg)

元記事を表示

【Rails】RSpec便利なカスタマイズ

# カスタマイズ一覧
“`spec_helper.rb
RSpec.configure do |config|
# 1
config.filter_run_when_matching :focus

# 2
config.example_status_persistence_file_path = “spec/examples.txt”

# 3
config.disable_monkey_patching!

# 4
if config.files_to_run.one?
config.default_formatter = “doc”
end

# 5
config.profile_examples = 10

# 6
config.order = :random

# 7
Kernel.srand config.seed
end
“`

## 1. 特定のテストのみ実行する方法
### 方法1
“`terminal
// rspec ファイルパス:行数
$ rspec spec/models/user_sp

元記事を表示

GroveBeginnerKit を、C++(Arduino)とRuby(ラズパイ,Rboard) で使う I2C – OLED編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino を使ってみる記事](https://qiita.com/HirohitoHigashi/items/dc43ea72d572b21a6823)の第7回、最後は I2C 接続の OLED ビットマップディスプレイを題材にします。

このレポートでは、今まで通り

「メーカーのデータシートを見て、ICを直接コントロールをすること」

を、方針とします。しかしながら、今までのセンサー類と違いディスプレイコントローラは桁違いに設定項目が多く扱いが難しいです。通常ですと既存ライブラリを使うのが当たり前になると思いますが、学習用の記事という性質上ライブラリは使わずにコントロールします。[^1]

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* Ruby – Raspberry Pi + [Grove Base HAT for Raspb

元記事を表示

railsでのお作法について纏めてみた

## 対象読者
– railsを初めて触る人
– 簡単なCRUD、ルーティングまでを一つの記事で理解したい方
– apiとwebのエンドポイントを共存させるほう法を知りたい方

元記事を表示

Ruby Silverの勉強をして良かった点

転職活動中のRubyエンジニアです。
自分の経験を棚卸した際に、Ruby Silverの勉強をしておいて良かったなと思いました。
せっかくなので何が良かったかを紹介します。

## 「インスタンス変数のセッターメソッド呼び出しになぜレシーバの明示が必要か」がわかった

nameとageのカラムを持つusersテーブルと対応するクラスを以下のように実装したとします。

“`app/models/user.rb
class User < ActiveRecord::Base def set_attributes(name, age) # ↓レシーバを明示する self.name = name # ↓レシーバを明示しない age = age end end ``` set_attributesメソッドでnameとageに値をセットできるつもりですが、いざ実行すると以下のようになります。 ```rb u = User.new u.set_attributes('Taro', 25) u.name #=> ‘Taro’
u.age #=> nil
`

元記事を表示

ancestry gemで発生するN+1問題の解決法

# はじめに
Railsで階層構造を持つデータモデルを扱う際に使用する`ancestry` gem。便利なメソッドが準備されている反面、そのまま使用してしまうとN+1を起こしパフォーマンス的に良くない状態になってしまったので、どうやって解決したかを説明します。

## TL;DR
`ancestry` gemを使用して親子関係を扱う際に、メソッドを使わず自己参照のリレーションを利用することでN+1問題を解消できます。

# 環境
Ruby 3.3.0
Rails 7.1.3.2
ancestry 4.3.3

## 親子関係とN+1問題の例
`ancestry` gemを使うと、カテゴリーのような階層構造を持つモデルを簡単に作成できます。例えば、以下のようにCategoryモデル単体で階層化されたモデルを例に考えます。

“`ruby
# category.rb
class Category < ApplicationRecord has_ancestry end ``` N+1を起こす原因箇所 ```erb -# index.html.erb

【個人開発】VTuberの発見と布教が出来るWebアプリを作りました

# はじめに
初めてのWebアプリケーション開発をしてみました。
名前は`にゅーぶい!`です。

https://newvtuber.com/

どのようなものか書きます。

# どのようなアプリか
### 簡単な紹介
ファンは自分がまだ知らないVTuberの発見と布教、VTuberはファンの獲得が出来ることを目指したサービスです。

### 想い
VTuberという文化が生まれてから久しく、現在では数えきれないほどVTuberがいます。
そのため、自分のタイプや好みに合うまだ知らないVTuberがきっと多くいます。
そこで、VTuberのプロフィール閲覧/作成を行えるサービスがあれば、より楽しい推し活に繋がると思い、本アプリの開発をしました。

# 使い方
### 文字のみ
一部ユーザー登録の必要なものがありますが、登録やログイン等の記述は割愛します。
最低限の使い方は下記の2つです。
① 一覧から気になるVTuberを押す
② プロフィールを見る
上記に加えて、下記の使い方もすると少し豊かになります。
・ ご自身の好きなVTuberのプロフィールが無い場合は作成する

[Rails]タスク管理アプリ(Part.1)

## はじめに

Railsでタスク管理アプリを作成します。
利用する各ツールのバージョンは以下とします。
|ツール|バージョン|
|-|-|
|Ruby|3.2.4|
|Ruby on Rails|7.1.3.2|
|PostgreSQL|16.2|

## アプリケーションのひな型を作成する

アプリケーションのひな型を作成します。
実行には少し時間がかかります。
“`bash:
rails new taskapp -d postgresql
“`

実行が完了したらアプリケーションフォルダに移動します。
“`bash:
cd taskapp
“`

データベースを作成します。
“`bash:
bin/rails db:create
“`
2つのデータベースが作成されました。
>$ bin/rails db:create
Created database ‘taskapp_development’
Created database ‘taskapp_test’

サーバを起動します。
“`bash:
bin/rails s
“`

以下にアクセスします。

htt

【Rails】データベースに反映済みのマイグレーションファイルの修正方法

マイグレーションファイルを作成して, rails db:migrate し, あとからカラム名のタイポに気づきました

“`db/migrate/20240502121245_create_checkouts.rb
class CreateCheckouts < ActiveRecord::Migration[7.0] def change create_table :checkouts do |t| t.string :fisrt_name # first_name としたかった t.timestamps end end end ``` rails db:migrate していない場合は, そのままマイグレーションファイルを編集すればよいですが, すでにしている場合はデータベースに反映されているため, ロールバックをする必要があります。 反映されているかは rails db:migrate:status で確認できます。up になっていれば反映済み, down になっていれば未反映です。 今回は以下のように up

初心者がボウリングゲームをRubyのみで書いてみた

# はじめに

こんにちは。
一般事務からエンジニアへ転職するために基礎学習しています。
Ruby演習として、VSコード上でRubyのみにて
「Bowling Game ~本日のラッキーボーイ&ガールは一体誰だ!~」
を作成しました。
まだまだひよっこですが、初投稿やってみます。

# 何を書いたか
ボウリングゲーム の コード (Ruby)

<仕様>

– 実際の球を投げる行為は、毎回、ランダムな数字が生成および表示されて、それを入力(半角数字)することとした。
表示されたランダムな数字と入力した数字が異なる場合は、スコアは0となる。
(スコアを0とさせることで、入力した数字が10以下であるかどうかの判定用コードは作成していない。)
– ボウリングゲーム のプレイヤーは何人でも可能である。
– 毎回、ユーザーごとに1投目2投目(10ゲームは3投目がある場合もある)を入力してもらった後、そのゲームまでの表を表示する。
– 合計スコアが確定していない時は、”…”で表示される。
– ストライクとスペアの時は、”ナイスストライク!””ナイススペア!”と表示する。(※1)
– 最後、

[Rails]ユーザー管理機能

### 1. ユーザーに関するscaffoldを自動生成する。
“`bash:
bin/rails generate scaffold user name:string address:string age:integer
“`
>$ bin/rails generate scaffold user name:string address:string age:integer
invoke active_record
create db/migrate/20240504174055_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
invoke resource_route
route resources :users
invoke

[Ruby]環境構築(Windows11)

## 1. Ubuntuのインストール
Microsoft Storeにて、「Ubuntu」をダウンロードする。
https://apps.microsoft.com/detail/9pn20msr04dw?hl=ja-JP&gl=US

ダウンロードしたファイルは以下。(2024/05/04時点)
・Ubuntu 22.04.3 LTS Installer.exe

ユーザーとパスワードを設定する。

Ubuntuのパッケージファイルを最新化する。
“`bash:
sudo apt update
sudo apt update -y
“`

作業用フォルダとシンボリックリンクを作成しておく。
“`bash:
mkdir /mnt/c/Code
ln -s /mnt/c/Code ~/Code
“`

## 2. rbenvのインストール
rbenvをインストールする。
“`bash:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
“`

パスを設定する。
“`bash:
echo ‘export PATH=”

立体ペントミノ・ソルバー

# はじめに
この記事

https://qiita.com/sense_n_react/items/0875e969626c1892b60a

で紹介したのは平面でのペントミノ・ソルバーでした。
ピースの要素を立方体にすることで、3x4x5 のような立体ペントミノが得られるので、本記事では立体ペントミノにも対応したソルバーを示します。

### ソースコード
https://github.com/sense-n-react/PentominoSolvers/blob/main/solver-3D.rb

Ruby です。

### 実行
“`shell-session
$ ruby solver-3D.rb –size 3x4x5
“`
3x4x5 だけでなく 5x6x2 や 3x10x2 も指定できます。
Wikipedia に示されているようにそれぞれ 3,940、260, 12通りの解を表示します。
サイズを指定しなければ2次元(6×10)の解を表示します。

### 立体の表示
キャラクターベースで3次元表示は難しいので、下図のように表示しています。画面垂直方向に

Railsで利用しているsitemap_generatorのテストを書く

Railsで `sitemap_generator` gemを利用してサイトマップを生成しています。
https://github.com/kjvarga/sitemap_generator

そのテストを書く方法を記載します。

# 結論

`SitemapGenerator::Interpreter` を使います。
https://www.rubydoc.info/gems/airblade-sitemap_generator/0.3.5/SitemapGenerator/Interpreter

`SitemapGenerator::Interpreter.run` でXMLファイルを生成します。
それを読み込み、期待するURLが含まれているか検証します。

# 検証用Repo

下記で検証をしていますので、詳細が気になる方はご参照ください。
https://github.com/yuya-yuzen/test-sitemap-generator-spec

# 1. sitemap_generatorを導入する

## 1-1. Gemfileに追加

“`:Gemfile