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

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

Rubyの等値を判断するメソッド・演算子の理解[equal?, ==, eql?, ===]の違い

# equal?, ==, eql?, ===の違いを解説

この記事は下記のような人を対象にしています。
– 駆け出しRubyエンジニア
– プログラミング初学者

## 結論
equal・・・同じobject_idの場合にtrueを返す
== ・・・人の目で見て自然であればtrueを返す
eql・・・同じクラスで中身も同じならtrue、中身が同じでも別クラスだったらfalseを返す
=== ・・・case文のwhen節で暗黙的に使われている

## equal?
equal?メソッドは、同じobject_idの場合にtrueを返します。
“`ruby
a = “apple”
b = “apple”
a.equal?(b)
=> false
“`
文字列の内容が同じappleなのに、falseなのは、aとbそれぞれが持つobject_idが異なるから。

では、object_idとは??

オブジェクトにランダムに割り当てられる、重複しない整数のこと!

Rubyでは、重複しない整数が、各オブジェクトに1つずつ割り当てられています。
各オブジェクトに対して一意な整数を返します。あ

元記事を表示

【Ruby】クラス・モジュールについて理解を深める

# クラス

## クラスの定義

“`rb
class Foo
# 初期化時に実行されるメソッド
def initialize(x)
# インスタンス変数に値を保持
@x = x
end

# インスタンスメソッド
def method1
@x
end
end
“`

:::note
クラス名は**定数**であるため、大文字で始めないと構文エラーとなる。
┗ 定数の中にクラスを格納している。
:::

## クラス変数
“`rb
class Foo
def initialize
@@i = 1
end

def return_i
@@i
end
end

class SubFoo < Foo def initialize @@i = 100 end end foo = Foo.new p foo.return_i #=> 1

sub_foo = SubFoo.new

p foo.return_i #=> 100
p sub_foo.return_i #=

元記事を表示

ActiveRecord の where in 句 の 空配列

### 通常の where in 句

こういう書き方をすると思います。

“`sql
select * from table_name where id in (1, 2, 3, 4, 5)
“`

### これをそのまま active_record で表現すると

“`ruby
TableName.where(id: [1, 2, 3, 4, 5])
“`

ですよね。

### in の中身が空だと

“`sql
select * from table_name where id in ()
“`

これは流石にエラーになりますよね?

### active_record でこれをやると…

“`ruby
TableName.where(id: []) #=> []
“`

お、エラーじゃなく空配列だ。

### どうなってる?

to_sql で active_record は発行する sql を視認出来ますよね?
早速確認

“`ruby
TableName.where(id: []).to_sql #=> SELECT `table_name`.* F

元記事を表示

Ubuntu 24.04 LTSにすると多分マストドンv4.2ブランチじゃないと上手く動かないんじゃねって話

## ポイントリリース前に24.04 LTSを入れました

nodejsが18以上になっていました。動かしていたのがv4.1ブランチだったので象バンバンになりました。

nodejsだけの問題だけだと思っていたらそうでもない様子。postgreSQLも10がコケていました。Mastodonのサービスは動いている。

めんどくさそうです。

## v4.2ブランチにしてみました

rubyも3.2.3をいれて、さあ!

やっぱり象バンバン。DB動いてないからそらそうか。

## ログを見る

postgreSQL10のログを見るとTimezoneが「Japan」になっていてむーりーってなって落ちている。そんな書き方は無い!

「Asia/Tokyo」にしたところ動いて、DBがマイグレーションできて動きました。

## 時間がかかりました

DBが動いてないというのに気づくのが遅くてやたら時間だけかかりました。ログを見るというのは大切ですね。

v3ブランチとv4.0ブランチはEoLになったのでUbuntu 24.04 LTSにアップグレードするぞという人たちはもりもりDBマイグレーション

元記事を表示

「ローカル環境 × Rails × Render」でデプロイ

# はじめに

皆さま、こんにちは、すみ(@sumisumi2000) と申します。
2024 年 1 月 20 日より、オンラインプログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

今回の記事では Docker を使わずに、ローカルで環境構築を行い、 Render.com でデプロイ&データベース連携するまでの流れをまとめました。

https://render.com/

# 動作環境

– macOS Sonoma 14.4.1
– Ruby 3.3.0
– Rails 7.1.3.2

# ローカル環境構築

この記事では Docker を使用しません。
なので、ローカル環境(自身のパソコンの環境)で Ruby や Rails などをインストールする必要があります。

### 目次

