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

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

Rubyの@(アットマーク)について知ろう

## @(アットマーク)は何?
Rubyのプログラミング言語では、@(アットマーク)をよく目にします。これはインスタンス変数を宣言するために使用されます。

## インスタンス変数とは?
Rubyでは、クラスを使ってオブジェクトを作成できます。そして、各オブジェクトは異なる状態を持つことができます。インスタンス変数は、オブジェクトごとに異なる値を格納する変数のことです。これにより、オブジェクトが保持するデータを管理することができます。

## インスタンス変数の宣言
@を用いてインスタンス変数を宣言します。例を見てみましょう。

“`
class Person
def initialize(name)
@name = name
end

def greeting
puts “Hello, #{@name}!”
end
end
“`
ここで、@nameはPersonクラスのインスタンスごとに異なる名前を格納するためのインスタンス変数です。

## インスタンス変数の利用

“`
person = Person.new(“Kishida”)
perso

元記事を表示

[Ruby] メソッドとSymbolとProcの関係について

# はじめに

Railsを用いた開発を進めている中で、ブロックを渡すはずのメソッドにシンボル形式のメソッドを渡している処理を見かけました。

今までも同様の記述は見たことがあったのですが、なぜシンボル形式のメソッドを使用するのかよく理解していなかったので、この機会にメソッド・Symbol・Procについて調べてみました。

# Enumerable#collectを使用した例

Rubyリファレンスマニュアルには下記のようなcollectメソッドの使用例が記載されています。

“`rb
p (1..3).collect { “cat” } # => [“cat”, “cat”, “cat”]
“`
> 各要素に対してブロックを評価した結果を全て含む配列を返します。

上記の例だと`(1..3)`の各要素に対して`{ “cat” }`を適用するため、戻り値が`[“cat”, “cat”, “cat”]`となるわけです。

一方で、ブロックの記法を用いず、シンボル形式のメソッドを渡す書き方もあります。
“`rb
p (1..3).collect(&:to_s) # => [“1”,

元記事を表示

rails deviceを使用したメールアドレス変更

## はじめに
deviceを使用したメールアドレス変更機能を実装する機会があったので、学んだことをメモに残します
主に、GitHubで公開されているdeviseのコーディングを追う際のメモとしてきさいしていきます

## 実装内容
・メール認証を挟んだメールアドレス変更を実装したい
(今回はメールアドレスを変更できるのはログインしている状態のみ)

処理の流れは以下

新しいメールアドレスを取得

認証URLを含む認証メールの送信

認証できたらメールアドレス変更

## 前提事項
・既にdeviseが導入されている環境
・メール認証を含む新規登録〜ログインまで実装済み
(confirmable機能はすでに実装済み)

## 実装手順
### ①データベースへの項目追加
confirmable機能が利用するデータ項目を追加してあげる必要があります。

メールアドレス変更で使用するカラムは“`unconfirmed_email“`

“`app/db/migrate/20230603034400_add_column_to_users.rb
class AddColumn

元記事を表示

【Ruby Gold3.1詰まったシリーズ】raiseメソッドの動き

# はじめに
今回はraiseに関する内容です。raiseは呼び出す場所によって働きが異なるらしいので簡単にまとめてみます。

# 確認してみた
環境はruby2.5.3です。
まず、例外を発生させ、rescueの中にraiseを記載した
~~~ruby
begin
“adventcalendar”.hoge
rescue NameError
raise
end
~~~
を実行すると、
~~~
Traceback (most recent call last):
2: from /usr/local/bin/irb:11:in `


