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

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

サイトマップを超簡単に自動生成する方法(Ruby)

## 概要
サイトマップを超簡単に自動生成する方法を紹介

## 環境
Ruby

## 手順
1. gemのインストール
1. コード記述
“`rb
require ‘sitemap_generator’
SitemapGenerator::Sitemap.default_host = ‘https://example.com’
SitemapGenerator::Sitemap.public_path = “./” # sitemapを配置する場所(デフォルトはpublic配下)
SitemapGenerator::Sitemap.compress = false #圧縮するかどうか

SitemapGenerator::Sitemap.create do
add ‘/article1.html’ # ここに追加したいパスを追加していく
end
“`
3. 実行

## 結果
カレントディレクトリにsitemap.xmlが生成される
“`xml

元記事を表示

Ruby – grepに使う正規表現をエスケープして埋め込む例 ( fill in escaped regexp to grep pattern )

# 例

カッコが正規表現として扱われしまい、ヒットしない

“`rb
[‘(ABC)_XYZ’].grep(/(ABC)_XYZ/)
# => []
“`

ヒットする

“`rb
[‘(ABC)_XYZ’].grep(/#{Regexp.escape(‘(ABC)’)}_XYZ/)
# => [“(ABC)_XYZ”]
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

元記事を表示

Ruby + Rspec – テスト失敗のエラー時にアフターフック処理して赤文字でカスタムメッセージを標準出力する ( example単位 )

after each の中で exception を参照すれば検証失敗エラーのときだけに何らかの処理ができる

通常Rspecはどのように検証が失敗したかを丁寧に表示してくれるが
テストの構成上、標準出力で詳細が分かりづらい場合はアフターフックを仕込んで、何か標準出力させておくとデバッグがしやすいかもしれない

( たとえば Rails の Requestのテストの時に response body を標準出力するなど )

# 例

“`rb
describe ‘Test’ do
after(:each) do |example|
if example.exception

puts “\033[31m” # 赤字開始 – 標準出力で文字色を付ける

puts example.full_description # Test It Description
puts example.description # It Description
puts example.location # /path/to/spe

元記事を表示

RubyのWasmに一歩だけ入門してみる

Rubyの実行結果が欲しいけど、サーバー用意したりAPI用意したりとかまではしたくない。。
というきっかけもあって、ずっと気になってたWasmを使ってみようかなということが最近ありました。

私と同じくWasmを触ったことないような人にとって、この記事で最初の一歩くらいの、入門の手助けになればいいなと思っています。

自分がWasmを触る中で、こんなことできるんだなというの体感しながら、(似たようなものですが)3つくらい作ってみたので、それを用いながら入門していけたらと思います。

## 作ったやつ

### バリデーションをJSじゃなくてRubyでやるやつ

https://hatsu38.github.io/ruby-wasm/validator/

![スクリーンショット 2023-12-08 1.03.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107345/41497afb-a37a-926e-b9a7-0e6e9d2aa3ae.png)

### 正規表現をRubyでやるやつ

h

元記事を表示

Ruby芸160チャレンジ(#9)ログ上の日付文字列に対する範囲抽出

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

“`bash
$ cat log_range.log | sed -n ‘/24\/Dec

元記事を表示

あなたの知らないmrubyの話 1(かも)

# mrubyはここから始まった。
(昔のことなので記憶違いがあるかもです。気がついた方はこそっとおしらせください)

### 2009年Ruby東京プレゼンテーション

事の起こりは2009年Ruby東京プレゼンテーションでした。
Ruby東京プレゼンテーションとは福岡県がこの年から始めたRubyに関するセミナーで福岡県も島根県と並んでRubyを応援していますということを示したもので2018年まで毎年秋葉原で開催されていました。
この会の中に少テーブルにわかれてディスカッションするというのがあってその中で
”組込み向けにRubyが使えないか”という話がでたのがこのmruby開発のきっかけです。
この年の内閣府の「先端科学研究」支援事業に応募したものの採択されなかったようです。ちょうど鳩山政権が誕生して予算についてかなり制限があったようです。

### 再度くじけず挑戦

九州経済産業局「平成22年度地域イノベーション創出研究開発事業」に組込み向けRubyということで再挑戦することに。これがなければmrubyは生まれていなかったでしょう。この時はまつもとさんのNACL、九州工業大学(田

元記事を表示

クラウドテックをRails6.1からRails7.0へアップグレードしたので、やったことをまとめてみました

この記事は クラウドワークス[Advent Calendar 2023](https://qiita.com/advent-calendar/2023/crowdworks)の9日目の記事です。

# はじめに
株式会社クラウドワークスの@uichiです。和食作りに日々励んでいます。
エンジニアとして[クラウドテック](https://crowdtech.jp/)というフリーランスと企業をマッチングするエージェントサービスを開発しています。

クラウドテックは2023年11月に、Rails6.1からRails7.0へとアップグレードしました。アップグレード時点でRails7.1がリリースされていましたが、既にRails7.0アップグレードのための変更対応を一通り行いレビュー状態になっていたことと、7.1に対応するためには新たな変更が必要になるため7.0までとしました。

本記事では、Rails6.1からRails7.0へ移行するために行なったことをまとめます。

# Rails7.0に依存するgemのアップグレード
`Gemfile`のRailsバージョンを指定している箇所を`gem

元記事を表示

AWS QuickSightSDKのGenerateEmbedUrlForRegisteredUserで埋め込みURLを発行し、グラフを表示させる

# はじめに
この記事はシーエー・アドバンス9日目の記事です!

今回はバックエンドに利用しているrailsから、QuickSightSDKの[GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/ja_jp/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)を利用して、QuickSightの埋め込み用URLを発行し画面にグラフ(ダッシュボード)を表示させてみます。
QuickSight自体、グラフのURLを全体公開にしてサイトに埋め込むことはできるのですが、それではURLさえわかれば誰でもグラフを見れる状態でよくないので、埋め込みURLを発行して表示させる方法をとります。

## 前提条件
– AWSアカウントを所持していること
– QuickSightでアカウント登録していること
– 24$/月ぐらいかかります
– [料金 – Amazon QuickSight \| AWS](ht

元記事を表示

Rubyで、テスト対象のコードで exit していると RSpec がそこで正常終了する

並行で行っている RSpec のテストの実行数がなぜか実行ごとに異なるという問題が発生した。実行ログを調査したところ、テストの途中で RSpec が正常に終了していることがわかった。原因はテストコード中で [`exit` を実行](https://docs.ruby-lang.org/ja/3.2/method/Kernel/m/exit.html)していること。特に rake タスクのテストとかで結構あると思う。

例えば、このようなコードがあり

“`ruby:main.rb
def assert_some_conditions!(conditions)
if conditions == 1
exit
end
end
“`

このようなテストを書いた時、

“`ruby:main_spec.rb
require ‘rspec’
require ‘./main’

RSpec.describe ‘assert_some_conditions!’ do
it ‘be nil when 1(まちがい)’ do
expect(assert_some_co

元記事を表示

RoRでTimeとDateの使い分け

Ruby on Railsでは、TimeとDateは異なる目的で使用される2つの異なるクラスです。以下にその主な違いをまとめます。

# TimeとDateの違い
### Time
`Time`は、日付と時間の両方を扱います。これは、1970年1月1日からの経過秒数として時間を内部的に格納します。`Time`オブジェクトはタイムゾーンを持つことができます。

“` ruby:Timeを使用
time = Time.now
puts time
# => 2023-09-15 12:34:56 +0900
“`

### Date
一方、`Date`は日付のみを扱います。時間やタイムゾーンは考慮されません。

“`ruby:Dateを使用
date = Date.today
puts date
# => 2023-09-15
“`

## 異なる点
– Time
– 時間やタイムゾーンを扱う必要がある場合、または特定の時間に何かをスケジュールするような場合に使用します。
– (例:午前9時)

– Date
– 日付のみを扱う場合、または時間やタイムゾーンを気にする

元記事を表示

initializeメソッドについて

#### Rubyで使用される[initializeメソッド](https://docs.ruby-lang.org/ja/latest/method/Object/i/initialize.html)はどんな役割があるかまとめてみました。

initializeメソッドはクラスがnewメソッドでインスタンス化した時に一度だけ実行されるメソッドです。

引数として必要なデータを渡すことで、インスタンスの中にデータを取り込んだりむことができます。
データを渡さずに、インスタンス化と同時に実行したい処理があるときにもこのメソッドを使います。

##### -記述の方法-
“`
class クラス名
def initialize()
# ここにインスタンス化と同時に実行したい処理を記述
end
end
“`

#### 実際に記述してみましょう!

今回はCatクラスを作り、2匹の猫を設定しました。
“`
class Cat
def initialize(name)
puts “実行されました”
@name = name
end
def e

元記事を表示

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

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

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

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

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

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

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

“`
kishida = Person.new(“岸田”)
kishida.g

元記事を表示

[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!
#

元記事を表示

OTHERカテゴリの最新記事