1. [Homebrew のインストール](#homebrew-のインストール)
2. [rbenv のインストール](#rbenv-のインストール)
3. [Ruby のインストール](#ruby-のインストール)
4. [Rails のインストール]

元記事を表示

連続的な値の配列

# “`*()“`をつける
“`rb
irb(main):175:0> b.length
=> 1
irb(main):176:0> b = [*(1..2)]
=> [1, 2]
irb(main):177:0> b.length
=> 2
irb(main):178:0>
“`

# 感想
こんな感じでできると思ったけどエラーなるので困ったけどできてよかった。

# 出典
https://qiita.com/ntakuya/items/c82bb6a9b3336ee77a87

元記事を表示

railsの環境構築を半日かけて構築した話

こんにちは!初投稿です!
今回は半日近く格闘をしたrailsの環境構築の話を備忘録を兼ねてお話ししたいと思います。
環境はDockerで構築しました。

## Dockerを立ち上げるまで
“`
$cd 作業フォルダ
$docker compose build
$docker compose up -d
“`
上記で、Dockerを立ち上げていきます。

## Dockerに入る
“`
$docker compose exec web bash
“`

## 諸々インストール
“`
$bundle install
$yarn install
“`
上記で、構築に必要なものをインストールしていきます。
bunle⇨ライブラリをインストール
yarn⇨パッケージを一括管理できる

## エラーが起きたコマンド
“`
$bin/rails db:create
“`
こちらを入力した際、下記のエラーが発生した。
“`
Caused by:
Mysql2::Error::ConnectionError: Unknown MySQL server host ‘db’ (-2)
`

元記事を表示

Railsにおけるモデルのscopeメソッド

# はじめに
先日、業務で`scope`メソッドでの実装したので、備忘録として記事にしたいと思います。

この記事では、`scope`メソッドの基本的な使い方をまとめてみました。

# モデルのscopeメソッドとは?

`scope`メソッドは、よく使用されるクエリをメソッドとして定義することができる機能です。

これにより、複雑なクエリを簡単に再利用できるようになります。

# Scopeメソッドの基本構文

`scope`メソッドの基本的な構文は以下のようになります。

“`ruby
scope :scope_name, -> { query }
“`

– `scope_name`: スコープの名前を指定します。
– `query`: 実行するクエリを指定します。

# Scopeメソッドの使用例

今回は、記事の一覧表示で人気の記事を取得する処理を例に見ていきます。

### scopeを使わないパターン

`scope`を使わずに人気の記事を取得する場合、以下のようにクエリを書くことになります。

“`ruby
# app/models/post.rb
class P

元記事を表示

生まれたてのuserマイグレーションファイルをじっくり見てみた

ユーザー管理機能の実装時に用いられるdeviseライブラリ。
それによって生成できるuserモデルと勝手に爆誕するuserマイグレーションファイル。

今回はモデル生成により勝手に下界に君臨してしまった**userマイグレーションファイル**について、暇なので観察することにする。

特に今回は、**生まれたての状態時**を見ていく。

# userマイグレーションファイル爆誕
`rails g model user`と手慣れたようにコマンドを打ち込むと、以下のとおりマイグレーションファイルが勝手にできる。(事前にdeviseのインストールはしておくんだお)

“`
db/migrate/xxxxxxxxxx_devise_create_users.rb
“`

記述は以下のとおり
“`ruby
# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[7.0] def change create_table :users do |t| ## Datab

元記事を表示

gem install 時の permissions エラーの対応

いまさらながらGithub Pagesでプロフィールでも整備するかと思い立ち、おもむろにgem install したらpermissions error に遭遇しました。

“`
% gem install bundler jekyll
Fetching bundler-2.5.9.gem
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`

下の記事によるとどうやらシステムのrubyを利用していると、権限不足でgemのインストールができないというエラーのようです。

https://qiita.com/nishina555/items/63ebd4a508a09c481150

ということで、gem install bundler jekyll ができるところまで手順を残しておきます。

– 環境
macOS Ventura

# 現状確認

“`

元記事を表示

【Ruby環境構築】AlmaLinuxでRubyのバージョンを指定してインストールする

# 環境

– OS:AlmaLinux8.9

“`
# cat /etc/almalinux-release
AlmaLinux release 8.9 (Midnight Oncilla)
“`

# Rubyのインストール

今回は`dnfモジュール`からインストールする方法と、`rbenv`を利用してインストールする方法の2つを紹介します。

## dnfモジュールからインストール

### インストール可能なRubyのバージョンを確認

`dnf module list <パッケージ名>`でdnfのモジュールリストからインストール可能なパッケージを探します。

今回の場合`ruby2.5`~`ruby3.1`が利用でき、デフォルトで`ruby2.5`がインストールされる設定なっています。

“`
# dnf module list ruby
AlmaLinux 8 – BaseOS 4.3 kB/s | 3.8 kB 00:00
AlmaLinux 8 – BaseOS

元記事を表示

【Rails】form_withとかlocal: trueとかdata: { turbo: false }を理解してなかったので色々調べた

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして約2ヶ月弱が経過しました🐣

## 概要
仕事中、form_with関係の実装で詰まり、自分の理解が浅かったツケが来たのを感じたので、調べてみました😇
お恥ずかしながら、スクール時代はRails5、今はRails7を触っており、Railsのバージョンごとでの違いがごちゃ混ぜになっていたこと、フォームのオプションやそもそもAjaxなどきちんと理解できていなかったので調べたことをまとめます。

:::note warn
間違っている箇所があるかもしれませんので、その際は是非教えて頂けると嬉しいです🙇
:::

## フォームの非同期送信に関するオプション
### Rails5以前
フォーム送信時、デフォルトではページ全体がリロードされます。非同期処理をするにはオプションを明示的に設定します。
– `remote: true`
Rails5以前でフォームのオプションで使われていました。Ajaxを用いて非同期にします。

元記事を表示

GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う I2C – 気圧センサー編

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

[Grove Beginner Kit for Arduino を使ってみる記事](https://qiita.com/HirohitoHigashi/items/dc43ea72d572b21a6823)の第5回、今回は I2C 接続の気圧センサーを題材にします。

このレポートでは、

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

を、方針とします。
もちろん、プログラムを書く上で既存のライブラリ等の実装を参考にすることは良い事です。しかしながらこのレポートは、I2C バスやセンサ IC の扱い方、データシートの読み方を示す事も目的としているため、できるだけ低レイヤーでの説明を行います。

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

元記事を表示

FormObjectを編集に対応させる

PF作成においてFormObjectを使用した際に、編集機能の実装に苦戦し時間を要したため覚え書きとして投稿させていただきます。

## form_withにおける登録、更新の切り替え
“`
form_with model: インスタンス変数 do |f|
“`
上記において“form_with“は渡されたインスタンス変数のメソッド“persisted?“の返り値によってリクエストをPOSTもしくはPATCHに切り替えています。
“persisted?“メソッドはレシーバーがDBに保存されている場合はtrue,保存されていない場合はfalseを返します。
urlオプションを渡さない場合、フォームの送信先urlは同様に渡されたインスタンス変数のメソッド“to_model“の返り値によって決定されます。

## 使用例
今回、下記ER図におけるPurchaseモデルのレコードを保存するにあたり、ShopとBeanの選択をセレクトボックスにしてしまうとレコードの量次第では選択肢が膨大になりUIとして不適格だと判断したため、Stimulus-autocompleteとテキス

元記事を表示

エラーが怖い?それならSyntax Errorを「起こす」ことから始めよう

# はじめに
こんにちは! @RyoSakon001 です。 @Fignn [Fignny株式会社](https://fignny.co.jp/)でPython, PHP, TypeScriptのエンジニアとして働いています。
エンジニアとして業務を始めたての頃は、エラーにとにかく悩まされがち。そんなあなたにピッタリの情報をお届けできればと思います。

## こんな人に読んでほしい
– 駆け出しエンジニアの方
– 駆け出しWebデザイナーの方
– 育成担当ベテランエンジニアの方

## エラーの大半って、実はコレ
一括りに「エラー」と言っても、色々な種類があります。超〜アバウトに、大別してみます。

1. **Syntax Error**
1. **Undefined**
1. **その他**

その中で、1, 2番がおよそ8割を占めていると思います。そして、実は本当に難しい(可能性がある)のは3番だけで、1, 2番は初心者の方でも簡単に解決できてしまうのです。

## エラーへの恐怖心をなくすには、自分で「わざと」起こしてみること
**「最初は怖いけど、やってみると大したことなかった

元記事を表示

Rails ERD触ってみた

# はじめに
みなさまこんにちは。
今回、railsのgemであるRails ERDを使用してみたのでまとめました。

## Rails ERDとは
RailsのモデルからER図を自動生成することができるgem
以下の画像のようにER図を自動生成してくれます。
![erd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1462552/eba1617a-e88e-4b3d-f63f-946b044956be.png)

出典

https://github.com/voormedia/rails-erd

## セットアップ
#### Graphvizをインストール (オープンソースのグラフ可視化ソフトウェア)

Graphvizとはグラフ作成用のツールで、DOT言語というものを用いてテキストファイルを画像として出力することが できる便利なやつです。

“`
$ brew install graphviz
“`

#### rails ERDをgemに追加

“` ruby:Gemfile
gro

元記事を表示

2回目のチーム開発!【アプレンティス】

# はじめに
私は、現在アプレンティス(若手エンジニアの育成・マッチングサービス)に参加しているエンジニア未経験の24歳です。
今回は、2回目のチーム開発についてまとめていきます。
今回のテーマは、**『ワクワクするものを開発せよ』** ということで前回とは違ったテーマのアプリになっています!

## アイデア決め
まずはチームメンバーで各自アイデアを出しました。
私は過去に調理師をしていた経験から、「みんなでキロクごはん」という作った料理を共有するアプリなどを考えましたが、わくわくにはかけており・・・
他のチームメンバーが考案した、「ハッピーバーふぅデイ」という、誕生日ケーキのスタンプみたいなものが表示されて、画面に向かって「ふぅーっ」と息を吹きかけるとろうそくの火が消えるアプリは、とてもワクワクして面白かったのですが、現実的に厳しく断念。
そんな中、今回作るアプリが決まりました!
それは・・・**「ジョジョ立ち倶楽部」** です!

## アプリの概要
– ジョジョ立ち倶楽部は、有名な漫画およびアニメシリーズ「ジョジョの奇妙な冒険」に登場するキャラクターたちのポーズである「ジ

元記事を表示

【Rails】Dockerを利用したアセットプリコンパイルを設定する(Asset Pipeline)

# はじめに
本記事は、私が個人開発を行う中で、アセットプリコンパイルを適切に実行するまでに多大な時間を要してしまったので、今後自分自身が迷わないにするためという備忘録、さらには同じような境遇の方のお力になれればと思いを込めて記事にしたいと思います!!

# 基本概念のおさらい
まずは、ざっくりと、アセットプリコンパイルに関しての基本をおさらいします!

### そもそも、アセットプリコンパイルとは?
複数のアセットファイル(JavaScriptやCSS)を圧縮して連結することで一つのファイルにまとめること。
### アセットプリコンパイルをすると何が嬉しいの?
– アセットプリコンパイルにより、ウェブページの読み込み速度が向上するので、UXやSEOの改善が期待される
– キャッシュやバージョン管理の面でもメリットがある

### そもそも、「アセット」って具体的に何よ?
Railsにおける、「アセット」とは画像、CSS、JavaScriptファイルなどの静的ファイルのこと。

### アセットプリコンパイルの流れ
– 結合と圧縮:
– アセットプリコンパイラ(Sprocke

元記事を表示

railsとvue.jsを使用してchatアプリを作ってみた

#### 環境
– ruby 3.1.4
– rails 7.0.8.1
– vue 3.4.21

#### 事前準備

workspaceという作業環境を構築
バックエンドとフロントエンドで作業環境を分けた。

– 使用したライブラリ
rails
“rack-cors(クロスドメイン対策)“
“ActionCable(標準用意されている。サーバ側からクライアントに直接情報)“
vue.js
“axios(HTTPリクエストで使用)“
“vue-router(ルーティング処理)“
“actioncable“

#### バックエンド側

– データベースモデル
“`ruby:schema.rb
ActiveRecord::Schema[7.0].define(version: 2024_04_17_075212) do
create_table “messages”, force: :cascade do |t|
t.text “content”
t.string “sender_name”
t.integer “r

元記事を表示

LaTeX と Python で作る 1 ポイントたりとも表示崩れしない最強の帳票印刷ソリューション

# 元ネタ
元ネタはこちらです(以下「Figma と PHP」で略します)。

読んでなるほどと思いました。このように、誰かが苦労したおかげで後続が楽になるので感謝です。何が問題点として生じるのか、どんな解決方法が考えられるのか、が予め判明しているだけでもだいぶ楽になります。
反面、$\LaTeX$ の方が実装は簡易ではないかと思ったので、それを実践してみました。

## 条件と問題点
Figma と PHP の 44 ページに以下のような条件があります
– 改めて、満たしたい条件
– [x] ミリ単位で細かく帳票をデザインしたい。
– [x] 帳票デザインの保守性を維持するためにはビジュアルデザイン必須
– [x] 印刷時に見た目が一切崩れない

さらに、次のような障害を次々とクリアしていってます。
1. 文字参照の問題
1. 枠か

元記事を表示

OTHERカテゴリの最新記事