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

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

[Ruby] ros-apartment と rails 7(と alias の仕様について)

## はじめに
弊プロダクトではマルチテナントを実現出来る [apartment gem](https://github.com/rails-on-services/apartment) を使っています(正確には本家は更新が止まっているので rails-on-services プロジェクトの ros-apartment)。
今回 apartment を 2.11.0、rails を 7.0.8 にアップデートした所遭遇したエラーとその対応について記します。

## TL;DR
apartment は master ブランチのリリースが止まっているので development ブランチを使用する(自己責任において)。

“`ruby:Gemfile
gem ‘ros-apartment’, require: ‘apartment’, git: ‘https://github.com/rails-on-services/apartment.git’, branch: ‘development’
“`

## ros-apartment について
オリジナルの [apartment](

元記事を表示

【Ruby】便利なEnumerableについて

## はじめに
“Enumerable” は “enumerate”(列挙する)に由来し「列挙可能な」という意味です。

`Array, Hash, Range` 等のクラスに `Enumerableモジュール` はインクルードされており、代表的なのは、 `each、map、select` 等です。実際に業務で使って便利だなと思ったものを含めて整理したいと思います。

## 便利なメソッドたち

### [include?](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/include=3f.html)
`==`の関係が成立する時にtrueを返します

“`ruby
[1, 2, 3].include?(2) # => true
“`

## [all?](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/all=3f.html)
全ての要素が真である時にtrueを返します。そうでない時はfalseを返します。

“`ruby
[1, 2, 3].

元記事を表示

インスタンスメソッド/クラスメソッド/モジュールの状況別呼び出し方

# インスタンスメソッドとクラスメソッドの呼び出し方

プログラミングにおいて、メソッドの呼び出し方は、そのメソッドがインスタンスメソッドなのか、クラスメソッドなのかによって異なります。ここでは、これらのメソッドをさまざまな状況でどのように呼び出すかについて解説します。

## インスタンスメソッドをクラス外で呼び出す

インスタンスメソッドは、クラスのインスタンスを介して呼び出します。まずはクラスのインスタンスを作成し、そのインスタンスを通じてメソッドを呼び出します。

“`ruby
class MyClass
def instance_method
puts “インスタンスメソッドです”
end
end

# インスタンスを生成
my_object = MyClass.new
# インスタンスメソッドを呼び出す
my_object.instance_method
“`

## クラスメソッドをクラス外で呼び出す

クラスメソッドは、クラス自体をレシーバとして呼び出します。インスタンスを生成する必要はありません。

“`ruby
class MyClass

元記事を表示

高校生向けプログラミング講座「福岡県Rubyキャンプ」にコーチとして参加してきました!

https://qiita.com/advent-calendar/2023/ruby

# はじめに

今年も[高校生向けプログラミング講座「福岡県Rubyキャンプ」](https://www.digitalfukuoka.jp/topics/253?locale=ja)に参加しました。
[ハウインターナショナル](https://www.haw.co.jp/)からは、 @tsuruoka91 と @torifukukaiou の2名でコーチを務めました。
他社さまも含めて総勢10名程度のコーチ陣がそろいました。

[<開催報告> 令和5年度高校生向けプログラミング講座「福岡県Rubyキャンプ」](https://www.digitalfukuoka.jp/topics/253?locale=ja)

https://www.digitalfukuoka.jp/topics/253?locale=ja

参加してみて感じたことを記します。

# コーチの役割

私は、コーチとして参加しました。
私はこのキャンプを主導するような立場ではなく、協力者の一人として、コーチに名乗

元記事を表示

Osaka でも Ruby の Hanami を開催できるか検証した結果

[`大江戸Ruby会議 10`](https://regional.rubykaigi.org/oedo10/) で [`Hanamiを支える技術 2023`](https://speakerdeck.com/a_matsuda/asakusa-dot-rb-hanami-2023) を聴いて、その後の懇親会の [花やしき](https://www.hanayashiki.net/) で体験して、3 次会、4次会…でさらに話を聞いて、持ち帰って検証をした結果 **Osaka RubyHanami** の開催が決定しました。

懇親会の様子です。10 月の開催でしたが Hanami ができています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8369/3ddabaeb-eac2-c7e8-e310-716b193de0c2.png)

## Hanami を支える技術 2023 のおさらい

当日の発表から気になったことを抜粋しています。

### Hanami の要件

– 桜

元記事を表示

Rubyのメモリを調査したい

# Ruby のメモリの話

## メモリサイズを計測したりしたい

### ps を使う

“`rb
rss = `ps -o rss= -p #{Process.pid}`.to_i * 0.001
vsz = `ps -o vsz= -p #{Process.pid}`.to_i * 0.001
puts “Process: #{Process.pid}: RSS = #{rss} MB, VSZ = #{vsz} MB”
“`

### オブジェクト数を使う

“`rb
puts “#{ObjectSpace.memsize_of_all * 0.001 * 0.001 } MB”
“`

### 試してみる

“`ps.rb
#!/usr/bin/env ruby

require ‘objspace’
require ‘benchmark’

def mem_by_ps
rss = `ps -o rss= -p #{Process.pid}`.to_i * 0.001
vsz = `ps -o vsz= -p #{Process.pid}`.to_i *

元記事を表示

Railsのcallback(after_commitエイリアス系)に意地悪されたので先生に言いつけなかった話

これは[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)の5日目の記事です。

# はじめに
はじめまして、株式会社Hubbleのしがないバックエンドエンジニアです。
名乗るほどの者でもありませんので、どうぞお好きお呼びなすってくだせえ。

今回[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)にて、5日目の記事を担当させていただくことになりました。

何書こうかなーと思っていたんですが、
直近で巧妙なトラップに引っ掛かったので、ちょっと ~~愚痴~~ 備忘録も兼ねて残しておこうと思います。

そんなにボリュームもないのでサクッと読んでいただけると思います!

# RailsのActive Record callbackについて
Railsを使っていたらお世話になっている方も多いと思いますが、
せっかくなので、今をときめくChatGPTさんに一言で表してもらいました。
“`
Rail

元記事を表示

【Ruby Gold3.1詰まったシリーズ】selfの参照先

# はじめに
今回はselfに関する内容です。selfの参照先はselfが呼び出される場所で異なるらしいのでかんたんにまとめてみます。

# 確認してみた
環境はruby2.5.3です。
まず、selfを呼出すメソッドが定義されたClsを作成し実行する。
~~~ruby
class Cls
p self
def hoge
self
end
end
~~~
すると、
~~~
Cls
~~~
が表示され、Cls内のselfはClsクラスを参照している。
次に、Aインスタンスを作成し、AとA.hoge(=self)が同じかどうか確認すると、
~~~
irb(main):007:0> A = Cls.new
=> #
irb(main):008:0> A.equal?(A.hoge)
=> true
~~~
trueとなり、メソッド内のselfはレシーバ(Aインスタンス)を参照していることが分かった。

# おわりに
確認した結果、selfの参照先はselfがクラス内に定義された時はクラス自身を、メソッド内に定義された時はレシ

元記事を表示

Ruby芸チャレンジ(#7)少し複雑な条件分岐

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/7.md

“`bash
$ cat kakeibo.txt | awk ‘{tax=($1<"201

元記事を表示

db:migrateをちゃんと理解する

このエントリーは [BitStar Advent Calendar 2023](https://qiita.com/advent-calendar/2023/bitstar) の7日目になります。
ここまでの投稿を見ていると自分の働いてる会社はエンターテックカンパニーではなく実はChatGPTカンパニーなのではないかと思い始めていたんですが、そんなことはないと我に返ったのでここでしっかり流れを断ち切りたいと思います。

ということで私からはRailsエンジニア向けに「`db:migrate`って結局何してるの?」という話をしたいと思います。(これ実は意外と知らない人いるのかなって個人的に思っただけなので、当然のごとくそれくらい知ってるよっていう方はスルーしてください)

## 巨大テーブルの操作は何かと気を使う
私自身普段は今年リリースした”BitStar Match”の開発が主な業務になるんですが、少し前からエンジニア採用にも携わってまして、その際に候補者の方から「御社の開発における魅力は何ですか?」といった質問をたまに受けることがあります。
そこで私はいつも「インフルエンサー業界の

元記事を表示

Rails アプリケーションでパスキー認証を実装してみる

:::note info
この記事は、[LITALICO Engneers Advent Calender 2023](https://qiita.com/advent-calendar/2023/litalico) シリーズ1の7日目の記事です。前日は、@k_orita の「[一年目の新人こそ、チーム1厳しいレビュワーになろう!](https://qiita.com/k_orita/items/290e048fe09e30e102df)」でした。
:::

# はじめに

LITALICO プロダクトエンジニアリング(PE)部の片桐英人(かたぎり えいと)です。基盤グループに所属しています。2022年11月に入社しました。岐阜県岐阜市からリモートワークしています。

ここ最近、伊藤園から発売されていた「[ガッサータ](https://www.tullys-cup.jp/lineup/gassata/)」を愛飲しています。コーヒー味の炭酸飲料です。既に生産中止になっているようで、Amazon などで割りと安く手に入ることは良いのですが、持続性がないので、エスプレッソを炭酸水で割るエスプ

元記事を表示

Ruby 掲示板 などの参考資料

一応、参考としてGET で動かしてみた、コードは
””””
#!C:/Ruby32_x64/bin/ruby

print “Content-type:text/html”,”\n”,”\n”

print “

test decoder

“,”\n”
# print “it test.”
# decode #デコードをcoll
# def decode
# end

in_d = {
“apple” => “iphon”,
“banana” => “150”,
“cherry” => “200”
}
# come = in_d[“comment”]
in_d[“あまおう苺”] = “250”
print “りんごは”,in_d[“apple”],”円
“,”\n”
in_d[“apple”

元記事を表示

Vite × Railsのnet::ERR_CONNECTION_REFUSEDエラーの解決策

## 事象

最近、フロントエンドのビルドツールとして人気のあるViteと、バックエンドフレームワークであるRailsを組み合わせて開発を行っていた際、ブラウザのコンソールにnet::ERR_CONNECTION_REFUSEDというエラーが発生しました。この記事ではその対処法を共有いたします。

## 原因

このエラーは、ViteがデフォルトでローカルホストのIPv6アドレス(::1)を使用するため発生していました。これにより、Railsサーバーとの接続が拒否され、フロントエンドからのリクエストが失敗する状態になっていました。

## 対処法

問題を解決するためには、Viteの設定ファイル(config/vite.json)でホストをIPv4アドレス(127.0.0.1)に明示的に設定する必要がありました。以下のように変更することで、エラーが解消され、Railsサーバーへの接続が成功しました。

“`config/vite.json
“development”: {
“autoBuild”: true,
“host”: “127.0.0.1”,
“pub

元記事を表示

ChatGPTに対する賢い質問方法 n選(チートシート)

# 0. 前奏
ChatGPT。AIの歴史は彼以前、彼以後に分かれると言われています。

仕事のやり方やビジネスモデルは大きく変わり、生活までも変えてしまうほどのインパクトを持った技術が2022年11月に爆誕しました。

もしもです。もしもあなたの目の前に、月額20ドルで、圧倒的知識量を誇り、無限回質問をしてもよく、初歩的な質問をしても馬鹿にされず、時間を奪っても文句を言わず、場合によっては間違いを正してくれる、超高性能の家庭教師が目の前にいるとしたら、あなたはどうしますか?

使い倒すに決まっています。そう、彼を。ChatGPTを。あの伝説の男を。

ですが、彼の力は、強大かつ壮大すぎて、何ができるのかが分からない。どう質問したら綺麗に返ってくるのかわからない。身近な業務でどのような質問を投げればいいのか知りたい。

これは、そんな悩める子羊たちに送る、吾輩からのささやかな、セレナーデ。

# 1. 一手目の質問方法
## 1.1 基本的な質問のテクニック【†一番搾り†】
ChatGPT戦線における基本戦術は、質問を絞ることにあります。人間の会話もChatGPTへの会話も、具体的に意

元記事を表示

Rubyのオブジェクトクラス10選とその例

# Rubyのオブジェクトクラス10選とその例

Rubyは、多種多様なオブジェクトクラスを提供するプログラミング言語です。これらのクラスは、データの操作や計算、表現に不可欠な役割を果たします。以下では、Rubyでよく使用される10種類のオブジェクトクラスとその具体的な例を紹介します。

## 数値クラスとその例
1. **`Integer`**: 整数を表します。
– 例: `1`, `100`, `-50`
2. **`Float`**: 浮動小数点数を表します。
– 例: `3.14`, `2.5e8`
3. **`Rational`**: 有理数を表します。
– 例: `Rational(2,3)`, `1/2r`
4. **`Complex`**: 複素数を表します。
– 例: `Complex(1,2)`, `1+2i`

## 文字列クラスとその例
5. **`String`**: 文字列を表します。
– 例: `”hello”`, `’world’`

## 配列クラスとその例
6. **`Array`**: 複数の要素を順序付けて格納しま

元記事を表示

RESTfulって結局なんなんだ

## 記事を書いた経緯
Ruby on Railsでresourcesを使うにあたって、これはRESTfulってやつをちゃんとわかっていないとダメだと思ったので自分なりにまとめた記事です
これまでDjangoやRailsの中でなんとなく把握していたRESTfulという概念について初心者なりに深掘りしてみました。

## そもそもRESTってどのレイヤーで何を指す言葉?
教科書的にいうと、

『ウェブサービスの設計スタイルで、リソースをURLで識別し、HTTPメソッドを使用して操作するステートレスなアーキテクチャ』

分かるようなわからないような感じです。
何か学ぶときにこの言葉がどの辺のレイヤーにいるのかイメージできると理解が進むのでここをはっきりさせたい。

ということでもう少し身近な建設に例えてこんな感じにイメージしました

![スクリーンショット 2023-12-05 15.43.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/8b28aad6-6

元記事を表示

Ruby未経験者がRubyな会社で生き延びるための三種の神器

[SmartHR Advent Calendar 2023](https://qiita.com/advent-calendar/2023/smarthr)シリーズ2の6日目です。

SmartHRは、[RubyKaigi2023](https://rubykaigi.org/2023/)や[Kaigi on Rails 2023](https://kaigionrails.org/2023/)などRuby系のテックカンファレンスや[Railsガイド](https://railsguides.jp/)に協賛しており、また、イベントでの登壇や書籍の執筆などRubyに精通したエンジニアが数多く在籍しています。
それゆえ、多くのプロダクトでRuby(Rails)が採用されたりもしています。

そんなRubyな会社にRuby未経験で入社(2023/4〜)した私が、これまで生き延びるために~~すがりついている~~活用しているツールやサービスを「三種の神器」として紹介します。

## その1 RubyMine
言わずとしれたJetBrains社製のIDEです。以下の機能をよく利用しています。

#

元記事を表示

【Ruby Gold3.1詰まったシリーズ】可変長引数の値の取得

# はじめに
今回は可変長引数に関する内容です。メソッドを呼び出して可変長引数で値を受取る際、呼び出し側の引数が[]か()かで可変長引数の値の取得結果が異なっていたので簡単にまとめてみます。

# 確認してみた
環境はruby2.5.3です。
まず、可変長引数が設定されたメソッドを作成し実行する。
~~~ruby
class Cls
def Foo(*args)
p args
p *args
p args[0]
end
end
~~~
次に[]と()を引数としてFooメソッドをそれぞれ呼び出す。
~~~
irb(main):008:0> Cls.new.Foo [1,2,3]
[[1, 2, 3]]
[1, 2, 3]
[1, 2, 3]
irb(main):009:0> Cls.new.Foo(1,2,3)
[1, 2, 3]
1
2
3
1
~~~
出力された値に差異があった。

# おわりに
確認した結果、呼び出し側の引数が()か[]かで可変長引数の値の取得結果が異なっていた。
可変長引数は配列に対して引数の値を格納し、配列を渡した場合は二重配列と

元記事を表示

Ruby芸160チャレンジ(#6)For文

## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

## 今回のテーマ
https://github.com/shellgei/shellgei160/blob/master/answer/6.md

“`bash
$ seq 5 | awk ‘{for(i=1;i<$1;i++){prin

元記事を表示

DXOpalでスイカゲームみたいなのを作った

:::note info

これは Ruby Advent Calendar 2023 の6日目の記事です。一つ前の記事は[Rubyのプロダクトコードの複雑度の変化を可視化する](https://zenn.dev/ryutaromizokami/articles/333ef2dd6d9c51)です。

:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/69c4f453-9eb8-ecf1-bbb0-c98f606defc8.png)

こんにちは。今年は mruby や picoruby にも触れてみたかったのですがもう12月ですね……おかしいな……。


# できたもの

遊んでみたい方はこちらのリンクからどうぞ。

[https://sonota88.github.io/dxopal-suikalike/index.html](https://sonota88.github.io/dxopal-suikalike/index

元記事を表示

OTHERカテゴリの最新記事