1: from (irb):2
NoMethodError (undefined method `hoge’ for “adventcalendar”:String)
~~~
が表示され、beginで発生した例外NoMethodError をraiseで再度呼び出している。
次に、beginの中にもraiseを記載した
~~~
begin
raise
rescue
raise
end
~~~

元記事を表示

Ruby芸160チャレンジ(#8)ログの集計

## この記事は何
[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/8.md

“`bash
$ awk -F: ‘{print $(NF-2)}’ access.log

元記事を表示

mruby/cで安く省電力しようと思ったらやっぱりPIC32だった

# はじめに
今までいくつかマイコンを触ってみて
PIC32MXというマイコンはドキュメントが見やすく32bitマイコンには珍しくDIP品もあるので回路を組みやすい。
脱マイコンボードをしたい方にはATmega328Pと同じくらいお勧めしたい素晴らしいマイコンだと思っています。

ただ個人的に電池駆動で長時間動かしてみたいという気持ちが。
PIC32MXというものは消費電力が高いのです。
そこで今回の記事に至ります。

# マイコン選定
マイコンを選ぶ際に考慮した項目
– mruby/cを搭載できそうなROM,RAMを持っている
– RAMを保持したままスリープできるモードがある
– 価格が安い(単品注文で1000円行かないくらい
– 現在入手できるもの

いろいろあって候補がこの2つ
– STM32L4x1
– PIC32CM Lx

それで私は標題にある通りPIC32を選ぶわけなのですが、大した理由があるわけでもなく。
価格(安い)と好奇心(なんか最近登場したみたい)から選んでます。

# PIC32CM Lxとは
PIC32の型番にはMIPSコアのPIC32Mからはじまるもの

元記事を表示

テストコード嫌いを無くすコツ

## はじめに
どうも、どうもどうも、ツクリンクでRailsエンジニアをしている @akaryu0206 です。
こちらの記事は[ツクリンク プロダクト部 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/tsukulink)、8日目の記事です。
普段記事を書く機会がなく(苦手なだけ)、克服したいなーと思っているところでもあったので記事を書くことにしました。

## テストコードについて
と、言うことで今回はテストコードについて書いてみようと思います。
正直なところ、テストコードは「なくてもいい」ものではあるので、私がこれまでお仕事をさせて頂いた企業でも全く書かないところもあれば徹底的に書くところもあり、チーム文化次第といったところでした。
弊社はテストコードは必ず書く文化ですが、チームにテストコードを書くのが苦手と言うメンバーがいたので私なりのコツをアドバイスしたところ意外と好評だったのでそれを紹介しようと思います。

なお、この記事ではRspecを用いたテストコードについ

元記事を表示

Railsエンジニア向けRubyプロジェクトの始め方

この記事は新米エンジニアの著者の個人開発の経験を元に実践しているプロジェクトの始め方です。追加ですべき作業や、改善すべき箇所などありましたらコメント頂けれると有り難いです。
# はじめに
Railsのプロジェクトは`$ rails init`で、プロジェクトのディレクトリが作成され、ディレクトリ構成について考えずMVCモデルに従って実装を始められます。また、Gemを追加する場合もGemfileに記述することで、Gemを使って実装できるようになります。
この記事は、Ruby単体のプロジェクトを始める際の`$ rails init`の代わりになる手引き書になれば、と考え作成しております。

※ ここでいうプロジェクトとは、業務レベルの大規模なものは想定しておらず、個人で開発する小規模なプログラムを想定しています。「1つの`.rb`ファイルにまとめるには少し大きいけど、複数ファイルに分けるにはディレクトリ構成に悩む」、「グローバル環境を汚したくないからBundlerでGemを管理したい」、「rbenv globalが古いバージョンになっているが、趣味のプロジェクトぐらい最新のRubyを使いた

元記事を表示

[Rails] ActiveModelは何をしているのか

ActiveModelはActiveRecordっぽいオブジェクトを作るために使えるという程度の認識だったので、少し理解を深めたくて調査しました。この記事では、ActiveModel::Dirtyに焦点を当てます。

## 代表的な使い方

https://api.rubyonrails.org/classes/ActiveModel/Dirty.html

“`ruby
class Person
include ActiveModel::Dirty

define_attribute_methods :name

def initialize
@name = nil
end

def name
@name
end

def name=(val)
name_will_change! unless val == @name
@name = val
end

def save
# do persistence work

changes_applied
end

def reload!
#

元記事を表示

[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 などで割りと安く手に入ることは良いのですが、持続性がないので、エスプレッソを炭酸水で割るエスプ

元記事を表示

OTHERカテゴリの最新記事